def test_import_panel_sources(self): gene = GeneFactory(gene_symbol="ABCC5-AS1") A1CF = GeneFactory(gene_symbol="A1CF") GeneFactory(gene_symbol="STR_1") gps = GenePanelSnapshotFactory() gps.panel.name = "Panel One" gps.level4title.name = gps.panel.name gps.level4title.save() gps.panel.save() evidence = EvidenceFactory.create(name="Expert Review Amber") GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps, evaluation=(None, ), evidence=(evidence, )) self.assertEqual( gps.get_gene(gene.gene_symbol).evidence.first().name, "Expert Review Amber") file_path = os.path.join(os.path.dirname(__file__), 'import_panel_data.tsv') test_panel_file = os.path.abspath(file_path) with open(test_panel_file) as f: url = reverse_lazy('panels:upload_panels') self.client.post(url, {'panel_list': f}) ap = GenePanel.objects.get(name="Panel One").active_panel self.assertEqual( ap.get_gene(gene.gene_symbol).evidence.first().name, "Expert Review Green") self.assertEqual(ap.get_gene(gene.gene_symbol).evidence.count(), 1) self.assertEqual(sorted(ap.get_gene('A1CF').phenotypes), sorted(['57h', 'wef']))
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 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_download_panel(self): gene, gps, gps2 = self.prepare_compare() grey_gene = 'gene2' gene2 = GeneFactory(gene_symbol=grey_gene) gpes = GenePanelEntrySnapshotFactory.create(gene_core=gene2, panel=gps) gpes.saved_gel_status = 0 res = self.client.get( reverse_lazy('panels:download_panel_tsv', args=(gps.panel.pk, '01234'))) self.assertEqual(res.status_code, 200) self.assertEqual(res.content.find(grey_gene.encode()), -1)
def test_import_reviews(self): gene = GeneFactory(gene_symbol="ABCC5-AS1") gps = GenePanelSnapshotFactory() current_version = gps.version gps.panel.name = "Panel One" gps.panel.save() GenePanelEntrySnapshotFactory.create(gene_core=gene, panel=gps, evaluation=(None, )) file_path = os.path.join(os.path.dirname(__file__), 'import_reviews_data.tsv') test_reviews_file = os.path.abspath(file_path) with open(test_reviews_file) as f: url = reverse_lazy('panels:upload_reviews') self.client.post(url, {'review_list': f}) ap = GenePanel.objects.get(name="Panel One").active_panel assert ap.get_gene(gene.gene_symbol).evaluation.count() == 1 assert current_version != ap.version
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 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_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)