Exemple #1
0
    def test_evaluation_stays(self):
        gps = GenePanelSnapshotFactory()
        gpes = GenePanelEntrySnapshotFactory(panel=gps)
        evaluations = gpes.evaluation.all()
        gpes2 = GenePanelEntrySnapshotFactory(panel=gps)
        evaluations2 = sorted(gpes2.evaluation.all().values_list('pk',
                                                                 flat=True))

        gps = gps.increment_version()
        gps.update_gene(self.gel_user, gpes.gene_core.gene_symbol,
                        {'phenotypes': [
                            'abra',
                        ]})
        del gps.panel.active_panel
        current_ev2 = sorted(
            gps.panel.active_panel.get_gene(
                gpes2.gene_core.gene_symbol).evaluation.all().values_list(
                    'pk', flat=True))

        self.assertNotEqual(evaluations2, current_ev2)
    def test_multiple_parent_panels(self):
        """
        Test updates to the test panels, and make sure parent panels are updated correctly
        """
        gene1 = GeneFactory()
        gene2 = GeneFactory()
        gene3 = GeneFactory()

        gene1_data = {
            "gene":
            gene1.pk,
            "sources": [
                Evidence.OTHER_SOURCES[0],
            ],
            "phenotypes":
            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,
            "current_diagnostic":
            False,
        }

        gene2_data = {
            "gene":
            gene2.pk,
            "sources": [
                Evidence.OTHER_SOURCES[2],
            ],
            "phenotypes":
            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,
            "current_diagnostic":
            False,
        }

        gene3_data = {
            "gene":
            gene3.pk,
            "sources": [
                Evidence.OTHER_SOURCES[3],
            ],
            "phenotypes":
            fake.sentences(nb=3),
            "rating":
            Evaluation.RATINGS.GREEN,
            "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,
        }

        child1 = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.public)
        child2 = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.public)
        child3 = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.public)

        parent = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.public)
        parent.child_panels.set([child1, child2])
        parent.update_saved_stats()
        self.assertEqual(parent.version, "0.0")

        parent2 = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.public)
        parent2.child_panels.set([child2, child3])
        parent2.update_saved_stats()
        self.assertEqual(parent2.version, "0.0")

        child1.add_gene(self.gel_user, gene1.gene_symbol, gene1_data)
        child1.add_gene(self.gel_user, gene2.gene_symbol, gene2_data)
        self.assertEqual(child1.version, "0.2")

        parent = parent.panel.active_panel
        self.assertEqual(parent.version, "0.2")

        parent2 = parent2.panel.active_panel
        self.assertEqual(parent2.version, "0.0")

        child2.add_gene(self.gel_user, gene2.gene_symbol, gene2_data)
        del child2.panel.active_panel
        child2 = child2.panel.active_panel
        self.assertEqual(child2.version, "0.1")

        del parent.panel.active_panel
        parent = parent.panel.active_panel
        self.assertEqual(parent.version, "0.3")

        del parent2.panel.active_panel
        parent2 = parent2.panel.active_panel
        self.assertEqual(parent2.version, "0.1")

        child3.add_gene(self.gel_user, gene3.gene_symbol, gene3_data)
        self.assertEqual(child3.version, "0.1")

        del parent.panel.active_panel
        parent = parent.panel.active_panel
        old_stats = parent.stats
        self.assertEqual(parent.version, "0.3")

        del parent2.panel.active_panel
        parent2 = parent2.panel.active_panel
        self.assertEqual(parent2.version, "0.2")

        child2.increment_version()
        child2.update_gene(
            self.gel_user, gene2.gene_symbol, {
                "gene":
                gene2,
                "sources": [
                    Evidence.OTHER_SOURCES[1],
                ],
                "phenotypes":
                fake.sentences(nb=2),
                "rating":
                Evaluation.RATINGS.GREEN,
                "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,
            }).update_rating(3, self.gel_user, '')
        child2.update_saved_stats()

        self.assertEqual(child1.version, "0.2")
        self.assertEqual(child2.version, "0.2")
        self.assertEqual(child3.version, "0.1")

        del parent.panel.active_panel
        parent = parent.panel.active_panel
        self.assertEqual(parent.version, "0.4")
        self.assertNotEqual(old_stats, parent.stats)

        del parent2.panel.active_panel
        parent2 = parent2.panel.active_panel
        self.assertEqual(parent2.version, "0.3")
    def test_increment_child_version(self):
        gene1 = GeneFactory()
        gene2 = GeneFactory()
        parent = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.public)

        gene1_data = {
            "gene":
            gene1.pk,
            "sources": [
                Evidence.OTHER_SOURCES[0],
            ],
            "phenotypes":
            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,
            "current_diagnostic":
            False,
        }

        gene2_data = {
            "gene":
            gene2.pk,
            "sources": [
                Evidence.OTHER_SOURCES[0],
            ],
            "phenotypes":
            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,
            "current_diagnostic":
            False,
        }

        child1 = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.public)
        initial_child1_pk = child1.pk
        child1.add_gene(self.gel_user, gene1.gene_symbol, gene1_data)
        child1 = child1.panel.active_panel
        child1.add_gene(self.gel_user, gene2.gene_symbol, gene2_data)
        child1 = child1.panel.active_panel
        self.assertNotEqual(initial_child1_pk, child1.pk)

        child2 = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.public)
        initial_child2_pk = child2.pk
        child2.add_gene(self.gel_user, gene1.gene_symbol, gene1_data)
        child2 = child2.panel.active_panel

        self.assertNotEqual(initial_child2_pk, child2.pk)

        parent.child_panels.set([child1, child2])
        parent.update_saved_stats()
        old_parent = parent

        child1.increment_version()
        child1 = child1.panel.active_panel
        child1.update_gene(
            self.gel_user, gene2.gene_symbol, {
                "gene":
                gene2,
                "sources": [
                    Evidence.OTHER_SOURCES[1],
                ],
                "phenotypes":
                fake.sentences(nb=3),
                "rating":
                Evaluation.RATINGS.GREEN,
                "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":
                False,
            })
        child1.get_gene(gene2.gene_symbol).update_rating(3, self.gel_user, '')
        child1 = child1.panel.active_panel
        parent = parent.panel.active_panel
        parent.update_saved_stats()

        self.assertNotEqual(parent, old_parent)
        self.assertNotEqual(old_parent.stats, parent.stats)
        self.assertIn(child1, parent.child_panels.all())
        self.assertIn(child2, parent.child_panels.all())
        self.assertEqual(child1.genepanelsnapshot_set.count(), 1)
        self.assertEqual(
            child2.genepanelsnapshot_set.count(),
            2)  # contains reference to two versions of parent panel
Exemple #4
0
class TestAPIV1(LoginExternalUser):
    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,
                              panel=self.gps)
        STRFactory(panel__panel__status=GenePanel.STATUS.public)
        self.region = RegionFactory(
            panel__panel__status=GenePanel.STATUS.public, panel=self.gps)
        RegionFactory(panel__panel__status=GenePanel.STATUS.public)

    def test_list_panels(self):
        r = self.client.get(reverse_lazy('api:v1:panels-list'))
        self.assertEqual(r.status_code, 200)

    def test_read_only_list_of_panels(self):
        r = self.client.post(reverse_lazy('api:v1:panels-list'),
                             {'something': 'something'})
        self.assertEqual(r.status_code, 405)

    def test_list_panels_name(self):
        url = reverse_lazy('api:v1:panels-list')
        r = self.client.get(url)
        self.assertEqual(len(r.json()['results']), 4)
        self.assertEqual(r.status_code, 200)

    def test_list_panels_filter_types(self):
        panel_type = PanelTypeFactory()
        self.gps.panel.types.add(panel_type)
        url = reverse_lazy('api:v1:panels-list') + '?type=' + panel_type.slug
        r = self.client.get(url)
        json_res = r.json()['results']
        self.assertEqual(json_res[0]['types'][0]['name'], panel_type.name)
        self.assertEqual(r.status_code, 200)

    def test_retired_panels(self):
        url = reverse_lazy('api:v1:panels-list')

        self.gps.panel.status = GenePanel.STATUS.deleted
        self.gps.panel.save()

        r = self.client.get(url)
        self.assertEqual(len(r.json()['results']), 3)
        self.assertEqual(r.status_code, 200)

        # Test deleted panels
        url = reverse_lazy('api:v1:panels-list')
        r = self.client.get("{}?retired=True".format(url))
        self.assertEqual(len(r.json()['results']),
                         4)  # one for gpes via factory, 2nd - retired
        self.assertEqual(r.status_code, 200)

        # Test for unapproved panels
        self.gps_public.panel.status = GenePanel.STATUS.internal
        self.gps_public.panel.save()

        url = reverse_lazy('api:v1:panels-list')
        r = self.client.get("{}?retired=True".format(url))
        self.assertEqual(len(r.json()['results']),
                         3)  # only retired panel will be visible
        self.assertEqual(r.status_code, 200)

    def test_internal_panel(self):
        self.gps.panel.status = GenePanel.STATUS.internal
        self.gps.panel.save()
        url = reverse_lazy('api:v1:panels-detail', args=(self.gps.panel.pk, ))
        r = self.client.get(url)
        self.assertEqual(r.status_code, 404)
        self.assertEqual(r.json(), {'detail': 'Not found.'})

        new_version = self.gps.increment_version()
        self.gps.panel.active_panel.increment_version()
        r = self.client.get("{}?version=0.1".format(url))
        self.assertEqual(r.status_code, 200)

    def test_get_panel_name(self):
        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.gpes.panel.panel.name, )))
        self.assertEqual(r.status_code, 200)

    def test_get_panel_name_deleted(self):
        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.gpes_deleted.panel.panel.name, )))
        self.assertEqual(r.status_code, 404)
        self.assertEqual(r.json(), {'detail': 'Not found.'})

    def test_get_panel_internal(self):
        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.gpes_internal.panel.panel.name, )))
        self.assertEqual(r.status_code, 404)
        self.assertEqual(r.json(), {'detail': 'Not found.'})

    def test_get_panel_retired(self):
        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.gpes_retired.panel.panel.name, )))
        self.assertEqual(r.status_code, 404)
        self.assertEqual(r.json(), {'detail': 'Not found.'})

    def test_get_panel_pk(self):
        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.gpes.panel.panel.pk, )))
        self.assertEqual(r.status_code, 200)

    def test_get_panel_version(self):
        self.gpes.panel.increment_version()
        self.gpes.panel.panel.active_panel.increment_version()

        url = reverse_lazy('api:v1:panels-detail',
                           args=(self.gpes.panel.panel.pk, ))
        r = self.client.get("{}?version=0.1".format(url))
        self.assertEqual(r.status_code, 200)

        self.gps.panel.status = GenePanel.STATUS.retired
        self.gps.panel.save()

        url = reverse_lazy('api:v1:panels-detail',
                           args=(self.gpes.panel.panel.pk, ))
        r = self.client.get("{}?version=0.1".format(url))
        self.assertEqual(r.status_code, 200)
        self.assertTrue(b'Query Error' not in r.content)

    def test_panel_created_timestamp(self):
        self.gpes.panel.increment_version()
        url = reverse_lazy('api:v1:panels-list')
        res = self.client.get(url)
        # find gps panel
        title = self.gps_public.level4title.name
        current_time = str(self.gps_public.created).replace('+00:00',
                                                            'Z').replace(
                                                                ' ', 'T')
        gps_panel = [r for r in res.json()['results'] if r['name'] == title][0]
        self.assertEqual(gps_panel['version_created'], current_time)

        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(gps_panel['id'], ))).json()
        self.assertEqual(r['version_created'], current_time)

    def test_get_search_gene(self):
        url = reverse_lazy('api:v1:genes-detail',
                           args=(self.gpes.gene_core.gene_symbol, ))
        r = self.client.get(url)
        self.assertEqual(r.status_code, 200)

    def test_search_by_gene(self):
        url = reverse_lazy('api:v1:genes-detail',
                           args=(self.gpes.gene_core.gene_symbol, ))
        r = self.client.get(url)
        self.assertEqual(r.status_code, 200)

        r = self.client.get("{}?panel_name={}".format(
            url, self.gps_public.level4title.name))
        self.assertEqual(r.status_code, 200)

        multi_genes_arg = "{},{}".format(self.genes[0].gene_core.gene_symbol,
                                         self.genes[1].gene_core.gene_symbol)
        multi_genes_url = reverse_lazy('api:v1:genes-detail',
                                       args=(multi_genes_arg, ))
        r = self.client.get(multi_genes_url)
        self.assertEqual(r.status_code, 200)

    def test_strs_in_panel(self):
        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.str.panel.panel.pk, )))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.json()['strs'][0]['entity_name'], self.str.name)
        self.assertEqual(
            r.json()['strs'][0]['grch37_coordinates'],
            [self.str.position_37.lower, self.str.position_37.upper])
        self.assertEqual(
            r.json()['strs'][0]['grch38_coordinates'],
            [self.str.position_38.lower, self.str.position_38.upper])
        self.assertEqual(r.json()['strs'][0]['pathogenic_repeats'],
                         self.str.pathogenic_repeats)

    def test_genes_in_panel(self):
        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.gpes.panel.panel.pk, )))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.json()['genes'][0]['entity_name'],
                         self.gpes.gene.get('gene_symbol'))
        self.assertEqual(r.json()['genes'][0]['mode_of_pathogenicity'],
                         self.gpes.mode_of_pathogenicity)

    def test_genes_in_panel_version(self):
        gene_symbol = self.gpes.gene.get('gene_symbol')
        self.gps_public.delete_gene(gene_symbol)
        self.gps_public = self.gps_public.panel.active_panel

        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.gpes.panel.panel.pk, )) + '?version=0.0')
        j = r.json()
        self.assertEqual(r.status_code, 200)
        gene_symbols_v0 = [g['entity_name'] for g in j['genes']]
        self.assertTrue(gene_symbols_v0, gene_symbol)

        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.gpes.panel.panel.pk, )) + '?version=0.1')
        j = r.json()
        self.assertEqual(r.status_code, 200)
        gene_symbols_v0 = [g['entity_name'] for g in j['genes']]
        self.assertFalse(gene_symbols_v0, gene_symbol)

    def test_green_genes_panel(self):
        # get all genes and their confidence levels counts
        r = self.client.get(
            reverse_lazy('api:v1:panels_genes-list',
                         args=(self.gps.panel_id, )) + '?confidence_level=3')
        j = r.json()
        green_db = [
            e for e in self.gps.get_all_genes if e.saved_gel_status >= 3
        ]
        green_api = [
            e for e in j['results'] if int(e.get('confidence_level')) >= 3
        ]
        self.assertEqual(len(green_db), len(green_api))

        r = self.client.get(
            reverse_lazy('api:v1:panels_genes-list',
                         args=(self.gps.panel_id, )) + '?confidence_level=2')
        j = r.json()
        amber_db = [
            e for e in self.gps.get_all_genes if e.saved_gel_status == 2
        ]
        amber_api = [
            e for e in j['results'] if int(e.get('confidence_level')) == 2
        ]
        self.assertEqual(len(amber_db), len(amber_api))

        r = self.client.get(
            reverse_lazy('api:v1:panels_genes-list',
                         args=(self.gps.panel_id, )) + '?confidence_level=1')
        j = r.json()
        red_db = [e for e in self.gps.get_all_genes if e.saved_gel_status == 1]
        red_api = [
            e for e in j['results'] if int(e.get('confidence_level')) == 1
        ]
        self.assertEqual(len(red_db), len(red_api))

    def test_genes_endpoint_in_panel_version(self):
        gene_symbol = self.gpes.gene.get('gene_symbol')
        self.gps_public.delete_gene(gene_symbol)
        self.gps_public = self.gps_public.panel.active_panel

        r = self.client.get(
            reverse_lazy('api:v1:panels_genes-list',
                         args=(self.gpes.panel.panel.pk, )) + '?version=0.0')
        j = r.json()
        self.assertEqual(r.status_code, 200)
        gene_symbols_v0 = [g['entity_name'] for g in j['results']]
        self.assertTrue(gene_symbols_v0, gene_symbol)

        r = self.client.get(
            reverse_lazy('api:v1:panels_genes-list',
                         args=(self.gpes.panel.panel.pk, )) + '?version=0.1')
        j = r.json()
        self.assertEqual(r.status_code, 200)
        gene_symbols_v0 = [g['entity_name'] for g in j['results']]
        self.assertFalse(gene_symbols_v0, gene_symbol)

    def test_genes_endpoint_entities_name(self):
        gene_symbol1 = self.genes[0].gene.get('gene_symbol')
        gene_symbol2 = self.genes[1].gene.get('gene_symbol')
        r = self.client.get(
            reverse_lazy('api:v1:panels_genes-list',
                         args=(self.gps.panel_id, )) +
            '?entity_name={},{}'.format(gene_symbol1, gene_symbol2))
        j = r.json()
        self.assertEqual(r.status_code, 200)
        gene_symbols = [g['entity_name'] for g in j['results']]
        self.assertTrue(len(j['results']), 2)
        self.assertTrue(gene_symbol1 in gene_symbols)
        self.assertTrue(gene_symbol2 in gene_symbols)

    def test_region_in_panel(self):
        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.region.panel.panel.pk, )))
        self.assertEqual(r.status_code, 200)
        region = r.json()['regions'][0]
        self.assertEqual(region['entity_name'], self.region.name)
        self.assertEqual(
            region['grch37_coordinates'],
            [self.region.position_37.lower, self.region.position_37.upper])
        self.assertEqual(
            region['grch38_coordinates'],
            [self.region.position_38.lower, self.region.position_38.upper])
        self.assertEqual(region['triplosensitivity_score'],
                         self.region.triplosensitivity_score)

    def test_super_panel(self):
        super_panel = GenePanelSnapshotFactory(
            panel__status=GenePanel.STATUS.public)
        super_panel.child_panels.set([
            self.gps_public,
        ])

        r_direct = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(self.gps_public.panel.pk, )))
        result_genes = list(
            sorted(r_direct.json()['genes'],
                   key=lambda x: x.get('gene_symbol')))

        r = self.client.get(
            reverse_lazy('api:v1:panels-detail',
                         args=(super_panel.panel.pk, )))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(
            result_genes,
            list(sorted(r.json()['genes'],
                        key=lambda x: x.get('gene_symbol'))))

    def test_evaluations(self):
        r = self.client.get(
            reverse_lazy('api:v1:genes-evaluations-list',
                         args=(self.gpes.panel.panel.pk,
                               self.gpes.gene_core.gene_symbol)))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 4)

    def test_region_evaluations(self):
        r = self.client.get(
            reverse_lazy('api:v1:regions-evaluations-list',
                         args=(self.region.panel.panel.pk, self.region.name)))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 4)

    def test_genes_list(self):
        r = self.client.get(reverse_lazy('api:v1:genes-list'))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 5)

    def test_genes_list_filter_types(self):
        panel_type = PanelTypeFactory()
        self.gps.panel.types.add(panel_type)
        r = self.client.get(
            reverse_lazy('api:v1:genes-list') + '?type=' + panel_type.slug)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 4)

    def test_genes_list_filter_name(self):
        r = self.client.get(
            reverse_lazy('api:v1:genes-detail',
                         args=(self.gpes.gene_core.gene_symbol, )))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 1)

    def test_strs_list(self):
        r = self.client.get(reverse_lazy('api:v1:strs-list'))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 2)

    def test_strs_list_filter_types(self):
        panel_type = PanelTypeFactory()
        self.gps.panel.types.add(panel_type)
        r = self.client.get(
            reverse_lazy('api:v1:strs-list') + '?type=' + panel_type.slug)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 1)

    def test_regions_list(self):
        r = self.client.get(reverse_lazy('api:v1:regions-list'))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 2)

    def test_regions_list_filter_types(self):
        panel_type = PanelTypeFactory()
        self.gps.panel.types.add(panel_type)
        r = self.client.get(
            reverse_lazy('api:v1:regions-list') + '?type=' + panel_type.slug)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 1)

    def test_entities_list(self):
        r = self.client.get(reverse_lazy('api:v1:entities-list'))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 9)

    def test_read_only_list_of_entities(self):
        r = self.client.post(reverse_lazy('api:v1:entities-list'),
                             {'something': 'something'})
        self.assertEqual(r.status_code, 405)

    def test_entities_list_filter_name(self):
        r = self.client.get(
            reverse_lazy('api:v1:entities-detail', args=(self.region.name, )))
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 1)

    def test_entities_list_filter_types(self):
        panel_type = PanelTypeFactory()
        self.gps.panel.types.add(panel_type)
        url = reverse_lazy('api:v1:entities-list') + '?type=' + panel_type.slug
        r = self.client.get(url)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(len(r.json()['results']), 6)