From a75347f8db62175c42878851a71fc1c5bb381278 Mon Sep 17 00:00:00 2001 From: Mike Gouline <1960272+gouline@users.noreply.github.com> Date: Fri, 20 Dec 2024 23:37:01 +1100 Subject: [PATCH] test: unicode collections and separate pytest fixtures --- sandbox/metabase.db/metabase.db.mv.db | Bin 303104 -> 307200 bytes tests/conftest.py | 19 +++++++++ tests/fixtures/api/card/27.json | 4 +- tests/fixtures/api/card/28.json | 4 +- tests/fixtures/api/card/29.json | 4 +- tests/fixtures/api/card/30.json | 4 +- tests/fixtures/api/card/31.json | 4 +- tests/fixtures/api/card/32.json | 4 +- tests/fixtures/api/card/33.json | 32 +++++++++------ tests/fixtures/api/collection.json | 17 ++++++++ tests/fixtures/api/collection/3/items.json | 25 ++++++++++++ tests/fixtures/api/collection/root/items.json | 23 ----------- tests/fixtures/api/dashboard/2.json | 8 ++-- tests/fixtures/api/database.json | 2 +- tests/fixtures/api/database/2/metadata.json | 20 ++++----- tests/fixtures/api/table.json | 38 +++++++++--------- tests/fixtures/api/user/1.json | 4 +- .../exposure/collection/our_analytics.yml | 26 ------------ ...0\265\320\272\321\206\320\270\321\217.yml" | 28 +++++++++++++ tests/fixtures/exposure/default/exposures.yml | 4 +- tests/fixtures/exposure/type/card/33.yml | 4 +- tests/test_exposures.py | 9 ----- tests/test_metabase.py | 11 +---- tests/test_models.py | 9 ----- 24 files changed, 163 insertions(+), 140 deletions(-) create mode 100644 tests/conftest.py create mode 100644 tests/fixtures/api/collection/3/items.json create mode 100644 "tests/fixtures/exposure/collection/\320\272\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.yml" diff --git a/sandbox/metabase.db/metabase.db.mv.db b/sandbox/metabase.db/metabase.db.mv.db index c3703daf12bcdf7b12b4cc4bc7ec298e08521c9a..3d6c6c5be3dc1414622a81739a4d09b4ceeeed65 100644 GIT binary patch delta 50261 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 delta 43347 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 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 00000000..31b8113a --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,19 @@ +import pytest + +from tests._mocks import TMP_PATH, MockDbtMetabase, MockMetabase + + +@pytest.fixture(name="core") +def fixture_core() -> MockDbtMetabase: + c = MockDbtMetabase() + c._ModelsMixin__SYNC_PERIOD = 1 # type: ignore + return c + + +@pytest.fixture(name="metabase") +def fixture_metabase() -> MockMetabase: + return MockMetabase(url="http://localhost") + + +def setup_module(): + TMP_PATH.mkdir(exist_ok=True) diff --git a/tests/fixtures/api/card/27.json b/tests/fixtures/api/card/27.json index 5ddcd060..f09b302f 100644 --- a/tests/fixtures/api/card/27.json +++ b/tests/fixtures/api/card/27.json @@ -2,7 +2,7 @@ "cache_invalidated_at": null, "description": "Orders and customers", "archived": false, - "view_count": 446, + "view_count": 458, "collection_position": null, "table_id": 10, "can_run_adhoc_query": true, @@ -561,7 +561,7 @@ "creator": { "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", - "last_login": "2024-11-02T04:41:42.402168Z", + "last_login": "2024-12-20T12:30:47.814008Z", "is_qbnewb": false, "is_superuser": true, "id": 1, diff --git a/tests/fixtures/api/card/28.json b/tests/fixtures/api/card/28.json index e9c5ef9d..4ecd8c3a 100644 --- a/tests/fixtures/api/card/28.json +++ b/tests/fixtures/api/card/28.json @@ -2,7 +2,7 @@ "cache_invalidated_at": null, "description": null, "archived": false, - "view_count": 223, + "view_count": 229, "collection_position": null, "table_id": 10, "can_run_adhoc_query": true, @@ -549,7 +549,7 @@ "creator": { "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", - "last_login": "2024-11-02T04:41:42.402168Z", + "last_login": "2024-12-20T12:30:47.814008Z", "is_qbnewb": false, "is_superuser": true, "id": 1, diff --git a/tests/fixtures/api/card/29.json b/tests/fixtures/api/card/29.json index 6da1b8fc..afd5f0f5 100644 --- a/tests/fixtures/api/card/29.json +++ b/tests/fixtures/api/card/29.json @@ -2,7 +2,7 @@ "cache_invalidated_at": null, "description": null, "archived": false, - "view_count": 222, + "view_count": 228, "collection_position": null, "table_id": null, "can_run_adhoc_query": true, @@ -41,7 +41,7 @@ "creator": { "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", - "last_login": "2024-11-02T04:41:42.402168Z", + "last_login": "2024-12-20T12:30:47.814008Z", "is_qbnewb": false, "is_superuser": true, "id": 1, diff --git a/tests/fixtures/api/card/30.json b/tests/fixtures/api/card/30.json index f9e5d52e..9ccbd2a3 100644 --- a/tests/fixtures/api/card/30.json +++ b/tests/fixtures/api/card/30.json @@ -2,7 +2,7 @@ "cache_invalidated_at": null, "description": "Dummy 1", "archived": false, - "view_count": 43, + "view_count": 47, "collection_position": null, "table_id": null, "can_run_adhoc_query": true, @@ -41,7 +41,7 @@ "creator": { "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", - "last_login": "2024-11-02T04:41:42.402168Z", + "last_login": "2024-12-20T12:30:47.814008Z", "is_qbnewb": false, "is_superuser": true, "id": 1, diff --git a/tests/fixtures/api/card/31.json b/tests/fixtures/api/card/31.json index 1ace592c..14cdd2f4 100644 --- a/tests/fixtures/api/card/31.json +++ b/tests/fixtures/api/card/31.json @@ -2,7 +2,7 @@ "cache_invalidated_at": null, "description": "Dummy 2", "archived": false, - "view_count": 43, + "view_count": 47, "collection_position": null, "table_id": null, "can_run_adhoc_query": true, @@ -41,7 +41,7 @@ "creator": { "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", - "last_login": "2024-11-02T04:41:42.402168Z", + "last_login": "2024-12-20T12:30:47.814008Z", "is_qbnewb": false, "is_superuser": true, "id": 1, diff --git a/tests/fixtures/api/card/32.json b/tests/fixtures/api/card/32.json index 44da566b..163790d1 100644 --- a/tests/fixtures/api/card/32.json +++ b/tests/fixtures/api/card/32.json @@ -2,7 +2,7 @@ "cache_invalidated_at": null, "description": "CTE SQL", "archived": false, - "view_count": 34, + "view_count": 38, "collection_position": null, "table_id": null, "can_run_adhoc_query": true, @@ -276,7 +276,7 @@ "creator": { "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", - "last_login": "2024-11-02T04:41:42.402168Z", + "last_login": "2024-12-20T12:30:47.814008Z", "is_qbnewb": false, "is_superuser": true, "id": 1, diff --git a/tests/fixtures/api/card/33.json b/tests/fixtures/api/card/33.json index fcdf7663..3c7e5216 100644 --- a/tests/fixtures/api/card/33.json +++ b/tests/fixtures/api/card/33.json @@ -2,7 +2,7 @@ "cache_invalidated_at": null, "description": null, "archived": false, - "view_count": 15, + "view_count": 19, "collection_position": null, "table_id": 18, "can_run_adhoc_query": true, @@ -146,7 +146,7 @@ "creator": { "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", - "last_login": "2024-11-02T04:41:42.402168Z", + "last_login": "2024-12-20T12:30:47.814008Z", "is_qbnewb": false, "is_superuser": true, "id": 1, @@ -158,17 +158,17 @@ "can_write": true, "database_id": 2, "enable_embedding": false, - "collection_id": null, + "collection_id": 3, "query_type": "query", "name": "Transactions", - "last_query_start": "2024-10-12T03:53:32.250619Z", + "last_query_start": "2024-12-20T12:30:05.862314Z", "dashboard_count": 0, - "last_used_at": "2024-10-12T03:43:09.869884Z", + "last_used_at": "2024-12-20T12:30:05.932096Z", "type": "question", - "average_query_time": 114.5, + "average_query_time": 134.33333333333334, "creator_id": 1, "moderation_reviews": [], - "updated_at": "2024-10-12T01:52:30.606845Z", + "updated_at": "2024-12-20T12:30:11.735631Z", "made_public_by_id": null, "embedding_params": null, "cache_ttl": null, @@ -189,18 +189,26 @@ "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", "last_name": null, - "timestamp": "2024-10-11T23:46:29.299411Z" + "timestamp": "2024-12-20T12:30:11.782155Z" }, "visualization_settings": { "table.cell_column": "payment_id" }, "collection": { - "metabase.models.collection.root/is-root?": true, "authority_level": null, - "name": "Our analytics", + "description": null, + "archived": false, + "slug": "%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F", + "name": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f", + "personal_owner_id": null, + "type": null, + "is_sample": false, + "id": 3, + "entity_id": "4Zdu-bk8RhwuFiEiRXuOH", + "location": "/", + "namespace": null, "is_personal": false, - "id": "root", - "can_write": true + "created_at": "2024-12-20T12:29:39.063908Z" }, "metabase_version": "v0.50.5 (48f6978)", "parameters": [], diff --git a/tests/fixtures/api/collection.json b/tests/fixtures/api/collection.json index addf935c..ad1e4db6 100644 --- a/tests/fixtures/api/collection.json +++ b/tests/fixtures/api/collection.json @@ -25,5 +25,22 @@ "namespace": null, "is_personal": true, "created_at": "2024-06-19T11:49:38.03895Z" + }, + { + "authority_level": null, + "description": null, + "archived": false, + "slug": "%D0%BA%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D1%8F", + "can_write": true, + "name": "\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f", + "personal_owner_id": null, + "type": null, + "is_sample": false, + "id": 3, + "entity_id": "4Zdu-bk8RhwuFiEiRXuOH", + "location": "/", + "namespace": null, + "is_personal": false, + "created_at": "2024-12-20T12:29:39.063908Z" } ] \ No newline at end of file diff --git a/tests/fixtures/api/collection/3/items.json b/tests/fixtures/api/collection/3/items.json new file mode 100644 index 00000000..ceff80f4 --- /dev/null +++ b/tests/fixtures/api/collection/3/items.json @@ -0,0 +1,25 @@ +[ + { + "description": null, + "collection_position": null, + "can_write": true, + "database_id": 2, + "collection_id": 3, + "name": "Transactions", + "fully_parameterized": true, + "moderated_status": null, + "id": 33, + "display": "table", + "entity_id": "ZRX529pNYbPiCLCi8HvZ6", + "collection_preview": true, + "last-edit-info": { + "id": 1, + "last_name": null, + "first_name": "dbtmetabase", + "email": "dbtmetabase@example.com", + "timestamp": "2024-12-20T12:30:11.782155Z" + }, + "location": null, + "model": "card" + } +] \ No newline at end of file diff --git a/tests/fixtures/api/collection/root/items.json b/tests/fixtures/api/collection/root/items.json index 5cbf09b7..cfd11a59 100644 --- a/tests/fixtures/api/collection/root/items.json +++ b/tests/fixtures/api/collection/root/items.json @@ -155,28 +155,5 @@ }, "location": null, "model": "dashboard" - }, - { - "description": null, - "collection_position": null, - "can_write": true, - "database_id": 2, - "collection_id": null, - "name": "Transactions", - "fully_parameterized": true, - "moderated_status": null, - "id": 33, - "display": "table", - "entity_id": "ZRX529pNYbPiCLCi8HvZ6", - "collection_preview": true, - "last-edit-info": { - "id": 1, - "last_name": null, - "first_name": "dbtmetabase", - "email": "dbtmetabase@example.com", - "timestamp": "2024-10-11T23:46:29.299411Z" - }, - "location": null, - "model": "card" } ] \ No newline at end of file diff --git a/tests/fixtures/api/dashboard/2.json b/tests/fixtures/api/dashboard/2.json index faa2f8e9..0b89154e 100644 --- a/tests/fixtures/api/dashboard/2.json +++ b/tests/fixtures/api/dashboard/2.json @@ -1,7 +1,7 @@ { "description": "Dashboard is a dashboard is a dashboard", "archived": false, - "view_count": 118, + "view_count": 121, "collection_position": null, "dashcards": [ { @@ -14,7 +14,7 @@ "cache_invalidated_at": null, "description": "Orders and customers", "archived": false, - "view_count": 446, + "view_count": 458, "collection_position": null, "table_id": 10, "result_metadata": [ @@ -653,7 +653,7 @@ "cache_invalidated_at": null, "description": null, "archived": false, - "view_count": 223, + "view_count": 229, "collection_position": null, "table_id": 10, "result_metadata": [ @@ -1266,7 +1266,7 @@ "cache_invalidated_at": null, "description": null, "archived": false, - "view_count": 222, + "view_count": 228, "collection_position": null, "table_id": null, "result_metadata": [ diff --git a/tests/fixtures/api/database.json b/tests/fixtures/api/database.json index fd87b826..77cce777 100644 --- a/tests/fixtures/api/database.json +++ b/tests/fixtures/api/database.json @@ -55,7 +55,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "native_permissions": "write", "cache_ttl": null, "details": { diff --git a/tests/fixtures/api/database/2/metadata.json b/tests/fixtures/api/database/2/metadata.json index f475e7c8..785dc66f 100644 --- a/tests/fixtures/api/database/2/metadata.json +++ b/tests/fixtures/api/database/2/metadata.json @@ -412,7 +412,7 @@ ], "caveats": null, "segments": [], - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 12, "db_id": 2, @@ -941,7 +941,7 @@ ], "caveats": "Some facts are derived from payments", "segments": [], - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 10, "db_id": 2, @@ -1103,7 +1103,7 @@ ], "caveats": null, "segments": [], - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 13, "db_id": 2, @@ -1313,7 +1313,7 @@ ], "caveats": null, "segments": [], - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 14, "db_id": 2, @@ -1527,7 +1527,7 @@ ], "caveats": null, "segments": [], - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 11, "db_id": 2, @@ -1639,7 +1639,7 @@ ], "caveats": null, "segments": [], - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 19, "db_id": 2, @@ -2126,7 +2126,7 @@ ], "caveats": null, "segments": [], - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 15, "db_id": 2, @@ -2355,7 +2355,7 @@ ], "caveats": null, "segments": [], - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 9, "db_id": 2, @@ -2633,7 +2633,7 @@ ], "caveats": null, "segments": [], - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 18, "db_id": 2, @@ -2650,7 +2650,7 @@ ], "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, diff --git a/tests/fixtures/api/table.json b/tests/fixtures/api/table.json index 72894d01..4f4171be 100644 --- a/tests/fixtures/api/table.json +++ b/tests/fixtures/api/table.json @@ -61,7 +61,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -96,7 +96,7 @@ "show_in_getting_started": false, "name": "customers", "caveats": null, - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 12, "db_id": 2, @@ -171,7 +171,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -206,7 +206,7 @@ "show_in_getting_started": false, "name": "orders", "caveats": "Some facts are derived from payments", - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 10, "db_id": 2, @@ -281,7 +281,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -316,7 +316,7 @@ "show_in_getting_started": false, "name": "raw_customers", "caveats": null, - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 13, "db_id": 2, @@ -391,7 +391,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -426,7 +426,7 @@ "show_in_getting_started": false, "name": "raw_orders", "caveats": null, - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 14, "db_id": 2, @@ -501,7 +501,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -536,7 +536,7 @@ "show_in_getting_started": false, "name": "raw_payments", "caveats": null, - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 11, "db_id": 2, @@ -611,7 +611,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -646,7 +646,7 @@ "show_in_getting_started": false, "name": "skus", "caveats": null, - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 19, "db_id": 2, @@ -721,7 +721,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -831,7 +831,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -866,7 +866,7 @@ "show_in_getting_started": false, "name": "stg_orders", "caveats": null, - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 15, "db_id": 2, @@ -941,7 +941,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -976,7 +976,7 @@ "show_in_getting_started": false, "name": "stg_payments", "caveats": null, - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 9, "db_id": 2, @@ -1051,7 +1051,7 @@ "caveats": null, "creator_id": 1, "is_full_sync": true, - "updated_at": "2024-11-02T04:30:07.348325Z", + "updated_at": "2024-12-20T12:28:30.976262Z", "cache_ttl": null, "details": { "ssl": false, @@ -1086,7 +1086,7 @@ "show_in_getting_started": false, "name": "transactions", "caveats": null, - "updated_at": "2024-11-02T04:33:23.804648Z", + "updated_at": "2024-12-20T12:28:32.299132Z", "active": true, "id": 18, "db_id": 2, diff --git a/tests/fixtures/api/user/1.json b/tests/fixtures/api/user/1.json index 50f7f8df..34137870 100644 --- a/tests/fixtures/api/user/1.json +++ b/tests/fixtures/api/user/1.json @@ -2,7 +2,7 @@ "email": "dbtmetabase@example.com", "first_name": "dbtmetabase", "locale": null, - "last_login": "2024-11-02T04:41:42.402168Z", + "last_login": "2024-12-20T12:30:47.814008Z", "is_active": true, "user_group_memberships": [ { @@ -13,7 +13,7 @@ } ], "is_qbnewb": false, - "updated_at": "2024-11-02T04:41:42.402168Z", + "updated_at": "2024-12-20T12:30:47.814008Z", "is_superuser": true, "login_attributes": null, "id": 1, diff --git a/tests/fixtures/exposure/collection/our_analytics.yml b/tests/fixtures/exposure/collection/our_analytics.yml index 11d1926d..22b329b5 100644 --- a/tests/fixtures/exposure/collection/our_analytics.yml +++ b/tests/fixtures/exposure/collection/our_analytics.yml @@ -184,29 +184,3 @@ exposures: - ref('orders') - ref('stg_orders') - ref('stg_payments') - - name: transactions - label: Transactions - description: '### Visualization: Table - - - No description provided in Metabase - - - #### Metadata - - - Metabase ID: __33__ - - - Created On: __2024-10-11T23:46:29.272117Z__' - type: analysis - url: http://localhost:3000/card/33 - maturity: medium - owner: - name: dbtmetabase - email: dbtmetabase@example.com - depends_on: - - ref('payments') - meta: - average_query_time: '0:00.115' - last_used_at: '2024-10-12T03:43:09.869884Z' diff --git "a/tests/fixtures/exposure/collection/\320\272\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.yml" "b/tests/fixtures/exposure/collection/\320\272\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.yml" new file mode 100644 index 00000000..e8411f1e --- /dev/null +++ "b/tests/fixtures/exposure/collection/\320\272\320\276\320\273\320\273\320\265\320\272\321\206\320\270\321\217.yml" @@ -0,0 +1,28 @@ +version: 2 +exposures: + - name: transactions + label: Transactions + description: '### Visualization: Table + + + No description provided in Metabase + + + #### Metadata + + + Metabase ID: __33__ + + + Created On: __2024-10-11T23:46:29.272117Z__' + type: analysis + url: http://localhost:3000/card/33 + maturity: medium + owner: + name: dbtmetabase + email: dbtmetabase@example.com + depends_on: + - ref('payments') + meta: + average_query_time: '0:00.134' + last_used_at: '2024-12-20T12:30:05.932096Z' diff --git a/tests/fixtures/exposure/default/exposures.yml b/tests/fixtures/exposure/default/exposures.yml index 2dca3392..58bcc6b1 100644 --- a/tests/fixtures/exposure/default/exposures.yml +++ b/tests/fixtures/exposure/default/exposures.yml @@ -222,7 +222,7 @@ exposures: depends_on: - ref('payments') meta: - average_query_time: '0:00.115' - last_used_at: '2024-10-12T03:43:09.869884Z' + average_query_time: '0:00.134' + last_used_at: '2024-12-20T12:30:05.932096Z' tags: - metabase diff --git a/tests/fixtures/exposure/type/card/33.yml b/tests/fixtures/exposure/type/card/33.yml index 2c037a86..e8411f1e 100644 --- a/tests/fixtures/exposure/type/card/33.yml +++ b/tests/fixtures/exposure/type/card/33.yml @@ -24,5 +24,5 @@ exposures: depends_on: - ref('payments') meta: - average_query_time: '0:00.115' - last_used_at: '2024-10-12T03:43:09.869884Z' + average_query_time: '0:00.134' + last_used_at: '2024-12-20T12:30:05.932096Z' diff --git a/tests/test_exposures.py b/tests/test_exposures.py index 6cd941f4..6a6bed65 100644 --- a/tests/test_exposures.py +++ b/tests/test_exposures.py @@ -7,15 +7,6 @@ from tests._mocks import FIXTURES_PATH, TMP_PATH, MockDbtMetabase -def setup_module(): - TMP_PATH.mkdir(exist_ok=True) - - -@pytest.fixture(name="core") -def fixture_core() -> MockDbtMetabase: - return MockDbtMetabase() - - def _assert_exposures(expected_path: Path, actual_path: Path): with open(expected_path, encoding="utf-8") as f: expected = yaml.safe_load(f) diff --git a/tests/test_metabase.py b/tests/test_metabase.py index 4b7c8411..a81329e5 100644 --- a/tests/test_metabase.py +++ b/tests/test_metabase.py @@ -1,13 +1,6 @@ -import pytest - from tests._mocks import MockMetabase -@pytest.fixture(name="metabase") -def fixture_metabase() -> MockMetabase: - return MockMetabase(url="http://localhost") - - def test_metabase_find_database(metabase: MockMetabase): db = metabase.find_database(name="dbtmetabase") assert db @@ -17,10 +10,10 @@ def test_metabase_find_database(metabase: MockMetabase): def test_metabase_get_collections(metabase: MockMetabase): excluded = metabase.get_collections(exclude_personal=True) - assert len(excluded) == 1 + assert len(excluded) == 2 included = metabase.get_collections(exclude_personal=False) - assert len(included) == 2 + assert len(included) == 3 def test_metabase_get_collection_items(metabase: MockMetabase): diff --git a/tests/test_models.py b/tests/test_models.py index 48496573..88cf954c 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -1,18 +1,9 @@ from typing import MutableSequence, cast -import pytest - from dbtmetabase.manifest import Column from tests._mocks import MockDbtMetabase -@pytest.fixture(name="core") -def fixture_core() -> MockDbtMetabase: - c = MockDbtMetabase() - c._ModelsMixin__SYNC_PERIOD = 1 # type: ignore - return c - - def test_export(core: MockDbtMetabase): core.export_models( metabase_database="dbtmetabase",