diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 12f05e65b0c19016d3a8bf06cc5a8f12aa39ac9d..aa268c60fda8433db6521b7eb737484773a06b42 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -450,7 +450,7 @@ test-dashboard-service-init: script: - "pip install pipenv" - "pipenv install gunicorn && pipenv install --dev --system --deploy" - - cd ./dbrepo-dashboard-service/init/ && coverage run --rcfile=.coveragerc -m pytest tests/test_app.py && coverage html && coverage xml && coverage report > ./coverage.txt + - cd ./dbrepo-dashboard-service/init/ && coverage run --rcfile=.coveragerc -m pytest tests/test_app.py tests/test_integration_dashboard.py && coverage html && coverage xml && coverage report > ./coverage.txt - "cat ./coverage.txt | grep -o 'TOTAL[^%]*%'" artifacts: when: always diff --git a/dbrepo-dashboard-service/init/app.py b/dbrepo-dashboard-service/init/app.py index b2600c5604d066800d71a29cddfd20e2d038f7c3..84b91da6efa049721563900a9998cb9e5fa77211 100644 --- a/dbrepo-dashboard-service/init/app.py +++ b/dbrepo-dashboard-service/init/app.py @@ -53,7 +53,7 @@ def save_dashboards(databases: List[Database]) -> None: if db is not None: logging.debug(f"dashboard already exists for database with id: {database.id}") continue - dashboard.create(database.internal_name, database.owner.username, database.dashboard_uid) + dashboard.create(database.internal_name, database.dashboard_uid) dashboard.update(database) diff --git a/dbrepo-dashboard-service/init/panel.py b/dbrepo-dashboard-service/init/panel.py index 896ecf797b13def3fea8df58214cf9064abb6880..684ed815c4a2a07589f8d954fe01e6467bd206fa 100644 --- a/dbrepo-dashboard-service/init/panel.py +++ b/dbrepo-dashboard-service/init/panel.py @@ -16,7 +16,7 @@ number_types = [ColumnType.SERIAL, ColumnType.BIT, ColumnType.SMALLINT, ColumnTy time_types = [ColumnType.DATE, ColumnType.TIME, ColumnType.TIMESTAMP, ColumnType.YEAR] -bool_types = [ColumnType.TINYINT] +bool_types = [ColumnType.TINYINT, ColumnType.BOOL] section_height = 3 * 8 diff --git a/dbrepo-dashboard-service/init/tests/test_integration_dashboard.py b/dbrepo-dashboard-service/init/tests/test_integration_dashboard.py index 9208049f2acf832f355a4133fd5b374ab9a8a161..41f757aef981a15627955da51597ee28f719a347 100644 --- a/dbrepo-dashboard-service/init/tests/test_integration_dashboard.py +++ b/dbrepo-dashboard-service/init/tests/test_integration_dashboard.py @@ -1,19 +1,113 @@ import unittest +from dbrepo.api.dto import Database, ColumnType, UserBrief, ContainerBrief, ImageBrief, View, ViewColumn, ColumnEnum from grafana_client.client import GrafanaClientError import dashboard from clients.grafana_client import GrafanaClient +DASHBOARD_UID = 'covdb1' + +req = Database(id="209acf92-5c9b-4633-ad99-113c86f6e948", + name="Test", + internal_name="test_tuw1", + owner=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", username="foo"), + contact=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", username="foo"), + exchange_name="dbrepo", + is_public=True, + is_schema_public=True, + is_dashboard_enabled=True, + dashboard_uid=DASHBOARD_UID, + container=ContainerBrief(id="7efe8b27-6cdc-4387-80e3-92ee28f4a7c5", + name="MariaDB", + internal_name="mariadb", + image=ImageBrief(id="f97791b4-baf4-4b18-8f7d-3084818e6549", + name="mariadb", + version="11.1.3", + default=True)), + views=[View(id='16f59403-4f3a-4c35-aa25-44dc72f97a3e', + name='Some View', + internal_name='some_view', + query='SELECT `id`, `name`, `created_at`, `yob`, `lap_pr`, `is_verified` FROM `some_table` WHERE `age` > 21', + query_hash='0b95f9c3f1a639c4bf5460207991f7925b685c4600c902e62f63f575f9975700', + database_id='209acf92-5c9b-4633-ad99-113c86f6e948', + owner=UserBrief(id="c6b71ef5-2d2f-48b2-9d79-b8f23a3a0502", username="foo"), + is_public=True, + is_schema_public=True, + initial_view=False, + columns=[ViewColumn(id='822a64b9-0ad4-4b00-960e-8c3c98366c99', + name='id', + internal_name='id', + database_id='209acf92-5c9b-4633-ad99-113c86f6e948', + ord=0, + type=ColumnType.BIGINT, + is_null_allowed=False), + ViewColumn(id='45b99683-be27-4e14-9a0d-76e47a8400f2', + name='name', + internal_name='name', + ord=1, + database_id='209acf92-5c9b-4633-ad99-113c86f6e948', + type=ColumnType.VARCHAR, + size=255, + is_null_allowed=False), + ViewColumn(id='a26c19ad-682b-4c3a-9064-74c1c5c98a60', + name='created_at', + internal_name='created_at', + ord=2, + database_id='209acf92-5c9b-4633-ad99-113c86f6e948', + type=ColumnType.TIMESTAMP, + is_null_allowed=False), + ViewColumn(id='2cb8c249-4c09-4651-b987-e85b2d27cea0', + name='yob', + internal_name='yob', + ord=3, + database_id='209acf92-5c9b-4633-ad99-113c86f6e948', + type=ColumnType.YEAR, + is_null_allowed=True), + ViewColumn(id='4649ed3f-db4d-44f3-a622-d9f57326805e', + name='lap_pr', + internal_name='lap_pr', + ord=4, + database_id='209acf92-5c9b-4633-ad99-113c86f6e948', + type=ColumnType.TIME, + is_null_allowed=True), + ViewColumn(id='cc2b02cf-bac4-4ac7-b5e9-711ae3dc1ffe', + name='is_verified', + internal_name='is_verified', + ord=5, + database_id='209acf92-5c9b-4633-ad99-113c86f6e948', + type=ColumnType.BOOL, + is_null_allowed=False), + ViewColumn(id='f8982e7e-7e6f-433a-8a08-0f4da6ee8b68', + name='gender', + internal_name='gender', + ord=6, + database_id='209acf92-5c9b-4633-ad99-113c86f6e948', + type=ColumnType.ENUM, + enums=[ColumnEnum(id='d30908e7-17e1-4c95-874a-1e5d126a1f4a', + value='male'), + ColumnEnum(id='d225ba99-4169-470d-b497-3423b5574d0a', + value='female')], + is_null_allowed=False), + ViewColumn(id='82647def-bc83-4756-9b9d-d25d51b08b7f', + name='tags', + internal_name='tags', + ord=6, + database_id='209acf92-5c9b-4633-ad99-113c86f6e948', + type=ColumnType.SET, + enums=[ColumnEnum(id='f39fcef1-a6c0-4877-9cc2-908fa1e4a44e', + value='vip')], + is_null_allowed=False)], + identifiers=[])]) + class DashboardIntegrationTest(unittest.TestCase): - DASHBOARD_UID = 'covdb1' def test_find_succeeds(self): # mock GrafanaClient().connect().dashboard.update_dashboard(dict(folderUid='', overwrite=False, - dashboard=dict(uid=self.DASHBOARD_UID, + dashboard=dict(uid=DASHBOARD_UID, title=f'Mock', tags=['managed'], timezone='browser', @@ -21,8 +115,8 @@ class DashboardIntegrationTest(unittest.TestCase): preload=True, panels=[]))) # test - response = dashboard.find(self.DASHBOARD_UID) - self.assertEqual(self.DASHBOARD_UID, response['dashboard']['uid']) + response = dashboard.find(DASHBOARD_UID) + self.assertEqual(DASHBOARD_UID, response['dashboard']['uid']) def test_find_not_found_fails(self): # test @@ -37,14 +131,14 @@ class DashboardIntegrationTest(unittest.TestCase): def test_create_with_uid_succeeds(self): # test - response = dashboard.create('some_database', self.DASHBOARD_UID) - self.assertEqual(self.DASHBOARD_UID, response['uid']) + response = dashboard.create('some_database', DASHBOARD_UID) + self.assertEqual(DASHBOARD_UID, response['uid']) def test_create_uid_exists_fails(self): # mock GrafanaClient().connect().dashboard.update_dashboard(dict(folderUid='', overwrite=False, - dashboard=dict(uid=self.DASHBOARD_UID, + dashboard=dict(uid=DASHBOARD_UID, title=f'Mock', tags=['managed'], timezone='browser', @@ -53,7 +147,7 @@ class DashboardIntegrationTest(unittest.TestCase): panels=[]))) # test try: - dashboard.create('some_database', self.DASHBOARD_UID) + dashboard.create('some_database', DASHBOARD_UID) except GrafanaClientError: pass @@ -61,7 +155,7 @@ class DashboardIntegrationTest(unittest.TestCase): # mock GrafanaClient().connect().dashboard.update_dashboard(dict(folderUid='', overwrite=False, - dashboard=dict(uid=self.DASHBOARD_UID, + dashboard=dict(uid=DASHBOARD_UID, title=f'Mock', tags=['managed'], timezone='browser', @@ -69,7 +163,7 @@ class DashboardIntegrationTest(unittest.TestCase): preload=True, panels=[]))) # test - dashboard.delete(self.DASHBOARD_UID) + dashboard.delete(DASHBOARD_UID) def test_delete_not_exists_fails(self): # test @@ -82,7 +176,7 @@ class DashboardIntegrationTest(unittest.TestCase): # mock GrafanaClient().connect().dashboard.update_dashboard(dict(folderUid='', overwrite=False, - dashboard=dict(uid=self.DASHBOARD_UID, + dashboard=dict(uid=DASHBOARD_UID, title=f'Mock', tags=['managed'], timezone='browser', @@ -90,4 +184,11 @@ class DashboardIntegrationTest(unittest.TestCase): preload=True, panels=[]))) # test - dashboard.delete(self.DASHBOARD_UID) + dashboard.update(req) + + def test_update_not_exists_fails(self): + # test + try: + dashboard.update(req) + except GrafanaClientError: + pass