From e6b74ca2c4fdac608971229faee027ca6d0d6153 Mon Sep 17 00:00:00 2001
From: Kenzo-Hugo Hillion <kenzo-hugo.hillion1@pasteur.fr>
Date: Wed, 27 Nov 2019 17:12:54 +0100
Subject: [PATCH] add test for gene_length API

---
 .../metagenedb/api/catalog/views/test_gene.py | 35 +++++++++++++++++--
 .../metagenedb/apps/catalog/factory/gene.py   |  1 +
 .../common/utils/mocks/metagenedb.py          |  7 ++++
 3 files changed, 41 insertions(+), 2 deletions(-)

diff --git a/backend/metagenedb/api/catalog/views/test_gene.py b/backend/metagenedb/api/catalog/views/test_gene.py
index 0ce7847..8811ae3 100644
--- a/backend/metagenedb/api/catalog/views/test_gene.py
+++ b/backend/metagenedb/api/catalog/views/test_gene.py
@@ -1,12 +1,14 @@
+import pandas as pd
 from django.contrib.auth.models import User
 from django.test import TestCase
 from django.urls import reverse
-
-import pandas as pd
 from rest_framework import status
+from rest_framework.test import APITestCase
 from rest_framework_jwt.settings import api_settings
 
 from metagenedb.api.catalog.views.gene import GeneViewSet
+from metagenedb.apps.catalog.factory import GeneFactory
+from metagenedb.common.utils.mocks.metagenedb import MetageneDBCatalogGeneAPIMock
 
 
 class TestGenes(TestCase):
@@ -66,3 +68,32 @@ class TestCountWindows(TestCase):
         test_dict = geneviewset._count_windows(self.df, window_size=10,
                                                window_col=self.window_col, stop_at=20)
         self.assertDictEqual(test_dict, expected_dict)
+
+
+class TestCountWindowsAPI(APITestCase):
+
+    def setUp(self):
+        self.gene_api = MetageneDBCatalogGeneAPIMock(self.client)
+        for i in range(2000, 4000, 350):
+            GeneFactory.create(length=i)
+
+    def test_gene_length_api(self):
+        expected_dict = {
+            'results': {
+                'counts': [0, 0, 3, 3],
+                'labels': ['<1.0k', '1.0k-2.0k', '2.0k-3.0k', '>3.0k']
+            }
+        }
+        self.assertDictEqual(self.gene_api.get_gene_length(), expected_dict)
+
+    def test_gene_length_api_stop_at_2000(self):
+        expected_dict = {
+            'results': {
+                'counts': [0, 0, 6],
+                'labels': ['<1.0k', '1.0k-2.0k', '>2.0k']
+            }
+        }
+        query_params = {
+            'stop_at': 2000
+        }
+        self.assertDictEqual(self.gene_api.get_gene_length(params=query_params), expected_dict)
diff --git a/backend/metagenedb/apps/catalog/factory/gene.py b/backend/metagenedb/apps/catalog/factory/gene.py
index a29519b..ec337ea 100644
--- a/backend/metagenedb/apps/catalog/factory/gene.py
+++ b/backend/metagenedb/apps/catalog/factory/gene.py
@@ -15,4 +15,5 @@ class GeneFactory(DjangoModelFactory):
         model = models.Gene
 
     gene_id = FuzzyLowerText(prefix='gene-', length=15)
+    gene_name = fuzzy.FuzzyText(prefix='name-', length=15)
     length = fuzzy.FuzzyInteger(200, 10000)
diff --git a/backend/metagenedb/common/utils/mocks/metagenedb.py b/backend/metagenedb/common/utils/mocks/metagenedb.py
index fe7ec56..f9688ec 100644
--- a/backend/metagenedb/common/utils/mocks/metagenedb.py
+++ b/backend/metagenedb/common/utils/mocks/metagenedb.py
@@ -47,6 +47,13 @@ class MetageneDBCatalogGeneAPIMock(MetageneDBAPIMock):
     KEY_ID = 'gene_id'
     REVERSE_PATH = 'catalog:v1:genes'
 
+    def get_gene_length(self, params=None):
+        reverse_path = f"{self.reverse_path}-gene-length"
+        response = self.client.get(reverse(reverse_path), params)
+        if response.status_code in self.BAD_REQUESTS:
+            raise HTTPError
+        return response.json()
+
 
 class MetageneDBCatalogTaxonomyAPIMock(MetageneDBAPIMock):
     KEY_ID = 'gene_id'
-- 
GitLab