From 83fd383081430b96ff34bb981ecd3462136d7613 Mon Sep 17 00:00:00 2001 From: Adam Dangoor Date: Wed, 14 Oct 2026 10:45:37 +0100 Subject: [PATCH] Separate backend selection from shared setup fixtures --- tests/mock_vws/add_target/conftest.py | 2 +- .../mock_vws/authorization_header/conftest.py | 2 +- tests/mock_vws/content_length/conftest.py | 2 +- .../database_summary/contract/conftest.py | 2 +- tests/mock_vws/date_header/conftest.py | 2 +- tests/mock_vws/delete_target/conftest.py | 2 +- tests/mock_vws/fixtures/vuforia_backends.py | 170 +++++++++++++----- tests/mock_vws/get_duplicates/conftest.py | 2 +- tests/mock_vws/get_target/conftest.py | 2 +- tests/mock_vws/header_size/conftest.py | 2 +- tests/mock_vws/invalid_given_id/conftest.py | 2 +- tests/mock_vws/invalid_json/conftest.py | 2 +- .../authentication_tests/contract/conftest.py | 2 +- .../errors/contract/conftest.py | 2 +- .../requests/contract/conftest.py | 2 +- tests/mock_vws/query/conftest.py | 2 +- tests/mock_vws/reco_counts_report/conftest.py | 2 +- .../requests_mock/payloads/conftest.py | 2 +- tests/mock_vws/target_list/conftest.py | 2 +- .../target_summary/contract/conftest.py | 2 +- tests/mock_vws/unexpected_json/conftest.py | 2 +- tests/mock_vws/update_target/conftest.py | 2 +- .../contract/conftest.py | 2 +- .../mock_only/conftest.py | 2 +- 24 files changed, 150 insertions(+), 66 deletions(-) diff --git a/tests/mock_vws/add_target/conftest.py b/tests/mock_vws/add_target/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/add_target/conftest.py +++ b/tests/mock_vws/add_target/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/authorization_header/conftest.py b/tests/mock_vws/authorization_header/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/authorization_header/conftest.py +++ b/tests/mock_vws/authorization_header/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/content_length/conftest.py b/tests/mock_vws/content_length/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/content_length/conftest.py +++ b/tests/mock_vws/content_length/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/database_summary/contract/conftest.py b/tests/mock_vws/database_summary/contract/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/database_summary/contract/conftest.py +++ b/tests/mock_vws/database_summary/contract/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/date_header/conftest.py b/tests/mock_vws/date_header/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/date_header/conftest.py +++ b/tests/mock_vws/date_header/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/delete_target/conftest.py b/tests/mock_vws/delete_target/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/delete_target/conftest.py +++ b/tests/mock_vws/delete_target/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/fixtures/vuforia_backends.py b/tests/mock_vws/fixtures/vuforia_backends.py index 6c81935f6..188834ed3 100644 --- a/tests/mock_vws/fixtures/vuforia_backends.py +++ b/tests/mock_vws/fixtures/vuforia_backends.py @@ -561,40 +561,108 @@ def _setup_model_target_backend( ) -# Tests which use this are run against the real Vuforia and against each -# mock. This is useful for verifying the mocks. -fixture_verify_mock_vuforia = backend_fixture( - name="verify_mock_vuforia", +@beartype +def _defer_backend_setup( + *, + backend: VuforiaBackend, + request: pytest.FixtureRequest, +) -> Generator[None]: + """Leave setup to the shared fixture after backend selection. + + Yields: + ``None``, without setting up the selected backend. + """ + del backend, request + yield + + +# These adapter-internal fixtures select and apply skip policy for a backend. +# Public fixtures below set up and tear down the selected backend without +# exposing that selection to the shared suite. +fixture_vws_backend = backend_fixture( + name="_vws_backend", backends=_ALL_BACKENDS, - setup_for=_setup_backend, + setup_for=_defer_backend_setup, ) - -# Model Target Web API contract tests, run against the real Vuforia and -# against each mock. -fixture_verify_model_target_mock_vuforia = backend_fixture( - name="verify_model_target_mock_vuforia", +fixture_model_target_backend = backend_fixture( + name="_model_target_backend", backends=_ALL_BACKENDS, - setup_for=_setup_model_target_backend, + setup_for=_defer_backend_setup, ) - -# Model Target Web API tests which need scopes that the real test account does -# not have, run against each mock only. -fixture_model_target_mock_only_vuforia = backend_fixture( - name="model_target_mock_only_vuforia", +fixture_model_target_mock_backend = backend_fixture( + name="_model_target_mock_backend", backends=_MOCK_BACKENDS, - setup_for=_setup_model_target_backend, + setup_for=_defer_backend_setup, ) - -# Tests which use this are run against each mock, and not against the -# real Vuforia. This is useful for testing the mock using fixtures which -# connect to Vuforia. -fixture_mock_only_vuforia = backend_fixture( - name="mock_only_vuforia", +fixture_mock_vws_backend = backend_fixture( + name="_mock_vws_backend", backends=_MOCK_BACKENDS, - setup_for=_setup_backend, + setup_for=_defer_backend_setup, ) +@pytest.fixture(name="verify_mock_vuforia") +def fixture_verify_mock_vuforia( + *, + _vws_backend: VuforiaBackend, + request: pytest.FixtureRequest, +) -> Generator[None]: + """Set up and tear down the selected VWS/query backend. + + Yields: + ``None``, once the backend is ready for shared tests. + """ + yield from _setup_backend(backend=_vws_backend, request=request) + + +@pytest.fixture(name="verify_model_target_mock_vuforia") +def fixture_verify_model_target_mock_vuforia( + *, + _model_target_backend: VuforiaBackend, + request: pytest.FixtureRequest, +) -> Generator[None]: + """Set up and tear down the selected Model Target backend. + + Yields: + ``None``, once the backend is ready for shared tests. + """ + yield from _setup_model_target_backend( + backend=_model_target_backend, + request=request, + ) + + +@pytest.fixture(name="model_target_mock_only_vuforia") +def fixture_model_target_mock_only_vuforia( + *, + _model_target_mock_backend: VuforiaBackend, + request: pytest.FixtureRequest, +) -> Generator[None]: + """Set up and tear down a Model Target mock backend. + + Yields: + ``None``, once the backend is ready for mock-only tests. + """ + yield from _setup_model_target_backend( + backend=_model_target_mock_backend, + request=request, + ) + + +@pytest.fixture(name="mock_only_vuforia") +def fixture_mock_only_vuforia( + *, + _mock_vws_backend: VuforiaBackend, + request: pytest.FixtureRequest, +) -> Generator[None]: + """Set up and tear down a VWS/query mock backend. + + Yields: + ``None``, once the backend is ready for mock-only tests. + """ + yield from _setup_backend(backend=_mock_vws_backend, request=request) + + @beartype def _cloud_database_adder( *, @@ -621,16 +689,19 @@ def add_flask_cloud_database(*, cloud_database: CloudDatabase) -> None: @pytest.fixture(name="add_cloud_database") def fixture_add_cloud_database( *, - mock_only_vuforia: VuforiaBackend, + mock_only_vuforia: None, + _mock_vws_backend: VuforiaBackend, ) -> AddCloudDatabase: """The database creation operation for the running mock backend.""" - return _cloud_database_adder(backend=mock_only_vuforia) + del mock_only_vuforia + return _cloud_database_adder(backend=_mock_vws_backend) @pytest.fixture(name="rate_limited_database") def fixture_rate_limited_database( *, - verify_mock_vuforia: VuforiaBackend, + verify_mock_vuforia: None, + _vws_backend: VuforiaBackend, vuforia_database: CloudDatabase, ) -> CloudDatabase: """Return a database which applies real Vuforia's request rate limits. @@ -639,13 +710,14 @@ def fixture_rate_limited_database( database with the limits, so that the shared database which the other tests use is not limited. """ - if verify_mock_vuforia == VuforiaBackend.REAL: + del verify_mock_vuforia + if _vws_backend == VuforiaBackend.REAL: return vuforia_database database = CloudDatabase( request_rate_limits=DOCUMENTED_REQUEST_RATE_LIMITS ) - add_cloud_database = _cloud_database_adder(backend=verify_mock_vuforia) + add_cloud_database = _cloud_database_adder(backend=_vws_backend) add_cloud_database(cloud_database=database) return database @@ -653,10 +725,12 @@ def fixture_rate_limited_database( @pytest.fixture(name="seed_recognition_counts") def fixture_seed_recognition_counts( *, - mock_only_vuforia: VuforiaBackend, + mock_only_vuforia: None, + _mock_vws_backend: VuforiaBackend, ) -> SeedRecognitionCounts: """The recognition-count operation for the running mock backend.""" - if mock_only_vuforia == VuforiaBackend.MOCK: + del mock_only_vuforia + if _mock_vws_backend == VuforiaBackend.MOCK: @beartype def seed_in_memory_counts( @@ -712,11 +786,13 @@ def seed_flask_counts( @pytest.fixture(name="unrouted_requests") def fixture_unrouted_requests( *, - verify_mock_vuforia: VuforiaBackend, + verify_mock_vuforia: None, + _vws_backend: VuforiaBackend, base_vws_url: str, ) -> UnroutedRequests: """The transport for unmatched requests on the running backend.""" - if verify_mock_vuforia == VuforiaBackend.FLASK_IN_PROCESS: + del verify_mock_vuforia + if _vws_backend == VuforiaBackend.FLASK_IN_PROCESS: return UnroutedRequests( send=_send_flask_unrouted_request, returns_response=True, @@ -752,7 +828,7 @@ def send_http_request( return UnroutedRequests( send=send_http_request, - returns_response=verify_mock_vuforia != VuforiaBackend.MOCK, + returns_response=_vws_backend != VuforiaBackend.MOCK, ) @@ -813,22 +889,26 @@ def _model_target_credentials_for_backend( @pytest.fixture(name="model_target_credentials") def fixture_model_target_credentials( *, - verify_model_target_mock_vuforia: VuforiaBackend, + verify_model_target_mock_vuforia: None, + _model_target_backend: VuforiaBackend, ) -> ModelTargetCredentials: """Model Target credentials supplied by the running backend.""" + del verify_model_target_mock_vuforia return _model_target_credentials_for_backend( - backend=verify_model_target_mock_vuforia, + backend=_model_target_backend, ) @pytest.fixture(name="mock_model_target_credentials") def fixture_mock_model_target_credentials( *, - model_target_mock_only_vuforia: VuforiaBackend, + model_target_mock_only_vuforia: None, + _model_target_mock_backend: VuforiaBackend, ) -> ModelTargetCredentials: """Model Target credentials for tests which require a mock.""" + del model_target_mock_only_vuforia return _model_target_credentials_for_backend( - backend=model_target_mock_only_vuforia, + backend=_model_target_mock_backend, ) @@ -871,28 +951,32 @@ def _skip_unrequested_real_signing( @pytest.fixture(name="signed_model_target_credentials") def fixture_signed_model_target_credentials( *, - verify_model_target_mock_vuforia: VuforiaBackend, + verify_model_target_mock_vuforia: None, + _model_target_backend: VuforiaBackend, request: pytest.FixtureRequest, ) -> ModelTargetCredentials: """Credentials for signing tests, after applying the real-service opt-in policy. """ + del verify_model_target_mock_vuforia _skip_unrequested_real_signing( request=request, - backend=verify_model_target_mock_vuforia, + backend=_model_target_backend, ) return _model_target_credentials_for_backend( - backend=verify_model_target_mock_vuforia, + backend=_model_target_backend, ) @pytest.fixture(name="backend_capabilities") def fixture_backend_capabilities( *, - verify_mock_vuforia: VuforiaBackend, + verify_mock_vuforia: None, + _vws_backend: VuforiaBackend, ) -> BackendCapabilities: """The behavior supported by the running VWS and query backend.""" - is_mock = verify_mock_vuforia != VuforiaBackend.REAL + del verify_mock_vuforia + is_mock = _vws_backend != VuforiaBackend.REAL return BackendCapabilities( deterministic_target_order=is_mock, deterministic_query_order=is_mock, diff --git a/tests/mock_vws/get_duplicates/conftest.py b/tests/mock_vws/get_duplicates/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/get_duplicates/conftest.py +++ b/tests/mock_vws/get_duplicates/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/get_target/conftest.py b/tests/mock_vws/get_target/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/get_target/conftest.py +++ b/tests/mock_vws/get_target/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/header_size/conftest.py b/tests/mock_vws/header_size/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/header_size/conftest.py +++ b/tests/mock_vws/header_size/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/invalid_given_id/conftest.py b/tests/mock_vws/invalid_given_id/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/invalid_given_id/conftest.py +++ b/tests/mock_vws/invalid_given_id/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/invalid_json/conftest.py b/tests/mock_vws/invalid_json/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/invalid_json/conftest.py +++ b/tests/mock_vws/invalid_json/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/model_target_web_api/authentication_tests/contract/conftest.py b/tests/mock_vws/model_target_web_api/authentication_tests/contract/conftest.py index d4cd0b38b..a4643c00c 100644 --- a/tests/mock_vws/model_target_web_api/authentication_tests/contract/conftest.py +++ b/tests/mock_vws/model_target_web_api/authentication_tests/contract/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_model_target_mock_vuforia: object, + verify_model_target_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_model_target_mock_vuforia diff --git a/tests/mock_vws/model_target_web_api/errors/contract/conftest.py b/tests/mock_vws/model_target_web_api/errors/contract/conftest.py index d4cd0b38b..a4643c00c 100644 --- a/tests/mock_vws/model_target_web_api/errors/contract/conftest.py +++ b/tests/mock_vws/model_target_web_api/errors/contract/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_model_target_mock_vuforia: object, + verify_model_target_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_model_target_mock_vuforia diff --git a/tests/mock_vws/model_target_web_api/requests/contract/conftest.py b/tests/mock_vws/model_target_web_api/requests/contract/conftest.py index d4cd0b38b..a4643c00c 100644 --- a/tests/mock_vws/model_target_web_api/requests/contract/conftest.py +++ b/tests/mock_vws/model_target_web_api/requests/contract/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_model_target_mock_vuforia: object, + verify_model_target_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_model_target_mock_vuforia diff --git a/tests/mock_vws/query/conftest.py b/tests/mock_vws/query/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/query/conftest.py +++ b/tests/mock_vws/query/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/reco_counts_report/conftest.py b/tests/mock_vws/reco_counts_report/conftest.py index af867e276..c72c907a4 100644 --- a/tests/mock_vws/reco_counts_report/conftest.py +++ b/tests/mock_vws/reco_counts_report/conftest.py @@ -28,7 +28,7 @@ def fixture_fresh_database( @pytest.fixture(autouse=True) def fixture_verify_backend( *, - mock_only_vuforia: object, + mock_only_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del mock_only_vuforia diff --git a/tests/mock_vws/requests_mock/payloads/conftest.py b/tests/mock_vws/requests_mock/payloads/conftest.py index 74e58df27..73958c2e2 100644 --- a/tests/mock_vws/requests_mock/payloads/conftest.py +++ b/tests/mock_vws/requests_mock/payloads/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - mock_only_vuforia: object, + mock_only_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del mock_only_vuforia diff --git a/tests/mock_vws/target_list/conftest.py b/tests/mock_vws/target_list/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/target_list/conftest.py +++ b/tests/mock_vws/target_list/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/target_summary/contract/conftest.py b/tests/mock_vws/target_summary/contract/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/target_summary/contract/conftest.py +++ b/tests/mock_vws/target_summary/contract/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/unexpected_json/conftest.py b/tests/mock_vws/unexpected_json/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/unexpected_json/conftest.py +++ b/tests/mock_vws/unexpected_json/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/update_target/conftest.py b/tests/mock_vws/update_target/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/update_target/conftest.py +++ b/tests/mock_vws/update_target/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/vumark_generation_api/contract/conftest.py b/tests/mock_vws/vumark_generation_api/contract/conftest.py index 09779ff8c..d409c8ebf 100644 --- a/tests/mock_vws/vumark_generation_api/contract/conftest.py +++ b/tests/mock_vws/vumark_generation_api/contract/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - verify_mock_vuforia: object, + verify_mock_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del verify_mock_vuforia diff --git a/tests/mock_vws/vumark_generation_api/mock_only/conftest.py b/tests/mock_vws/vumark_generation_api/mock_only/conftest.py index 74e58df27..73958c2e2 100644 --- a/tests/mock_vws/vumark_generation_api/mock_only/conftest.py +++ b/tests/mock_vws/vumark_generation_api/mock_only/conftest.py @@ -6,7 +6,7 @@ @pytest.fixture(autouse=True) def fixture_verify_backend( *, - mock_only_vuforia: object, + mock_only_vuforia: None, ) -> None: """Set up the backend for every contract test in this directory.""" del mock_only_vuforia