def test_adding_gene_create_activity(self): gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(4, panel=gps) gene = GeneFactory() url = reverse_lazy('panels:add_entity', kwargs={ 'pk': gps.panel.pk, 'entity_type': 'gene' }) gene_data = { "gene": gene.pk, "source": Evidence.OTHER_SOURCES[0], "phenotypes": "{};{};{}".format(*fake.sentences(nb=3)), "rating": Evaluation.RATINGS.AMBER, "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, } req = self.client.post(url, gene_data) self.assertEqual(Activity.objects.count(), 1)
def test_export_activities_functionality(self): gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(4, panel=gps) gene = GeneFactory() url = reverse_lazy('panels:add_entity', kwargs={ 'pk': gps.panel.pk, 'entity_type': 'gene' }) gene_data = { "gene": gene.pk, "source": Evidence.OTHER_SOURCES[0], "phenotypes": "{};{};{}".format(*fake.sentences(nb=3)), "rating": Evaluation.RATINGS.AMBER, "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, } self.client.post(url, gene_data) activities_url = reverse( 'panels:activity') + '?format=csv&panel=' + str(gps.panel.pk) res = self.client.get(activities_url) self.assertTrue(gps.panel.name.encode() in res.content)
def test_adding_gene_save_source(self): gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(4, panel=gps) gene = GeneFactory() url = reverse_lazy('panels:add_entity', kwargs={ 'pk': gps.panel.pk, 'entity_type': 'gene' }) gene_data = { "gene": gene.pk, "source": Evidence.OTHER_SOURCES[0], "phenotypes": "{};{};{}".format(*fake.sentences(nb=3)), "rating": Evaluation.RATINGS.AMBER, "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, } self.client.post(url, gene_data) gpes = gps.panel.active_panel.get_gene(gene.gene_symbol) self.assertTrue(gene_data['source'] in gpes.evaluation.get( user=self.verified_user).comments.first().comment)
def test_mark_all_genes_not_ready(self): gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(5, ready=True, panel=gps) assert GenePanelEntrySnapshot.objects.filter(ready=True).count() == 5 url = reverse_lazy('panels:mark_not_ready', kwargs={'pk': gps.panel.pk}) res = self.client.get(url) assert GenePanelEntrySnapshot.objects.filter(ready=True).count() == 0 assert res.status_code == 302
def test_get_panels_for_a_gene(self): gene = GeneFactory() gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(2, panel=gps) # random genes GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps) gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(2, panel=gps) # random genes GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps) gps3 = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(2, panel=gps3) # random genes GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps3) gps4 = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(2, panel=gps4) # random genes assert GenePanelEntrySnapshot.objects.get_gene_panels( gene.gene_symbol).count() == 3 url = reverse_lazy('panels:entity_detail', kwargs={'slug': gene.gene_symbol}) res = self.client.get(url) assert len(res.context_data['entries']) == 3
def prepare_compare(self): gene = GeneFactory() gps = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.internal) GenePanelEntrySnapshotFactory.create_batch(2, panel=gps) # random genes GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps) gps2 = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public) GenePanelEntrySnapshotFactory.create_batch(2, panel=gps2) # random genes GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps2) STRFactory(panel=gps, position_37=None) return gene, gps, gps2
def test_delete_gene(self): gps = GenePanelSnapshotFactory() genes = GenePanelEntrySnapshotFactory.create_batch(5, panel=gps) gene_symbol = genes[2].gene['gene_symbol'] number_of_genes = gps.stats.get('number_of_genes') assert gps.has_gene(gene_symbol) is True gps = gps.panel.active_panel gps.delete_gene(gene_symbol) gps = gps.panel.active_panel assert gps.panel.active_panel.has_gene(gene_symbol) is False assert number_of_genes - 1 == gps.panel.active_panel.stats.get( 'number_of_genes') # 4 is due to create_batch old_gps = GenePanel.objects.get( pk=gps.panel.pk).genepanelsnapshot_set.last() assert old_gps.version != gps.version assert old_gps.has_gene(gene_symbol) is True new_gps = GenePanel.objects.get(pk=gps.panel.pk).active_panel assert new_gps.has_gene(gene_symbol) is False gene_symbol = genes[3].gene['gene_symbol'] assert new_gps.has_gene(gene_symbol) is True new_gps.delete_gene(gene_symbol, False) assert new_gps.has_gene(gene_symbol) is False new_gps = GenePanel.objects.get(pk=gps.panel.pk).active_panel assert new_gps.has_gene(gene_symbol) is False
def test_filter_by_panel_date_range(self): gps = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public) GenePanelEntrySnapshotFactory.create_batch(4, panel=gps) gene = GeneFactory() url = reverse_lazy('panels:add_entity', kwargs={ 'pk': gps.panel.pk, 'entity_type': 'gene' }) gene_data = { "gene": gene.pk, "source": Evidence.OTHER_SOURCES[0], "phenotypes": "{};{};{}".format(*fake.sentences(nb=3)), "rating": Evaluation.RATINGS.AMBER, "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, } self.client.post(url, gene_data) now = timezone.now() date_from = (now - timedelta(days=7)).strftime('%Y-%m-%d') date_to = (now + timedelta(days=7)).strftime('%Y-%m-%d') activities_url = reverse( 'panels:activity' ) + '?date_from=' + date_from + '&date_to=' + date_to res = self.client.get(activities_url) self.assertEqual(len(res.context['activities']), 1) now = timezone.now() - timedelta(days=30) date_from = (now - timedelta(days=7)).strftime('%Y-%m-%d') date_to = (now + timedelta(days=7)).strftime('%Y-%m-%d') activities_url = reverse( 'panels:activity' ) + '?date_from=' + date_from + '&date_to=' + date_to res = self.client.get(activities_url) self.assertEqual(len(res.context['activities']), 0)
def test_user_reviews(self): gps = GenePanelSnapshotFactory() gpes = GenePanelEntrySnapshotFactory.create_batch(10, panel=gps) for g in gpes: for evaluation in g.evaluation.all(): evaluation.user = self.verified_user evaluation.save() self.assertEqual(self.verified_user.get_recent_evaluations().count(), 35)
def setUp(self): super().setUp() self.gps = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public) self.gps_public = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public) self.gpes = GenePanelEntrySnapshotFactory(panel=self.gps_public) self.gpes_internal = GenePanelEntrySnapshotFactory(panel__panel__status=GenePanel.STATUS.internal) self.gpes_retired = GenePanelEntrySnapshotFactory(panel__panel__status=GenePanel.STATUS.retired) self.gpes_deleted = GenePanelEntrySnapshotFactory(panel__panel__status=GenePanel.STATUS.deleted) self.genes = GenePanelEntrySnapshotFactory.create_batch(4, panel=self.gps) self.str = STRFactory(panel__panel__status=GenePanel.STATUS.public) self.region = RegionFactory(panel__panel__status=GenePanel.STATUS.public) self.region2 = RegionFactory(panel__panel__status=GenePanel.STATUS.public, position_37=None)
def test_get_internal_panels_for_a_gene(self): gene = GeneFactory() gps = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public) GenePanelEntrySnapshotFactory.create_batch(2, panel=gps) # random genes GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps) gps2 = GenePanelSnapshotFactory( panel__status=GenePanel.STATUS.internal) GenePanelEntrySnapshotFactory.create_batch(2, panel=gps2) # random genes GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps2) gps3 = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public) GenePanelEntrySnapshotFactory.create_batch(2, panel=gps3) # random genes self.assertEqual( GenePanelEntrySnapshot.objects.get_gene_panels( gene.gene_symbol).count(), 2) self.assertEqual( GenePanelSnapshot.objects.get_gene_panels( gene.gene_symbol).count(), 1) self.assertEqual( GenePanelSnapshot.objects.get_gene_panels(gene.gene_symbol, all=True, internal=True).count(), 2) url = reverse_lazy('panels:entity_detail', kwargs={'slug': gene.gene_symbol}) res = self.client.get(url) self.assertEqual(len(res.context_data['entries']), 2)
def test_filter_by_panel_entity(self): gps = GenePanelSnapshotFactory(panel__status=GenePanel.STATUS.public) GenePanelEntrySnapshotFactory.create_batch(4, panel=gps) gene = GeneFactory() url = reverse_lazy('panels:add_entity', kwargs={ 'pk': gps.panel.pk, 'entity_type': 'gene' }) gene_data = { "gene": gene.pk, "source": Evidence.OTHER_SOURCES[0], "phenotypes": "{};{};{}".format(*fake.sentences(nb=3)), "rating": Evaluation.RATINGS.AMBER, "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, } self.client.post(url, gene_data) activities_url = reverse( 'panels:activity' ) + '?entity=' + gene.gene_symbol + '&version=0.0&panel=' + str( gps.panel.pk) res = self.client.get(activities_url) self.assertEqual(len(res.context['activities']), 1) activities_url = reverse( 'panels:activity') + '?entity=ABCD&version=0.0&panel=' + str( gps.panel.pk) res = self.client.get(activities_url) self.assertEqual(len(res.context['activities']), 0)
def test_delete_gene_ajax(self): gps = GenePanelSnapshotFactory() genes = GenePanelEntrySnapshotFactory.create_batch(5, panel=gps) gene_symbol = genes[2].gene['gene_symbol'] number_of_genes = gps.stats.get('number_of_genes') url = reverse_lazy('panels:delete_entity', kwargs={ 'pk': gps.panel.pk, 'entity_type': 'gene', 'entity_name': gene_symbol }) res = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest') new_gps = GenePanel.objects.get(pk=gps.panel.pk).active_panel assert new_gps.has_gene(gene_symbol) is False assert number_of_genes - 1 == new_gps.stats.get( 'number_of_genes') # 4 is due to create_batch assert res.json().get('status') == 200 assert res.json().get('content').get('inner-fragments')
def test_list_genes(self): GenePanelEntrySnapshotFactory.create_batch(3) r = self.client.get(reverse_lazy('panels:entities_list')) self.assertEqual(r.status_code, 200)
def test_download_genes(self): gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(2, panel=gps) res = self.client.get(reverse_lazy('panels:download_genes')) self.assertEqual(res.status_code, 200)
def test_panel_index(self): GenePanelEntrySnapshotFactory.create_batch(4) r = self.client.get(reverse_lazy('panels:index')) self.assertEqual(r.status_code, 200)
def test_update_gene_collection(self): gene_to_update = GeneFactory() gene_to_delete = GeneFactory() gene_to_update_symbol = GeneFactory() gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(2, panel=gps) # random genes GenePanelEntrySnapshotFactory.create(gene_core=gene_to_update, panel=gps) STRFactory.create_batch(2, panel=gps) # random STRs STRFactory.create(gene_core=gene_to_update, panel=gps) RegionFactory.create_batch(2, panel=gps) # random STRs RegionFactory.create(gene_core=gene_to_update, panel=gps) gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(2, panel=gps) # random genes STRFactory.create_batch(2, panel=gps) # random STRs GenePanelEntrySnapshotFactory.create(gene_core=gene_to_update_symbol, panel=gps) STRFactory.create(gene_core=gene_to_update_symbol, panel=gps) RegionFactory.create_batch(2, panel=gps) # random STRs RegionFactory.create(gene_core=gene_to_update_symbol, panel=gps) to_insert = [ Gene(gene_symbol='A', ensembl_genes={ 'inserted': True }).dict_tr(), Gene(gene_symbol='B', ensembl_genes={ 'inserted': True }).dict_tr(), ] to_update = [ Gene(gene_symbol=gene_to_update.gene_symbol, ensembl_genes={ 'updated': True }).dict_tr() ] to_update_symbol = [(Gene(gene_symbol='C', ensembl_genes={ 'updated': True }).dict_tr(), gene_to_update_symbol.gene_symbol)] to_delete = [gene_to_delete.gene_symbol] migration = { 'insert': to_insert, 'update': to_update, 'delete': to_delete, 'update_symbol': to_update_symbol } update_gene_collection(migration) self.assertTrue(GenePanelEntrySnapshot.objects.get_active().get( gene_core__gene_symbol=gene_to_update.gene_symbol).gene.get( 'ensembl_genes')['updated']) self.assertTrue(STR.objects.get_active().get( gene_core__gene_symbol=gene_to_update.gene_symbol).gene.get( 'ensembl_genes')['updated']) self.assertTrue(Region.objects.get_active().get( gene_core__gene_symbol=gene_to_update.gene_symbol).gene.get( 'ensembl_genes')['updated']) updated_not_updated = [ gpes.gene['ensembl_genes'] for gpes in GenePanelEntrySnapshot.objects.filter( gene_core__gene_symbol=gene_to_update.gene_symbol) ] self.assertNotEqual(updated_not_updated[0], updated_not_updated[1]) updated_not_updated = [ str_item.gene['ensembl_genes'] for str_item in STR.objects.filter( gene_core__gene_symbol=gene_to_update.gene_symbol) ] self.assertNotEqual(updated_not_updated[0], updated_not_updated[1]) updated_not_updated = [ region_item.gene['ensembl_genes'] for region_item in Region.objects.filter( gene_core__gene_symbol=gene_to_update.gene_symbol) ] self.assertNotEqual(updated_not_updated[0], updated_not_updated[1]) self.assertFalse( GenePanelEntrySnapshot.objects.get( gene_core__gene_symbol=gene_to_update_symbol.gene_symbol). gene_core.active) self.assertFalse( STR.objects.get(gene_core__gene_symbol=gene_to_update_symbol. gene_symbol).gene_core.active) self.assertFalse( Region.objects.get(gene_core__gene_symbol=gene_to_update_symbol. gene_symbol).gene_core.active) self.assertFalse( Gene.objects.get( gene_symbol=gene_to_update_symbol.gene_symbol).active) self.assertFalse( Gene.objects.get(gene_symbol=gene_to_delete.gene_symbol).active) self.assertTrue(Gene.objects.get(gene_symbol='A').active) self.assertTrue( GenePanelEntrySnapshot.objects.get(gene_core__gene_symbol='C'). gene.get('ensembl_genes')['updated']) self.assertTrue( STR.objects.get(gene_core__gene_symbol='C').gene.get( 'ensembl_genes')['updated']) self.assertTrue( Region.objects.get(gene_core__gene_symbol='C').gene.get( 'ensembl_genes')['updated'])
def test_activities(self): GenePanelEntrySnapshotFactory.create_batch(4) res = self.client.get(reverse_lazy('panels:activity')) self.assertEqual(res.status_code, 200)
def test_update_ensembl(self): gene_symbol = 'FAM58A' gene_to_update = GeneFactory(gene_symbol=gene_symbol) ensembl_data = { "GRch37": { "82": { "ensembl_id": "ENSG00000147382", "location": "X:152853377-152865500" } }, "GRch38": { "90": { "ensembl_id": "ENSG00000262919", "location": "X:153587919-153600045" } } } json_data = {gene_symbol: ensembl_data} gps = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(2, panel=gps) # random genes GenePanelEntrySnapshotFactory.create(gene_core=gene_to_update, panel=gps) STRFactory.create_batch(2, panel=gps) # random STRs STRFactory.create(gene_core=gene_to_update, panel=gps) RegionFactory.create_batch(2, panel=gps) # random STRs RegionFactory.create(gene_core=gene_to_update, panel=gps) gps_2 = GenePanelSnapshotFactory() GenePanelEntrySnapshotFactory.create_batch(2, panel=gps_2) # random genes STRFactory.create_batch(2, panel=gps_2) # random STRs RegionFactory.create_batch(2, panel=gps_2) # random STRs RegionFactory.create(gene_core=gene_to_update, panel=gps_2) # make sure ensembl data doesn't match for gene in GenePanelEntrySnapshot.objects.filter( gene__gene_symbol=gene_symbol): self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data) for str in STR.objects.filter(gene__gene_symbol=gene_symbol): self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data) for region in Region.objects.filter(gene__gene_symbol=gene_symbol): self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data) gps_pk = gps.pk gps_version = gps.version gps_2_version = gps_2.version process(json_data) # make sure previous data didn't change for gene in GenePanelEntrySnapshot.objects.filter( gene__gene_symbol=gene_symbol, panel_id=gps_pk): self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data) for str in STR.objects.filter(gene__gene_symbol=gene_symbol, panel_id=gps_pk): self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data) for region in Region.objects.filter(gene__gene_symbol=gene_symbol, panel_id=gps_pk): self.assertNotEqual(gene.gene.get('ensembl_genes'), ensembl_data) gps = gps.panel.active_panel gps_2 = gps_2.panel.active_panel self.assertNotEqual(gps_version, gps.version) self.assertNotEqual(gps_2_version, gps_2.version) # make sure new data has changed for gene in GenePanelEntrySnapshot.objects.filter( gene__gene_symbol=gene_symbol, panel=gps): self.assertEqual(gene.gene.get('ensembl_genes'), ensembl_data) for str in STR.objects.filter(gene__gene_symbol=gene_symbol, panel=gps): self.assertEqual(gene.gene.get('ensembl_genes'), ensembl_data) for region in Region.objects.filter(gene__gene_symbol=gene_symbol, panel=gps): self.assertEqual(gene.gene.get('ensembl_genes'), ensembl_data)