示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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
示例#7
0
    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
示例#8
0
    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)
示例#9
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)
示例#10
0
 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)
示例#11
0
    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)
示例#12
0
    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)
示例#13
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')
示例#14
0
 def test_list_genes(self):
     GenePanelEntrySnapshotFactory.create_batch(3)
     r = self.client.get(reverse_lazy('panels:entities_list'))
     self.assertEqual(r.status_code, 200)
示例#15
0
    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)
示例#16
0
 def test_panel_index(self):
     GenePanelEntrySnapshotFactory.create_batch(4)
     r = self.client.get(reverse_lazy('panels:index'))
     self.assertEqual(r.status_code, 200)
示例#17
0
    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'])
示例#18
0
 def test_activities(self):
     GenePanelEntrySnapshotFactory.create_batch(4)
     res = self.client.get(reverse_lazy('panels:activity'))
     self.assertEqual(res.status_code, 200)
示例#19
0
    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)