From 6248080dfd3065bb5817ae93531357c7f952585b Mon Sep 17 00:00:00 2001 From: Sebastian Diaz Date: Wed, 22 Jan 2025 13:18:02 +0100 Subject: [PATCH] unit test for adding new organism (#4138) add other organism to microbial sample models and unit test for adding new organism --- .../workflows/microsalt/models/sample.py | 1 + .../workflows/mutant/models/sample.py | 1 + cg/store/crud/read.py | 2 +- .../test_microbial_store_order_service.py | 29 ++++++++++++++++++- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/cg/services/orders/validation/workflows/microsalt/models/sample.py b/cg/services/orders/validation/workflows/microsalt/models/sample.py index c20c0fb870..86a49f1082 100644 --- a/cg/services/orders/validation/workflows/microsalt/models/sample.py +++ b/cg/services/orders/validation/workflows/microsalt/models/sample.py @@ -12,6 +12,7 @@ class MicrosaltSample(Sample): elution_buffer: Annotated[ElutionBuffer, BeforeValidator(parse_buffer)] extraction_method: Annotated[ExtractionMethod, BeforeValidator(parse_extraction_method)] organism: str + organism_other: str | None = None priority: PriorityEnum reference_genome: str = Field(max_length=255) _verified_organism: bool | None = PrivateAttr(default=None) diff --git a/cg/services/orders/validation/workflows/mutant/models/sample.py b/cg/services/orders/validation/workflows/mutant/models/sample.py index 51ca8fe953..2b0a972feb 100644 --- a/cg/services/orders/validation/workflows/mutant/models/sample.py +++ b/cg/services/orders/validation/workflows/mutant/models/sample.py @@ -25,6 +25,7 @@ class MutantSample(Sample): extraction_method: Annotated[ExtractionMethod, BeforeValidator(parse_extraction_method)] _lab_code: str = PrivateAttr(default="SE100 Karolinska") organism: str + organism_other: str | None = None original_lab: OriginalLab original_lab_address: str pre_processing_method: PreProcessingMethod diff --git a/cg/store/crud/read.py b/cg/store/crud/read.py index a6679fb966..c062bb77ec 100644 --- a/cg/store/crud/read.py +++ b/cg/store/crud/read.py @@ -948,7 +948,7 @@ def get_organism_by_internal_id(self, internal_id: str) -> Organism: internal_id=internal_id, ).first() - def get_all_organisms(self) -> list[Organism]: + def get_all_organisms(self) -> Query[Organism]: """Return all organisms ordered by organism internal id.""" return self._get_query(table=Organism).order_by(Organism.internal_id) diff --git a/tests/services/orders/store_service/test_microbial_store_order_service.py b/tests/services/orders/store_service/test_microbial_store_order_service.py index 55273284db..2052cf7165 100644 --- a/tests/services/orders/store_service/test_microbial_store_order_service.py +++ b/tests/services/orders/store_service/test_microbial_store_order_service.py @@ -12,7 +12,7 @@ ) from cg.services.orders.validation.workflows.microsalt.models.order import MicrosaltOrder from cg.services.orders.validation.workflows.mutant.models.order import MutantOrder -from cg.store.models import Case, Sample +from cg.store.models import Case, Organism, Sample from cg.store.store import Store @@ -48,6 +48,33 @@ def test_store_microsalt_order_data_in_status_db( assert db_case.data_delivery == str(DataDelivery.FASTQ_QC_ANALYSIS) +def test_store_microbial_new_organism_in_status_db( + store_to_submit_and_validate_orders: Store, + microsalt_order: MicrosaltOrder, + store_microbial_order_service: StoreMicrobialOrderService, +): + """Test that a new organism in a Microsalt order is stored in the status db.""" + # GIVEN a store with no organisms + assert store_to_submit_and_validate_orders.get_all_organisms().count() == 0 + + # GIVEN a Microsalt order with a new organism + microsalt_order.samples[0].organism = "Canis lupus familiaris" + microsalt_order.samples[0].reference_genome = "UU_Cfam_GSD_1.0" + + # WHEN storing the order + store_microbial_order_service.store_order_data_in_status_db(microsalt_order) + + # THEN the organism should be stored in the status db + organisms: list[Organism] = store_to_submit_and_validate_orders.get_all_organisms().all() + dog: Organism = [ + organism for organism in organisms if organism.name == "Canis lupus familiaris" + ][0] + assert dog.reference_genome == "UU_Cfam_GSD_1.0" + + # THEN the organism should not be verified + assert not dog.verified + + def test_store_mutant_order_data_control_has_stored_value( mutant_order: MutantOrder, store_to_submit_and_validate_orders: Store,