Browse Source

HUE-9497 [query browser] Facets selection and improving unittest

ayush.goyal 5 years ago
parent
commit
ada905ecc0

+ 7 - 1
apps/jobbrowser/src/jobbrowser/apis/hive_query_api.py

@@ -140,12 +140,18 @@ class HiveQueryApi(Api):
 
 class HiveQueryClient():
 
+  def _get_all_queries(self):
+    return HiveQuery.objects.using('query').order_by('-start_time')
+
   def _get_queries(self, filters):
-    queries = HiveQuery.objects.using('query').order_by('-id')
+    queries = self._get_all_queries()
     queries = queries.filter(start_time__gte=filters['startTime'], end_time__lte=filters['endTime'])
     if filters['text']:
       queries = queries.filter(query__icontains=filters['text'])
 
+    for facet in filters['facets']:
+      queries = queries.filter(**{facet['field']+'__in': facet['values']})
+
     return queries
 
   def get_query_count(self, filters):

+ 33 - 49
apps/jobbrowser/src/jobbrowser/apis/hive_query_api_tests.py

@@ -51,6 +51,15 @@ class TestHiveQueryApi():
 
     self.client = make_logged_in_client(username="test", groupname="default", recreate=True, is_superuser=False)
     self.user = rewrite_user(User.objects.get(username="test"))
+    self.filters = {
+      "endTime": 10,
+      "facets": [{"field": "status", "values": ["SUCCESS"]}],
+      "limit": 2,
+      "offset": 0,
+      "sortText": "",
+      "startTime": 1,
+      "text": "select"
+    }
 
     with connection.schema_editor() as schema_editor:
       schema_editor.create_model(HiveQuery)
@@ -64,51 +73,27 @@ class TestHiveQueryApi():
 
 
   def test_search_pagination(self):
-    with patch('jobbrowser.apis.hive_query_api.HiveQueryClient._get_queries') as _get_queries:
-      with patch('jobbrowser.apis.hive_query_api.HiveQueryClient.get_query_count') as get_query_count:
-        query1 = HiveQuery()
-        query1.query_id = 10
-        query1.start_time = 5
-        query1.query = "select * from employee"
-        query1.end_time = 8
-        query1.elapsed_time = 28
-        query1.status = "SUCCESS"
-        query1.user_id = "hive"
-        query1.request_user = "hive"
-
-        query2 = HiveQuery()
-        query2.query_id = 12
-        query2.start_time = 4
-        query2.query = "select * from employee1"
-        query2.end_time = 6
-        query2.elapsed_time = 28
-        query2.status = "SUCCESS"
-        query2.user_id = "hive"
-        query2.request_user = "hive"
-
-        query3 = HiveQuery()
-        query3.query_id = 14
-        query3.start_time = 6
-        query3.query = "select * from employee2"
-        query3.end_time = 7
-        query3.elapsed_time = 28
-        query3.status = "FAIL"
-        query3.user_id = "hive"
-        query3.request_user = "hive"
-
-        get_query_count.return_value = 3
-        _get_queries.return_value = [query1, query2, query3]
-        filters = {"endTime": 10, "facets": [], "limit": 2, "offset": 0, "sortText": "", "startTime": 1, "text": "", "type": "basic"}
-        _data = json.dumps(filters)
-        response = self.client.post("/jobbrowser/api/jobs/queries-hive", content_type='applecation/json', data=_data)
-        data = json.loads(response.content)
-        paginated_query_list = HiveQueryClient().get_queries(filters)
-
-        assert_equal(2, len(paginated_query_list))
-        assert_equal(10, data['queries'][0]['queryId'])
-        assert_equal("SUCCESS", data['queries'][1]['status'])
-        assert_equal(3, data['meta']['size'])
-        assert_equal(2, data['meta']['limit'])
+    with patch('jobbrowser.apis.hive_query_api.HiveQueryClient._get_all_queries') as _get_all_queries:
+
+      HiveQuery.objects.create(query_id='1', start_time=6, end_time=8, query="select * from employee1", status="SUCCESS")
+      HiveQuery.objects.create(query_id='2', start_time=4, end_time=8, query="select * from employee2", status="ERROR")
+      HiveQuery.objects.create(query_id='3', start_time=7, end_time=9, query="select * from employee3)", status="SUCCESS")
+      HiveQuery.objects.create(query_id='4', start_time=2, end_time=9, query="select * from employee4", status="SUCCESS")
+      HiveQuery.objects.create(query_id='5', start_time=8, end_time=9, query="create table xyz2()", status="SUCCESS")
+      HiveQuery.objects.create(query_id='6', start_time=1, end_time=12, query="create table xyz3()", status="SUCCESS")
+
+      _get_all_queries.return_value = HiveQuery.objects.order_by('-start_time')
+
+      _data = json.dumps(self.filters)
+      response = self.client.post("/jobbrowser/api/jobs/queries-hive", content_type='application/json', data=_data)
+      data = json.loads(response.content)
+
+      assert_equal(2, len(data['queries'])) # pagination
+      assert_equal('3', data['queries'][0]['queryId']) # query id (with order_by)
+      assert_equal("SUCCESS", data['queries'][0]['status']) # facet selection
+      assert_true("select" in data['queries'][0]['query']) # search text
+      assert_equal(3, data['meta']['size']) # total filtered queries count
+      assert_equal(2, data['meta']['limit']) # limit value of filter
 
 
   # TODO
@@ -141,8 +126,7 @@ class TestHiveQueryClient():
       'offset': 0,
       'sortText': "startTime:DESC",
       'startTime': 1601541314116,
-      'text': "select",
-      'type': "basic",
+      'text': "select"
     }
     self.query1 = HiveQuery()
     self.query2 = HiveQuery()
@@ -159,8 +143,8 @@ class TestHiveQueryClient():
       schema_editor.delete_model(HiveQuery)
 
 
-  def test__get_queries(self):
-    HiveQueryClient()._get_queries(self.filters)
+  def test__get_all_queries(self):
+    HiveQueryClient()._get_all_queries()
 
 
   def test_get_query_count(self):