Skip to content

Commit e112f70

Browse files
authored
Return artefact status from api (#65)
* Return artefact status from api * Replace null artefact status with 'UNDECIDED' * Bug fixes
1 parent eef21c0 commit e112f70

File tree

6 files changed

+56
-3
lines changed

6 files changed

+56
-3
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"""Make artefact status not nullable
2+
3+
Revision ID: 8317277d4333
4+
Revises: 8d8643821588
5+
Create Date: 2023-12-04 08:20:23.131927+00:00
6+
7+
"""
8+
from alembic import op
9+
10+
# revision identifiers, used by Alembic.
11+
revision = "8317277d4333"
12+
down_revision = "8d8643821588"
13+
branch_labels = None
14+
depends_on = None
15+
16+
17+
def upgrade() -> None:
18+
op.execute("ALTER TYPE artefact_status_enum RENAME TO artefact_status_enum_old")
19+
op.execute(
20+
"CREATE TYPE artefact_status_enum AS "
21+
"ENUM('APPROVED', 'MARKED_AS_FAILED', 'UNDECIDED')"
22+
)
23+
op.execute(
24+
"ALTER TABLE artefact ALTER COLUMN status TYPE "
25+
"artefact_status_enum USING status::text::artefact_status_enum"
26+
)
27+
op.execute("DROP TYPE artefact_status_enum_old")
28+
op.execute("UPDATE artefact SET status = 'UNDECIDED' WHERE status IS NULL")
29+
op.execute("ALTER TABLE artefact ALTER COLUMN status SET NOT NULL")
30+
31+
32+
def downgrade() -> None:
33+
op.execute("ALTER TYPE artefact_status_enum RENAME TO artefact_status_enum_old")
34+
op.execute(
35+
"CREATE TYPE artefact_status_enum AS ENUM('APPROVED', 'MARKED_AS_FAILED')"
36+
)
37+
op.execute("ALTER TABLE artefact ALTER COLUMN status DROP NOT NULL")
38+
op.execute("UPDATE artefact SET status = NULL WHERE status = 'UNDECIDED'")
39+
op.execute(
40+
"ALTER TABLE artefact ALTER COLUMN status TYPE "
41+
"artefact_status_enum USING status::text::artefact_status_enum"
42+
)
43+
op.execute("DROP TYPE artefact_status_enum_old")

backend/test_observer/controllers/artefacts/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class ArtefactDTO(BaseModel):
3333
series: str | None
3434
repo: str | None
3535
stage: str = Field(validation_alias=AliasPath("stage", "name"))
36+
status: ArtefactStatus
3637

3738

3839
class EnvironmentDTO(BaseModel):

backend/test_observer/data_access/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class Artefact(Base):
106106
)
107107
# Default fields
108108
due_date: Mapped[date | None]
109-
status: Mapped[ArtefactStatus | None]
109+
status: Mapped[ArtefactStatus] = mapped_column(default=ArtefactStatus.UNDECIDED)
110110

111111
__table_args__ = (
112112
UniqueConstraint("name", "version", "track", name="unique_snap"),

backend/test_observer/data_access/models_enums.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,4 @@ class TestExecutionStatus(Enum):
3838
class ArtefactStatus(str, Enum):
3939
APPROVED = "APPROVED"
4040
MARKED_AS_FAILED = "MARKED_AS_FAILED"
41+
UNDECIDED = "UNDECIDED"

backend/tests/controllers/artefacts/test_artefacts.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@
2929

3030
def test_get_latest_artefacts_by_family(db_session: Session, test_client: TestClient):
3131
"""Should only get latest artefacts and only ones that belong to given family"""
32-
relevant_artefact = create_artefact(db_session, "edge", version="2")
32+
relevant_artefact = create_artefact(
33+
db_session,
34+
"edge",
35+
version="2",
36+
status=ArtefactStatus.MARKED_AS_FAILED,
37+
)
3338

3439
old_timestamp = relevant_artefact.created_at - timedelta(days=1)
3540
create_artefact(db_session, "edge", created_at=old_timestamp, version="1")
@@ -48,13 +53,14 @@ def test_get_latest_artefacts_by_family(db_session: Session, test_client: TestCl
4853
"series": relevant_artefact.series,
4954
"repo": relevant_artefact.repo,
5055
"stage": relevant_artefact.stage.name,
56+
"status": relevant_artefact.status,
5157
}
5258
]
5359

5460

5561
def test_get_artefact(db_session: Session, test_client: TestClient):
5662
"""Should be able to fetch an existing artefact"""
57-
artefact = create_artefact(db_session, "edge")
63+
artefact = create_artefact(db_session, "edge", status=ArtefactStatus.APPROVED)
5864

5965
response = test_client.get(f"/v1/artefacts/{artefact.id}")
6066

@@ -68,6 +74,7 @@ def test_get_artefact(db_session: Session, test_client: TestClient):
6874
"series": artefact.series,
6975
"repo": artefact.repo,
7076
"stage": artefact.stage.name,
77+
"status": artefact.status,
7178
}
7279

7380

backend/tests/helpers.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def create_artefact(db_session: Session, stage_name: str, **kwargs) -> Artefact:
2020
series=kwargs.get("series", "jammy" if family == FamilyName.DEB else None),
2121
repo=kwargs.get("repo", "main" if family == FamilyName.DEB else None),
2222
created_at=kwargs.get("created_at", datetime.utcnow()),
23+
status=kwargs.get("status"),
2324
)
2425
db_session.add(artefact)
2526
db_session.commit()

0 commit comments

Comments
 (0)