import json import unittest from unittest.mock import patch from app import app from config import config from utils.testcase import create_data_summary, base_url, headers class Chat2QueryTests(unittest.TestCase): def setUp(self) -> None: return super().setUp() def tearDown(self) -> None: return super().tearDown() @patch("handlers.edatask.enqueue") def test_create_data_summary_with_valid_payload(self, mocked_enqueue): mocked_enqueue.return_value = "job_id" response = create_data_summary() assert response.status_code == 200, response.text assert mocked_enqueue.called @patch("handlers.edatask.enqueue") def test_create_data_summary_with_invalid_database_uri(self, mocked_enqueue): with app.test_client() as test_client: url = f"{base_url}/dataSummaries" dbname = "car_1" database_uri = f"sqlite:///spider/{dbname}/{dbname}.sqlite?mode=ro" payload = { "database_uri": database_uri, "creator": "me", } response = test_client.post(url, data=json.dumps(payload), content_type='application/json', headers=headers) assert response.status_code == 400, response.text @patch("handlers.edatask.enqueue") @patch("handlers.edatask.get_default_queue_length") def test_create_data_summary_with_queue_overflow(self, mocked_get_default_queue_length, mocked_enqueue): mocked_get_default_queue_length.return_value = config.QUEUE_MAX_LENGTH * 2 response = create_data_summary() assert response.status_code == 429, response.text assert not mocked_enqueue.called @patch("handlers.edatask.enqueue") def test_chat2data(self, mocked_enqueue): mocked_enqueue.return_value = "job_id" with app.test_client() as test_client: response = create_data_summary() assert response.status_code == 200, response.text resp_json = json.loads(response.data) data_summary_id = resp_json["result"]["data_summary_id"] url = f"{base_url}/chat2data" payload = { "data_summary_id": data_summary_id, "raw_question": "How many cars makers are there?", } response = test_client.post(url, data=json.dumps(payload), content_type='application/json', headers=headers) assert response.status_code == 200, response.text assert mocked_enqueue.called assert mocked_enqueue.call_count == 2 def test_query_job_detail(self): with app.test_client() as test_client: response = create_data_summary() assert response.status_code == 200, response.text resp_json = json.loads(response.data) job_id = resp_json["result"]["job_id"] url = f"{base_url}/jobs/{job_id}" response = test_client.get(url, headers=headers) assert response.status_code == 200, response.text