From 9e654abdb31675be5d66af7c5e20cdb3e57eecaa Mon Sep 17 00:00:00 2001 From: grdddj Date: Tue, 8 Feb 2022 16:37:34 +0100 Subject: [PATCH] feat(tests): prepare UI testing for T1 --- tests/conftest.py | 6 ++++-- tests/ui_tests/__init__.py | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index bb2c86e60..c60713517 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -15,7 +15,7 @@ # If not, see . import os -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Generator import pytest @@ -62,7 +62,9 @@ def _raw_client(request: pytest.FixtureRequest) -> Client: @pytest.fixture(scope="function") -def client(request: pytest.FixtureRequest, _raw_client: Client) -> Client: +def client( + request: pytest.FixtureRequest, _raw_client: Client +) -> Generator[Client, None, None]: """Client fixture. Every test function that requires a client instance will get it from here. diff --git a/tests/ui_tests/__init__.py b/tests/ui_tests/__init__.py index 20a758212..c7f593d8c 100644 --- a/tests/ui_tests/__init__.py +++ b/tests/ui_tests/__init__.py @@ -22,6 +22,10 @@ FILE_HASHES: Dict[str, str] = {} ACTUAL_HASHES: Dict[str, str] = {} PROCESSED: Set[str] = set() +# T1/TT, to be set in screen_recording(), as we do not know it beforehand +# TODO: it is not the cleanest, we could create a class out of this file +MODEL = "" + def get_test_name(node_id: str) -> str: # Test item name is usually function name, but when parametrization is used, @@ -103,6 +107,13 @@ def screen_recording( ) -> Generator[None, None, None]: test_ui = request.config.getoption("ui") test_name = get_test_name(request.node.nodeid) + + # Differentiating test names between T1 and TT + # Making the model global for other functions + global MODEL + MODEL = f"T{client.features.model}" + test_name = f"{MODEL}_{test_name}" + screens_test_path = SCREENS_DIR / test_name if test_ui == "record": @@ -133,7 +144,11 @@ def screen_recording( def list_missing() -> Set[str]: - return set(FILE_HASHES.keys()) - PROCESSED + # Only listing the ones for the current model + relevant_cases = { + case for case in FILE_HASHES.keys() if case.startswith(f"{MODEL}_") + } + return relevant_cases - PROCESSED def read_fixtures() -> None: @@ -153,7 +168,12 @@ def write_fixtures_suggestion(remove_missing: bool) -> None: def _get_fixtures_content(fixtures: Dict[str, str], remove_missing: bool) -> str: if remove_missing: - fixtures = {i: fixtures[i] for i in PROCESSED} + # Not removing the ones for different model + nonrelevant_cases = { + f: h for f, h in FILE_HASHES.items() if not f.startswith(f"{MODEL}_") + } + processed_fixtures = {i: fixtures[i] for i in PROCESSED} + fixtures = {**nonrelevant_cases, **processed_fixtures} else: fixtures = fixtures