def test_edit_region_in_panel(self): region = RegionFactory() url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': region.panel.panel.pk, 'entity_type': 'region', 'entity_name': region.name }) number_of_regions = region.panel.stats.get('number_of_regions') # make sure new data has at least 1 of the same items source = region.evidence.last().name publication = region.publications[0] phenotype = region.publications[1] new_evidence = Evidence.ALL_SOURCES[randint(0, 9)] original_evidences = set([ev.name for ev in region.evidence.all()]) original_evidences.add(new_evidence) region_data = { 'name': region.name, 'chromosome': '1', 'position_37_0': '12345', 'position_37_1': '12346', 'position_38_0': '12345', 'position_38_1': '123456', 'haploinsufficiency_score': choice(Region.DOSAGE_SENSITIVITY_SCORES)[0], 'triplosensitivity_score': choice(Region.DOSAGE_SENSITIVITY_SCORES)[0], 'required_overlap_percentage': randint(0, 100), "gene": region.gene_core.pk, "gene_name": "Gene name", "source": set([source, new_evidence]), "tags": [ TagFactory().pk, ] + [tag.name for tag in region.tags.all()], "publications": ";".join([publication, fake.sentence()]), "phenotypes": ";".join([phenotype, fake.sentence(), fake.sentence()]), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "penetrance": Region.PENETRANCE.Incomplete, "type_of_variants": Region.VARIANT_TYPES.small, } res = self.client.post(url, region_data) assert res.status_code == 302 new_region = GenePanel.objects.get( pk=region.panel.panel.pk).active_panel.get_region(region.name) assert region.panel.panel.active_panel.version != region.panel.version new_current_number = new_region.panel.panel.active_panel.stats.get( 'number_of_regions') assert number_of_regions == new_current_number self.assertEqual(int(region_data['position_37_1']), new_region.position_37.upper)
def test_add_tag_via_edit_details(self): """Set tags via edit gene detail section""" region = RegionFactory(penetrance=Region.PENETRANCE.Incomplete) url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': region.panel.panel.pk, 'entity_type': 'region', 'entity_name': region.name }) tag = TagFactory(name='some tag') region_data = { 'name': region.name, 'chromosome': '1', 'position_37_0': '12345', 'position_37_1': '12346', 'position_38_0': '12345', 'position_38_1': '123456', 'haploinsufficiency_score': choice(Region.DOSAGE_SENSITIVITY_SCORES)[0], 'triplosensitivity_score': choice(Region.DOSAGE_SENSITIVITY_SCORES)[0], 'required_overlap_percentage': randint(0, 100), "gene": region.gene_core.pk, "gene_name": "Gene name", "source": set([ev.name for ev in region.evidence.all()]), "tags": [tag.pk for tag in region.tags.all()] + [ tag.pk, ], "publications": ";".join([publication for publication in region.publications]), "phenotypes": ";".join([phenotype for phenotype in region.phenotypes]), "type_of_variants": Region.VARIANT_TYPES.small, "moi": region.moi, "penetrance": Region.PENETRANCE.Complete, } res = self.client.post(url, region_data) assert res.status_code == 302 new_region = GenePanel.objects.get( pk=region.panel.panel.pk).active_panel.get_region(region.name) assert sorted(list(new_region.tags.all())) != sorted( list(region.tags.all()))
def test_update_tags(self): region = RegionFactory() current_version = region.panel.version region.evaluation.all().delete() url = reverse_lazy('panels:update_entity_tags', kwargs={ 'pk': region.panel.panel.pk, 'entity_type': 'region', 'entity_name': region.name }) tag1 = TagFactory() tag2 = TagFactory() res = self.client.post(url, {'tags': [tag1.pk, tag2.pk]}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') gene = GenePanel.objects.get(pk=region.panel.panel.pk).active_panel.get_region(region.name) assert res.json().get('status') == 200 assert gene.tags.count() == 2 assert current_version == region.panel.panel.active_panel.version
def test_edit_region_name_ajax(self): region = RegionFactory() url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': region.panel.panel.pk, 'entity_type': 'region', 'entity_name': region.name }) old_region_name = region.name # make sure new data has at least 1 of the same items source = region.evidence.last().name publication = region.publications[0] phenotype = region.publications[1] gene_data = { 'name': 'NewRegion', 'chromosome': '1', 'position_37_0': '12345', 'position_37_1': '12346', 'position_38_0': '12345', 'position_38_1': '123456', 'haploinsufficiency_score': choice(Region.DOSAGE_SENSITIVITY_SCORES)[0], 'triplosensitivity_score': choice(Region.DOSAGE_SENSITIVITY_SCORES)[0], 'required_overlap_percentage': randint(0, 100), "gene": region.gene_core.pk, "gene_name": "Other name", "source": set([source, Evidence.ALL_SOURCES[randint(0, 9)]]), "tags": [ TagFactory().pk, ] + [tag.name for tag in region.tags.all()], "publications": ";".join([publication, fake.sentence()]), "phenotypes": ";".join([phenotype, fake.sentence(), fake.sentence()]), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "type_of_variants": Region.VARIANT_TYPES.small, "penetrance": Region.PENETRANCE.Incomplete, } res = self.client.post(url, gene_data) assert res.status_code == 302 new_gps = GenePanel.objects.get(pk=region.panel.panel.pk).active_panel old_gps = GenePanelSnapshot.objects.get(pk=region.panel.pk) # check panel has no previous gene assert new_gps.has_region(old_region_name) is False # test previous panel contains old gene assert old_gps.has_region(old_region_name) is True
def test_add_region_to_panel(self): gene = GeneFactory() gps = GenePanelSnapshotFactory() number_of_regions = gps.stats.get('number_of_regions') url = reverse_lazy('panels:add_entity', kwargs={ 'pk': gps.panel.pk, 'entity_type': 'region' }) region_data = { 'name': 'SomeRegion', 'chromosome': '1', 'position_37_0': '', 'position_37_1': '', 'position_38_0': '12345', 'position_38_1': '123456', 'haploinsufficiency_score': choice(Region.DOSAGE_SENSITIVITY_SCORES)[0], 'triplosensitivity_score': choice(Region.DOSAGE_SENSITIVITY_SCORES)[0], 'required_overlap_percentage': randint(0, 100), "gene": gene.pk, "source": Evidence.ALL_SOURCES[randint(0, 9)], "tags": [ TagFactory().pk, ], "publications": "{};{};{}".format(*fake.sentences(nb=3)), "phenotypes": "{};{};{}".format(*fake.sentences(nb=3)), "rating": Evaluation.RATINGS.AMBER, "comments": fake.sentence(), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "penetrance": Region.PENETRANCE.Incomplete, "current_diagnostic": "True", "type_of_variants": Region.VARIANT_TYPES.small, } res = self.client.post(url, region_data) new_current_number = gps.panel.active_panel.stats.get( 'number_of_regions') assert gps.panel.active_panel.version != gps.version assert res.status_code == 302 assert number_of_regions + 1 == new_current_number # make sure tags are added new_region = GenePanel.objects.get( pk=gps.panel.pk).active_panel.get_region(region_data['name']) assert sorted(list(new_region.tags.all().values_list( 'pk', flat=True))) == sorted(region_data['tags'])
def test_edit_gene_in_panel(self): gpes = GenePanelEntrySnapshotFactory() url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': gpes.panel.panel.pk, 'entity_type': 'gene', 'entity_name': gpes.gene.get('gene_symbol') }) number_of_genes = gpes.panel.stats.get('number_of_genes') # make sure new data has at least 1 of the same items source = gpes.evidence.last().name publication = gpes.publications[0] phenotype = gpes.publications[1] new_evidence = Evidence.ALL_SOURCES[randint(0, 9)] original_evidences = set([ev.name for ev in gpes.evidence.all()]) original_evidences.add(new_evidence) gene_data = { "gene": gpes.gene_core.pk, "gene_name": "Gene name", "source": set([source, new_evidence]), "tags": [ TagFactory().pk, ] + [tag.pk for tag in gpes.tags.all()], "publications": ";".join([publication, fake.sentence()]), "phenotypes": ";".join([phenotype, fake.sentence(), fake.sentence()]), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "mode_of_pathogenicity": [x for x in Evaluation.MODES_OF_PATHOGENICITY][randint(1, 2)][0], "penetrance": GenePanelEntrySnapshot.PENETRANCE.Incomplete, } res = self.client.post(url, gene_data) assert res.status_code == 302 gene = GenePanel.objects.get( pk=gpes.panel.panel.pk).active_panel.get_gene( gpes.gene_core.gene_symbol) assert gpes.panel.panel.active_panel.version != gpes.panel.version new_current_number = gpes.panel.panel.active_panel.stats.get( 'number_of_genes', 0) assert number_of_genes == new_current_number
def test_update_tags(self): gpes = GenePanelEntrySnapshotFactory() current_version = gpes.panel.version gpes.evaluation.all().delete() url = reverse_lazy('panels:update_entity_tags', kwargs={ 'pk': gpes.panel.panel.pk, 'entity_type': 'gene', 'entity_name': gpes.gene.get('gene_symbol') }) tag1 = TagFactory() tag2 = TagFactory() res = self.client.post(url, {'tags': [tag1.pk, tag2.pk]}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') gene = GenePanel.objects.get( pk=gpes.panel.panel.pk).active_panel.get_gene( gpes.gene.get('gene_symbol')) assert res.json().get('status') == 200 assert gene.tags.count() == 2 assert current_version == gpes.panel.panel.active_panel.version
def test_edit_gene_name_ajax(self): gpes = GenePanelEntrySnapshotFactory() url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': gpes.panel.panel.pk, 'entity_type': 'gene', 'entity_name': gpes.gene.get('gene_symbol') }) old_gene_symbol = gpes.gene.get('gene_symbol') # make sure new data has at least 1 of the same items source = gpes.evidence.last().name publication = gpes.publications[0] phenotype = gpes.publications[1] new_gene = GeneFactory() gene_data = { "gene": new_gene.pk, "gene_name": "Other name", "source": set([source, Evidence.ALL_SOURCES[randint(0, 9)]]), "tags": [ TagFactory().pk, ] + [tag.pk for tag in gpes.tags.all()], "publications": ";".join([publication, fake.sentence()]), "phenotypes": ";".join([phenotype, fake.sentence(), fake.sentence()]), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "mode_of_pathogenicity": [x for x in Evaluation.MODES_OF_PATHOGENICITY][randint(1, 2)][0], "penetrance": GenePanelEntrySnapshot.PENETRANCE.Incomplete, } res = self.client.post(url, gene_data) assert res.status_code == 302 new_gps = GenePanel.objects.get(pk=gpes.panel.panel.pk).active_panel old_gps = GenePanelSnapshot.objects.get(pk=gpes.panel.pk) # check panel has no previous gene assert new_gps.has_gene(old_gene_symbol) is False # test previous panel contains old gene assert old_gps.has_gene(old_gene_symbol) is True
def test_remove_gene_from_str(self): """We need ability to remove genes from STRs""" str_item = STRFactory() url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': str_item.panel.panel.pk, 'entity_type': 'str', 'entity_name': str_item.name }) number_of_strs = str_item.panel.stats.get('number_of_strs', 0) # make sure new data has at least 1 of the same items source = str_item.evidence.last().name publication = str_item.publications[0] phenotype = str_item.publications[1] new_evidence = Evidence.ALL_SOURCES[randint(0, 9)] original_evidences = set([ev.name for ev in str_item.evidence.all()]) original_evidences.add(new_evidence) str_data = { 'name': str_item.name, 'chromosome': '1', 'position_37_0': '12345', 'position_37_1': '12346', 'position_38_0': '12345', 'position_38_1': '123456', 'repeated_sequence': 'ATAT', 'normal_repeats': '2', 'pathogenic_repeats': '5', "gene_name": "Gene name", "source": set([source, new_evidence]), "tags": [TagFactory().pk, ] + [tag.pk for tag in str_item.tags.all()], "publications": ";".join([publication, fake.sentence()]), "phenotypes": ";".join([phenotype, fake.sentence(), fake.sentence()]), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "penetrance": GenePanelEntrySnapshot.PENETRANCE.Incomplete, } res = self.client.post(url, str_data) assert res.status_code == 302 new_str = GenePanel.objects.get(pk=str_item.panel.panel.pk).active_panel.get_str(str_item.name) assert not new_str.gene_core assert not new_str.gene assert str_item.panel.panel.active_panel.version != str_item.panel.version new_current_number = new_str.panel.panel.active_panel.stats.get('number_of_strs') assert number_of_strs == new_current_number
def test_type_of_variants_added(self): region = RegionFactory() gps = GenePanelSnapshotFactory() url = reverse_lazy('panels:add_entity', kwargs={ 'pk': gps.panel.pk, 'entity_type': 'region' }) source = region.evidence.last().name publication = region.publications[0] phenotype = region.publications[1] region_data = { 'name': region.name, 'chromosome': '1', 'position_37_0': '12345', 'position_37_1': '12346', 'position_38_0': '12345', 'position_38_1': '123456', 'haploinsufficiency_score': choice(Region.DOSAGE_SENSITIVITY_SCORES)[0], 'triplosensitivity_score': '', 'required_overlap_percentage': randint(0, 100), "gene": region.gene_core.pk, "gene_name": "Other name", "source": set([source, Evidence.ALL_SOURCES[randint(0, 9)]]), "tags": [ TagFactory().pk, ] + [tag.name for tag in region.tags.all()], "publications": ";".join([publication, fake.sentence()]), "phenotypes": ";".join([phenotype, fake.sentence(), fake.sentence()]), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "type_of_variants": Region.VARIANT_TYPES.small, "penetrance": Region.PENETRANCE.Incomplete, } res = self.client.post(url, region_data) self.assertEqual(res.status_code, 302) panel = gps.panel.active_panel assert panel.get_region( region.name).type_of_variants == region_data['type_of_variants']
def test_add_gene_to_panel(self): gene = GeneFactory() gps = GenePanelSnapshotFactory() number_of_genes = gps.stats.get('number_of_genes', 0) url = reverse_lazy('panels:add_entity', kwargs={ 'pk': gps.panel.pk, 'entity_type': 'gene' }) gene_data = { "gene": gene.pk, "source": Evidence.ALL_SOURCES[randint(0, 9)], "tags": [ TagFactory().pk, ], "publications": "{};{};{}".format(*fake.sentences(nb=3)), "phenotypes": "{};{};{}".format(*fake.sentences(nb=3)), "rating": Evaluation.RATINGS.AMBER, "comments": fake.sentence(), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "mode_of_pathogenicity": [x for x in Evaluation.MODES_OF_PATHOGENICITY][randint(1, 2)][0], "penetrance": GenePanelEntrySnapshot.PENETRANCE.Incomplete, "current_diagnostic": "True" } res = self.client.post(url, gene_data) new_current_number = gps.panel.active_panel.stats.get( 'number_of_genes', 0) assert gps.panel.active_panel.version != gps.version assert res.status_code == 302 assert number_of_genes + 1 == new_current_number
def test_edit_str_name_ajax(self): str_item = STRFactory() url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': str_item.panel.panel.pk, 'entity_type': 'str', 'entity_name': str_item.name }) old_str_name = str_item.name # make sure new data has at least 1 of the same items source = str_item.evidence.last().name publication = str_item.publications[0] phenotype = str_item.publications[1] gene_data = { 'name': 'NewSTR', 'chromosome': '1', 'position_37_0': '12345', 'position_37_1': '12346', 'position_38_0': '12345', 'position_38_1': '123456', 'repeated_sequence': 'ATAT', 'normal_repeats': '2', 'pathogenic_repeats': '5', "gene": str_item.gene_core.pk, "gene_name": "Other name", "source": set([source, Evidence.ALL_SOURCES[randint(0, 9)]]), "tags": [TagFactory().pk, ] + [tag.pk for tag in str_item.tags.all()], "publications": ";".join([publication, fake.sentence()]), "phenotypes": ";".join([phenotype, fake.sentence(), fake.sentence()]), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "penetrance": GenePanelEntrySnapshot.PENETRANCE.Incomplete, } res = self.client.post(url, gene_data) assert res.status_code == 302 new_gps = GenePanel.objects.get(pk=str_item.panel.panel.pk).active_panel old_gps = GenePanelSnapshot.objects.get(pk=str_item.panel.pk) # check panel has no previous gene assert new_gps.has_str(old_str_name) is False # test previous panel contains old gene assert old_gps.has_str(old_str_name) is True
def test_add_tag_via_edit_details(self): """Set tags via edit gene detail section""" gpes = GenePanelEntrySnapshotFactory( penetrance=GenePanelEntrySnapshot.PENETRANCE.Incomplete) url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': gpes.panel.panel.pk, 'entity_type': 'gene', 'entity_name': gpes.gene.get('gene_symbol') }) tag = TagFactory(name='some tag') gene_data = { "gene": gpes.gene_core.pk, "gene_name": "Gene name", "source": set([ev.name for ev in gpes.evidence.all()]), "tags": [tag.pk for tag in gpes.tags.all()] + [ tag.pk, ], "publications": ";".join([publication for publication in gpes.publications]), "phenotypes": ";".join([phenotype for phenotype in gpes.phenotypes]), "moi": gpes.moi, "mode_of_pathogenicity": gpes.mode_of_pathogenicity, "penetrance": GenePanelEntrySnapshot.PENETRANCE.Complete, } res = self.client.post(url, gene_data) assert res.status_code == 302 gene = GenePanel.objects.get( pk=gpes.panel.panel.pk).active_panel.get_gene( gpes.gene_core.gene_symbol) assert sorted(list(gene.tags.values_list('pk'))) != sorted( list(gpes.tags.values_list('pk')))
def test_edit_incorrect_repeated_sequence(self): str_item = STRFactory() url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': str_item.panel.panel.pk, 'entity_type': 'str', 'entity_name': str_item.name }) number_of_strs = str_item.panel.stats.get('number_of_strs') # make sure new data has at least 1 of the same items source = str_item.evidence.last().name publication = str_item.publications[0] phenotype = str_item.publications[1] new_evidence = Evidence.ALL_SOURCES[randint(0, 9)] original_evidences = set([ev.name for ev in str_item.evidence.all()]) original_evidences.add(new_evidence) str_data = { 'name': str_item.name, 'chromosome': '1', 'position_37_0': '12345', 'position_37_1': '12346', 'position_38_0': '12345', 'position_38_1': '123456', 'repeated_sequence': 'ATATBC', 'normal_repeats': '2', 'pathogenic_repeats': '5', "gene": str_item.gene_core.pk, "gene_name": "Gene name", "source": set([source, new_evidence]), "tags": [TagFactory().pk, ] + [tag.pk for tag in str_item.tags.all()], "publications": ";".join([publication, fake.sentence()]), "phenotypes": ";".join([phenotype, fake.sentence(), fake.sentence()]), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "penetrance": GenePanelEntrySnapshot.PENETRANCE.Incomplete, } res = self.client.post(url, str_data) assert res.status_code == 200 assert res.content.find(b'Repeated sequence contains incorrect nucleotides') != -1
def test_mitochondrial_gene(self): gene = GeneFactory(gene_symbol="MT-LORUM") gpes = GenePanelEntrySnapshotFactory(gene_core=gene) url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': gpes.panel.panel.pk, 'entity_type': 'gene', 'entity_name': gpes.gene.get('gene_symbol') }) # make sure new data has at least 1 of the same items gpes.publications[0] gpes.publications[1] gene_data = { "gene": gpes.gene_core.pk, "gene_name": "Gene name", "source": [ev.name for ev in gpes.evidence.all()], "tags": [ TagFactory().pk, ] + [tag.pk for tag in gpes.tags.all()], "publications": ";".join(gpes.publications), "phenotypes": ";".join(gpes.phenotypes), "moi": gpes.moi, "mode_of_pathogenicity": [x for x in Evaluation.MODES_OF_PATHOGENICITY][randint(1, 2)][0], "penetrance": GenePanelEntrySnapshot.PENETRANCE.Incomplete, } res = self.client.post(url, gene_data) assert res.status_code == 302 gene = GenePanel.objects.get( pk=gpes.panel.panel.pk).active_panel.get_gene( gpes.gene_core.gene_symbol) assert gene.moi == "MITOCHONDRIAL"
def test_add_str_to_panel(self): gene = GeneFactory() gps = GenePanelSnapshotFactory() number_of_strs = gps.stats.get('number_of_strs', 0) url = reverse_lazy('panels:add_entity', kwargs={'pk': gps.panel.pk, 'entity_type': 'str'}) gene_data = { 'name': 'SomeSTR', 'chromosome': '1', 'position_37_0': '', 'position_37_1': '', 'position_38_0': '12345', 'position_38_1': '123456', 'repeated_sequence': 'ATAT', 'normal_repeats': '2', 'pathogenic_repeats': '5', "gene": gene.pk, "source": Evidence.ALL_SOURCES[randint(0, 9)], "tags": [TagFactory().pk, ], "publications": "{};{};{}".format(*fake.sentences(nb=3)), "phenotypes": "{};{};{}".format(*fake.sentences(nb=3)), "rating": Evaluation.RATINGS.AMBER, "comments": fake.sentence(), "moi": [x for x in Evaluation.MODES_OF_INHERITANCE][randint(1, 12)][0], "penetrance": GenePanelEntrySnapshot.PENETRANCE.Incomplete, "current_diagnostic": "True" } res = self.client.post(url, gene_data) new_current_number = gps.panel.active_panel.stats.get('number_of_strs') assert gps.panel.active_panel.version != gps.version assert res.status_code == 302 assert number_of_strs + 1 == new_current_number # make sure tags are added new_str = GenePanel.objects.get(pk=gps.panel.pk).active_panel.get_str(gene_data['name']) assert sorted(list(new_str.tags.all().values_list('pk', flat=True))) == sorted(gene_data['tags'])
def test_remove_tag_via_edit_details(self): """Remove tags via edit gene detail section""" str_item = STRFactory( penetrance=GenePanelEntrySnapshot.PENETRANCE.Incomplete ) tag = TagFactory(name='some tag') str_item.tags.add(tag) url = reverse_lazy('panels:edit_entity', kwargs={ 'pk': str_item.panel.panel.pk, 'entity_type': 'str', 'entity_name': str_item.name }) str_data = { 'name': str_item.name, 'chromosome': '1', 'position_37_0': '12345', 'position_37_1': '12346', 'position_38_0': '12345', 'position_38_1': '123456', 'repeated_sequence': 'ATAT', 'normal_repeats': '2', 'pathogenic_repeats': '5', "gene": str_item.gene_core.pk, "gene_name": "Gene name", "source": set([ev.name for ev in str_item.evidence.all()]), "tags": [], "publications": ";".join([publication for publication in str_item.publications]), "phenotypes": ";".join([phenotype for phenotype in str_item.phenotypes]), "moi": str_item.moi, "penetrance": GenePanelEntrySnapshot.PENETRANCE.Complete, } res = self.client.post(url, str_data) assert res.status_code == 302 new_str = GenePanel.objects.get(pk=str_item.panel.panel.pk).active_panel.get_str(str_item.name) assert list(new_str.tags.all()) == []