From 02ec0b798d53197fe9d0fa986d1bf1c2d138123d Mon Sep 17 00:00:00 2001 From: HemangChothani Date: Fri, 21 Aug 2020 12:52:23 +0530 Subject: [PATCH 1/2] feat: add support of emulator to run system tests on emulato --- tests/system/test__helpers.py | 4 ++++ tests/system/test_system.py | 15 +++++++++++++-- tests/system/test_system_async.py | 15 +++++++++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/tests/system/test__helpers.py b/tests/system/test__helpers.py index c114efaf3..f5541fd8a 100644 --- a/tests/system/test__helpers.py +++ b/tests/system/test__helpers.py @@ -1,6 +1,8 @@ import os import re +from google.cloud.firestore_v1.base_client import _FIRESTORE_EMULATOR_HOST from test_utils.system import unique_resource_id +from test_utils.system import EmulatorCreds FIRESTORE_CREDS = os.environ.get("FIRESTORE_APPLICATION_CREDENTIALS") FIRESTORE_PROJECT = os.environ.get("GCLOUD_PROJECT") @@ -8,3 +10,5 @@ MISSING_DOCUMENT = "No document to update: " DOCUMENT_EXISTS = "Document already exists: " UNIQUE_RESOURCE_ID = unique_resource_id("-") +EMULATOR_CREDS = EmulatorCreds() +FIRESTORE_EMULATOR = os.environ.get(_FIRESTORE_EMULATOR_HOST) is not None diff --git a/tests/system/test_system.py b/tests/system/test_system.py index 15efa81e6..9d5685f63 100644 --- a/tests/system/test_system.py +++ b/tests/system/test_system.py @@ -35,13 +35,21 @@ RANDOM_ID_REGEX, MISSING_DOCUMENT, UNIQUE_RESOURCE_ID, + EMULATOR_CREDS, + FIRESTORE_EMULATOR, ) @pytest.fixture(scope=u"module") def client(): - credentials = service_account.Credentials.from_service_account_file(FIRESTORE_CREDS) - project = FIRESTORE_PROJECT or credentials.project_id + if FIRESTORE_EMULATOR: + credentials = EMULATOR_CREDS + project = FIRESTORE_PROJECT + else: + credentials = service_account.Credentials.from_service_account_file( + FIRESTORE_CREDS + ) + project = FIRESTORE_PROJECT or credentials.project_id yield firestore.Client(project=project, credentials=credentials) @@ -133,6 +141,7 @@ def test_create_document_w_subcollection(client, cleanup): assert sorted(child.id for child in children) == sorted(child_ids) +@pytest.mark.skipif(FIRESTORE_EMULATOR, reason="Internal Issue b/137866686") def test_cannot_use_foreign_key(client, cleanup): document_id = "cannot" + UNIQUE_RESOURCE_ID document = client.document("foreign-key", document_id) @@ -285,6 +294,7 @@ def test_document_update_w_int_field(client, cleanup): assert snapshot1.to_dict() == expected +@pytest.mark.skipif(FIRESTORE_EMULATOR, reason="Internal Issue b/137867104") def test_update_document(client, cleanup): document_id = "for-update" + UNIQUE_RESOURCE_ID document = client.document("made", document_id) @@ -874,6 +884,7 @@ def test_collection_group_queries_filters(client, cleanup): assert found == set(["cg-doc2"]) +@pytest.mark.skipif(FIRESTORE_EMULATOR, reason="Internal Issue b/137865992") def test_get_all(client, cleanup): collection_name = "get-all" + UNIQUE_RESOURCE_ID diff --git a/tests/system/test_system_async.py b/tests/system/test_system_async.py index 4dfe36a87..07f25cbd4 100644 --- a/tests/system/test_system_async.py +++ b/tests/system/test_system_async.py @@ -34,6 +34,8 @@ RANDOM_ID_REGEX, MISSING_DOCUMENT, UNIQUE_RESOURCE_ID, + EMULATOR_CREDS, + FIRESTORE_EMULATOR, ) _test_event_loop = asyncio.new_event_loop() @@ -42,8 +44,14 @@ @pytest.fixture(scope=u"module") def client(): - credentials = service_account.Credentials.from_service_account_file(FIRESTORE_CREDS) - project = FIRESTORE_PROJECT or credentials.project_id + if FIRESTORE_EMULATOR: + credentials = EMULATOR_CREDS + project = FIRESTORE_PROJECT + else: + credentials = service_account.Credentials.from_service_account_file( + FIRESTORE_CREDS + ) + project = FIRESTORE_PROJECT or credentials.project_id yield firestore.AsyncClient(project=project, credentials=credentials) @@ -142,6 +150,7 @@ async def test_create_document_w_subcollection(client, cleanup): assert sorted([child.id async for child in children]) == sorted(child_ids) +@pytest.mark.skipif(FIRESTORE_EMULATOR, reason="Internal Issue b/137866686") async def test_cannot_use_foreign_key(client, cleanup): document_id = "cannot" + UNIQUE_RESOURCE_ID document = client.document("foreign-key", document_id) @@ -294,6 +303,7 @@ async def test_document_update_w_int_field(client, cleanup): assert snapshot1.to_dict() == expected +@pytest.mark.skipif(FIRESTORE_EMULATOR, reason="Internal Issue b/137867104") async def test_update_document(client, cleanup): document_id = "for-update" + UNIQUE_RESOURCE_ID document = client.document("made", document_id) @@ -899,6 +909,7 @@ async def test_collection_group_queries_filters(client, cleanup): assert found == set(["cg-doc2"]) +@pytest.mark.skipif(FIRESTORE_EMULATOR, reason="Internal Issue b/137865992") async def test_get_all(client, cleanup): collection_name = "get-all" + UNIQUE_RESOURCE_ID From 8cc7a44fd7c91e068cb17ac86341345bad680e88 Mon Sep 17 00:00:00 2001 From: HemangChothani Date: Wed, 2 Sep 2020 19:25:21 +0530 Subject: [PATCH 2/2] feat: nit --- tests/system/test_system.py | 16 +++++++++------- tests/system/test_system_async.py | 16 +++++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/tests/system/test_system.py b/tests/system/test_system.py index 110aa86db..8b754e93f 100644 --- a/tests/system/test_system.py +++ b/tests/system/test_system.py @@ -41,18 +41,20 @@ def _get_credentials_and_project(): - credentials = service_account.Credentials.from_service_account_file(FIRESTORE_CREDS) - project = FIRESTORE_PROJECT or credentials.project_id + if FIRESTORE_EMULATOR: + credentials = EMULATOR_CREDS + project = FIRESTORE_PROJECT + else: + credentials = service_account.Credentials.from_service_account_file( + FIRESTORE_CREDS + ) + project = FIRESTORE_PROJECT or credentials.project_id return credentials, project @pytest.fixture(scope=u"module") def client(): - if FIRESTORE_EMULATOR: - credentials = EMULATOR_CREDS - project = FIRESTORE_PROJECT - else: - credentials, project = _get_credentials_and_project() + credentials, project = _get_credentials_and_project() yield firestore.Client(project=project, credentials=credentials) diff --git a/tests/system/test_system_async.py b/tests/system/test_system_async.py index eb6a28646..09646ca46 100644 --- a/tests/system/test_system_async.py +++ b/tests/system/test_system_async.py @@ -43,18 +43,20 @@ def _get_credentials_and_project(): - credentials = service_account.Credentials.from_service_account_file(FIRESTORE_CREDS) - project = FIRESTORE_PROJECT or credentials.project_id + if FIRESTORE_EMULATOR: + credentials = EMULATOR_CREDS + project = FIRESTORE_PROJECT + else: + credentials = service_account.Credentials.from_service_account_file( + FIRESTORE_CREDS + ) + project = FIRESTORE_PROJECT or credentials.project_id return credentials, project @pytest.fixture(scope=u"module") def client(): - if FIRESTORE_EMULATOR: - credentials = EMULATOR_CREDS - project = FIRESTORE_PROJECT - else: - credentials, project = _get_credentials_and_project() + credentials, project = _get_credentials_and_project() yield firestore.AsyncClient(project=project, credentials=credentials)