From 4bdd0d50e3e974722c6dd27fd06a098a16285152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Ko=C5=82odzi=C5=84ski?= Date: Wed, 21 Jan 2026 16:00:44 +0100 Subject: [PATCH 1/6] chore: added more tests --- .gitignore | 4 + Makefile | 5 + ...config.yml => e2e_test_config.template.yml | 3 + poetry.lock | 17 +- pyproject.toml | 1 + tests/basic/test_left_panel_translations.py | 207 ++++++++++++++++++ translations/en/LC_MESSAGES/messages.po | 56 +++++ translations/pl/LC_MESSAGES/messages.po | 56 +++++ 8 files changed, 348 insertions(+), 1 deletion(-) rename e2e_test_config.yml => e2e_test_config.template.yml (70%) create mode 100644 tests/basic/test_left_panel_translations.py create mode 100644 translations/en/LC_MESSAGES/messages.po create mode 100644 translations/pl/LC_MESSAGES/messages.po diff --git a/.gitignore b/.gitignore index 54353fb..24d5735 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ node_modules .idea .env +e2e_test_config.yml e2e_test_data.json e2e_stress_test_data.json cypress/results/ @@ -14,3 +15,6 @@ __pycache__/ .pytest_cache/ .ruff_cache/ +# Compiled translation files (generated from .po files) +translations/**/messages.mo + diff --git a/Makefile b/Makefile index 6183dcd..fef1252 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,8 @@ pytest-run: setup-test-data: cp e2e_test_data_template.json e2e_test_data.json + sed 's|__E2E_TESTS_DIR__|$(CURDIR)|g' e2e_test_config.template.yml > e2e_test_config.yml + $(MAKE) compile-translations e2e-tests: $(MAKE) pytest-run PYTEST_SPEC="tests/basic" @@ -31,3 +33,6 @@ e2e-stress-tests: run-e2e-env: poetry --project '$(GOODMAP_PATH)' run flask --app "goodmap.goodmap:create_app(config_path='$(CONFIG_PATH)')" --debug run +compile-translations: + poetry run pybabel compile -d translations + diff --git a/e2e_test_config.yml b/e2e_test_config.template.yml similarity index 70% rename from e2e_test_config.yml rename to e2e_test_config.template.yml index 3a0223b..6a917d5 100644 --- a/e2e_test_config.yml +++ b/e2e_test_config.template.yml @@ -2,6 +2,9 @@ APP_NAME: Bridges in Wroclaw SECRET_KEY: SECRET BLOG_PREFIX: "/blog" USE_WWW: False +# Note: __E2E_TESTS_DIR__ is replaced by `make setup-test-data` with the absolute path +# This is needed because Flask-Babel resolves relative paths to app.root_path (platzky dir) +TRANSLATION_DIRECTORIES: [__E2E_TESTS_DIR__/translations] DB: TYPE: json_file PATH: e2e_test_data.json diff --git a/poetry.lock b/poetry.lock index 742ad4c..bddb532 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,20 @@ # This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. +[[package]] +name = "babel" +version = "2.17.0" +description = "Internationalization utilities" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, + {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, +] + +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] + [[package]] name = "black" version = "24.10.0" @@ -716,4 +731,4 @@ zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [metadata] lock-version = "2.1" python-versions = "^3.10" -content-hash = "0b0f139ac8d3b5375c9af108818f1a0c0a5c33dd692a870de220ed338364b882" +content-hash = "02ffaa8718759b8fe447a9cbd40fa719f91118429e710f4039ef652e63d2c145" diff --git a/pyproject.toml b/pyproject.toml index 39eb03e..82695e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,6 +16,7 @@ playwright = "^1.49.1" pytest-xdist = "^3.6.1" # For parallel test execution ruff = "^0.8.4" # Linting and formatting black = "^24.10.0" # Code formatting +babel = "^2.17.0" # For compiling translation files [tool.pytest.ini_options] testpaths = ["tests"] diff --git a/tests/basic/test_left_panel_translations.py b/tests/basic/test_left_panel_translations.py new file mode 100644 index 0000000..1151e5f --- /dev/null +++ b/tests/basic/test_left_panel_translations.py @@ -0,0 +1,207 @@ +""" +Test suite for left panel field translations. + +Tests that category names, filter options, and help texts in the left panel +are properly translated when switching languages. +""" + +import pytest +from playwright.sync_api import Page, expect + +from tests.conftest import BASE_URL + +# Expected translations for left panel fields +TRANSLATIONS = { + "en": { + "category_names": { + "accessible_by": "accessible by", + "type_of_place": "type of place", + }, + "filter_options": { + "bikes": "bikes", + "cars": "cars", + "pedestrians": "pedestrians", + "big bridge": "big bridge", + "small bridge": "small bridge", + }, + "help_texts": { + "categories_help_accessible_by": "Who can use this bridge", + "categories_options_help_small bridge": "A smaller pedestrian or bike bridge", + }, + }, + "pl": { + "category_names": { + "accessible_by": "dostępny dla", + "type_of_place": "typ miejsca", + }, + "filter_options": { + "bikes": "rowery", + "cars": "samochody", + "pedestrians": "piesi", + "big bridge": "duży most", + "small bridge": "mały most", + }, + "help_texts": { + "categories_help_accessible_by": "Kto może korzystać z tego mostu", + "categories_options_help_small bridge": "Mniejszy most dla pieszych lub rowerzystów", + }, + }, +} + + +def get_language_button(page: Page): + """Get language switch button using ID selector.""" + return page.locator("#languages-menu") + + +def switch_to_language(page: Page, lang_name: str): + """Switch to a specific language by clicking the language menu.""" + get_language_button(page).click() + page.get_by_role("link", name=lang_name).click() + page.wait_for_load_state("domcontentloaded") + + +class TestLeftPanelTranslationsEnglish: + """Test suite for left panel translations in English (default language)""" + + @pytest.fixture(autouse=True) + def setup(self, page: Page): + """Navigate to home page and wait for filter form to load""" + page.set_viewport_size({"width": 1200, "height": 800}) + page.goto(BASE_URL, wait_until="domcontentloaded") + page.wait_for_selector("#filter-form", timeout=10000) + + def test_category_names_in_english(self, page: Page): + """Verify category names are displayed in English""" + panel = page.locator("#left-panel") + panel_text = panel.inner_text().lower() + + for key, expected in TRANSLATIONS["en"]["category_names"].items(): + assert ( + expected.lower() in panel_text + ), f"Expected '{expected}' (translation of '{key}') in left panel" + + def test_filter_options_in_english(self, page: Page): + """Verify filter options are displayed in English""" + panel = page.locator("#left-panel") + panel_text = panel.inner_text().lower() + + for key, expected in TRANSLATIONS["en"]["filter_options"].items(): + assert ( + expected.lower() in panel_text + ), f"Expected '{expected}' (translation of '{key}') in left panel" + + +class TestLeftPanelTranslationsPolish: + """Test suite for left panel translations in Polish""" + + @pytest.fixture(autouse=True) + def setup(self, page: Page): + """Navigate to home page, switch to Polish, and wait for filter form""" + page.set_viewport_size({"width": 1200, "height": 800}) + page.goto(BASE_URL, wait_until="domcontentloaded") + switch_to_language(page, "polski") + page.wait_for_selector("#filter-form", timeout=10000) + + def test_category_names_in_polish(self, page: Page): + """Verify category names are displayed in Polish""" + panel = page.locator("#left-panel") + panel_text = panel.inner_text().lower() + + for key, expected in TRANSLATIONS["pl"]["category_names"].items(): + assert ( + expected.lower() in panel_text + ), f"Expected '{expected}' (Polish translation of '{key}') in left panel" + + def test_filter_options_in_polish(self, page: Page): + """Verify filter options are displayed in Polish""" + panel = page.locator("#left-panel") + panel_text = panel.inner_text().lower() + + for key, expected in TRANSLATIONS["pl"]["filter_options"].items(): + assert ( + expected.lower() in panel_text + ), f"Expected '{expected}' (Polish translation of '{key}') in left panel" + + +class TestLeftPanelTranslationSwitching: + """Test suite for switching languages and verifying translations update""" + + def test_switch_from_english_to_polish_updates_category_names(self, page: Page): + """Verify switching from English to Polish updates category names""" + page.set_viewport_size({"width": 1200, "height": 800}) + page.goto(BASE_URL, wait_until="domcontentloaded") + page.wait_for_selector("#filter-form", timeout=10000) + + # Verify English first + panel = page.locator("#left-panel") + panel_text = panel.inner_text().lower() + assert "accessible by" in panel_text, "Expected English 'accessible by'" + + # Switch to Polish + switch_to_language(page, "polski") + page.wait_for_selector("#filter-form", timeout=10000) + + # Verify Polish + panel = page.locator("#left-panel") + panel_text = panel.inner_text().lower() + assert "dostępny dla" in panel_text, "Expected Polish 'dostępny dla'" + + def test_switch_from_polish_to_english_updates_category_names(self, page: Page): + """Verify switching from Polish back to English restores English text""" + page.set_viewport_size({"width": 1200, "height": 800}) + page.goto(BASE_URL, wait_until="domcontentloaded") + + # Switch to Polish first + switch_to_language(page, "polski") + page.wait_for_selector("#filter-form", timeout=10000) + + panel = page.locator("#left-panel") + panel_text = panel.inner_text().lower() + assert "dostępny dla" in panel_text, "Expected Polish 'dostępny dla'" + + # Switch back to English + switch_to_language(page, "English") + page.wait_for_selector("#filter-form", timeout=10000) + + # Verify English restored + panel = page.locator("#left-panel") + panel_text = panel.inner_text().lower() + assert "accessible by" in panel_text, "Expected English 'accessible by' restored" + + +class TestLeftPanelHelpTextTranslations: + """Test suite for filter help text translations""" + + def test_help_tooltip_in_english(self, page: Page): + """Verify help tooltip shows English text""" + page.set_viewport_size({"width": 1200, "height": 800}) + page.goto(BASE_URL, wait_until="domcontentloaded") + page.wait_for_selector("#filter-form", timeout=10000) + + # Find and hover over a help icon + help_icon = page.get_by_label("Help: categories_options_help_small bridge") + if help_icon.count() > 0: + help_icon.first.hover() + tooltip = page.locator('[role="tooltip"]') + expect(tooltip).to_be_visible() + tooltip_text = tooltip.inner_text() + expected = TRANSLATIONS["en"]["help_texts"]["categories_options_help_small bridge"] + assert expected in tooltip_text, f"Expected '{expected}' in tooltip" + + def test_help_tooltip_in_polish(self, page: Page): + """Verify help tooltip shows Polish text after language switch""" + page.set_viewport_size({"width": 1200, "height": 800}) + page.goto(BASE_URL, wait_until="domcontentloaded") + switch_to_language(page, "polski") + page.wait_for_selector("#filter-form", timeout=10000) + + # Find and hover over a help icon + help_icon = page.get_by_label("Help: categories_options_help_small bridge") + if help_icon.count() > 0: + help_icon.first.hover() + tooltip = page.locator('[role="tooltip"]') + expect(tooltip).to_be_visible() + tooltip_text = tooltip.inner_text() + expected = TRANSLATIONS["pl"]["help_texts"]["categories_options_help_small bridge"] + assert expected in tooltip_text, f"Expected '{expected}' in tooltip" diff --git a/translations/en/LC_MESSAGES/messages.po b/translations/en/LC_MESSAGES/messages.po new file mode 100644 index 0000000..9ba5638 --- /dev/null +++ b/translations/en/LC_MESSAGES/messages.po @@ -0,0 +1,56 @@ +# English translations for E2E tests. +# This file contains test-specific translations for the "Bridges in Wroclaw" test data. +# +msgid "" +msgstr "" +"Project-Id-Version: goodmap-e2e-tests\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-01 00:00+0000\n" +"PO-Revision-Date: 2024-01-01 00:00+0000\n" +"Language: en\n" +"Language-Team: en \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +# Category names +msgid "accessible_by" +msgstr "accessible by" + +msgid "type_of_place" +msgstr "type of place" + +msgid "remark" +msgstr "remark" + +# Category values - accessible_by +msgid "bikes" +msgstr "bikes" + +msgid "cars" +msgstr "cars" + +msgid "pedestrians" +msgstr "pedestrians" + +# Category values - type_of_place +msgid "big bridge" +msgstr "big bridge" + +msgid "small bridge" +msgstr "small bridge" + +# Help texts - category headers +msgid "categories_help_accessible_by" +msgstr "Who can use this bridge" + +# Help texts - category options +msgid "categories_options_help_small bridge" +msgstr "A smaller pedestrian or bike bridge" + +msgid "categories_options_help_cars" +msgstr "Bridge allows car traffic" + +msgid "categories_options_help_pedestrians" +msgstr "Bridge allows pedestrian access" diff --git a/translations/pl/LC_MESSAGES/messages.po b/translations/pl/LC_MESSAGES/messages.po new file mode 100644 index 0000000..00ca1a4 --- /dev/null +++ b/translations/pl/LC_MESSAGES/messages.po @@ -0,0 +1,56 @@ +# Polish translations for E2E tests. +# This file contains test-specific translations for the "Bridges in Wroclaw" test data. +# +msgid "" +msgstr "" +"Project-Id-Version: goodmap-e2e-tests\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-01 00:00+0000\n" +"PO-Revision-Date: 2024-01-01 00:00+0000\n" +"Language: pl\n" +"Language-Team: pl \n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +# Category names +msgid "accessible_by" +msgstr "dostępny dla" + +msgid "type_of_place" +msgstr "typ miejsca" + +msgid "remark" +msgstr "uwaga" + +# Category values - accessible_by +msgid "bikes" +msgstr "rowery" + +msgid "cars" +msgstr "samochody" + +msgid "pedestrians" +msgstr "piesi" + +# Category values - type_of_place +msgid "big bridge" +msgstr "duży most" + +msgid "small bridge" +msgstr "mały most" + +# Help texts - category headers +msgid "categories_help_accessible_by" +msgstr "Kto może korzystać z tego mostu" + +# Help texts - category options +msgid "categories_options_help_small bridge" +msgstr "Mniejszy most dla pieszych lub rowerzystów" + +msgid "categories_options_help_cars" +msgstr "Most umożliwia ruch samochodowy" + +msgid "categories_options_help_pedestrians" +msgstr "Most umożliwia przejście pieszych" From 91eb009735e118a8c43ed6e1e996f3e6099dbc6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Ko=C5=82odzi=C5=84ski?= Date: Wed, 21 Jan 2026 20:36:32 +0100 Subject: [PATCH 2/6] all tests are passing --- tests/basic/test_left_panel.py | 7 ++++--- tests/basic/test_map.py | 6 +++--- tests/helpers.py | 7 ++++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/tests/basic/test_left_panel.py b/tests/basic/test_left_panel.py index 1db2178..65728f6 100644 --- a/tests/basic/test_left_panel.py +++ b/tests/basic/test_left_panel.py @@ -344,14 +344,15 @@ def test_small_bridge_filter_has_helper_tooltip(self, page: Page): page.wait_for_selector("#filter-form", timeout=10000) # Find and hover over the help icon for small bridge - help_icon = page.get_by_label("Help: categories_options_help_small bridge") + # Note: The label uses translated text from categories_options_help_small bridge + help_icon = page.get_by_label("Help: A smaller pedestrian or bike bridge") expect(help_icon).to_be_visible() help_icon.hover() - # Verify tooltip appears + # Verify tooltip appears with translated help text tooltip = page.locator('[role="tooltip"]') expect(tooltip).to_be_visible() - expect(tooltip).to_contain_text("categories_options_help_small bridge") + expect(tooltip).to_contain_text("A smaller pedestrian or bike bridge") class TestLeftPanelScrollbar: diff --git a/tests/basic/test_map.py b/tests/basic/test_map.py index a591e43..02f3b40 100644 --- a/tests/basic/test_map.py +++ b/tests/basic/test_map.py @@ -25,9 +25,9 @@ def test_displays_filter_list_with_two_categories_with_5_items(self, page: Page) checkboxes = page.get_by_role("checkbox") expect(checkboxes).to_have_count(5) - # Check that both category groups are present - expect(page.get_by_text("accessible_by")).to_be_visible() - expect(page.get_by_text("type_of_place")).to_be_visible() + # Check that both category groups are present (using translated names) + expect(page.get_by_text("accessible by")).to_be_visible() + expect(page.get_by_text("type of place")).to_be_visible() def test_should_not_have_scrollbars(self, page: Page): """Verify the page has no horizontal or vertical scrollbars""" diff --git a/tests/helpers.py b/tests/helpers.py index c96845b..640b24e 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -13,12 +13,13 @@ from playwright.sync_api import ElementHandle, Page, expect # Test data for Zwierzyniecka location +# Note: Category names are translated (e.g., "type_of_place" -> "type of place") EXPECTED_PLACE_ZWIERZYNIECKA = { "title": "Zwierzyniecka", "subtitle": "small bridge", "categories": [ - ["type_of_place", "small bridge"], - ["accessible_by", "bikes, pedestrians"], + ["type of place", "small bridge"], + ["accessible by", "bikes, pedestrians"], ], } @@ -84,7 +85,7 @@ def verify_popup_content(page: Page, expected_content: dict[str, Any]) -> None: verify_popup_content(page, { "title": "Bridge Name", "subtitle": "small bridge", - "categories": [["type_of_place", "small bridge"]], + "categories": [["type of place", "small bridge"]], "CTA": {"displayValue": "View on Map", "value": "https://..."} }) """ From b7c2969deff59ddc82a39157b558ae522780149f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Ko=C5=82odzi=C5=84ski?= Date: Sat, 24 Jan 2026 22:08:28 +0100 Subject: [PATCH 3/6] fixes after review --- tests/basic/test_left_panel_translations.py | 28 ++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/basic/test_left_panel_translations.py b/tests/basic/test_left_panel_translations.py index 1151e5f..6a44f0c 100644 --- a/tests/basic/test_left_panel_translations.py +++ b/tests/basic/test_left_panel_translations.py @@ -181,13 +181,13 @@ def test_help_tooltip_in_english(self, page: Page): # Find and hover over a help icon help_icon = page.get_by_label("Help: categories_options_help_small bridge") - if help_icon.count() > 0: - help_icon.first.hover() - tooltip = page.locator('[role="tooltip"]') - expect(tooltip).to_be_visible() - tooltip_text = tooltip.inner_text() - expected = TRANSLATIONS["en"]["help_texts"]["categories_options_help_small bridge"] - assert expected in tooltip_text, f"Expected '{expected}' in tooltip" + assert help_icon.count() > 0, "Help icon not found - UI may have changed" + help_icon.first.hover() + tooltip = page.locator('[role="tooltip"]') + expect(tooltip).to_be_visible() + tooltip_text = tooltip.inner_text() + expected = TRANSLATIONS["en"]["help_texts"]["categories_options_help_small bridge"] + assert expected in tooltip_text, f"Expected '{expected}' in tooltip" def test_help_tooltip_in_polish(self, page: Page): """Verify help tooltip shows Polish text after language switch""" @@ -198,10 +198,10 @@ def test_help_tooltip_in_polish(self, page: Page): # Find and hover over a help icon help_icon = page.get_by_label("Help: categories_options_help_small bridge") - if help_icon.count() > 0: - help_icon.first.hover() - tooltip = page.locator('[role="tooltip"]') - expect(tooltip).to_be_visible() - tooltip_text = tooltip.inner_text() - expected = TRANSLATIONS["pl"]["help_texts"]["categories_options_help_small bridge"] - assert expected in tooltip_text, f"Expected '{expected}' in tooltip" + assert help_icon.count() > 0, "Help icon not found - UI may have changed" + help_icon.first.hover() + tooltip = page.locator('[role="tooltip"]') + expect(tooltip).to_be_visible() + tooltip_text = tooltip.inner_text() + expected = TRANSLATIONS["pl"]["help_texts"]["categories_options_help_small bridge"] + assert expected in tooltip_text, f"Expected '{expected}' in tooltip" From 9fcf12a77198cac11b038b626475f4718eaa5180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Ko=C5=82odzi=C5=84ski?= Date: Sat, 24 Jan 2026 22:23:05 +0100 Subject: [PATCH 4/6] tests fixed --- tests/basic/test_left_panel_translations.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/basic/test_left_panel_translations.py b/tests/basic/test_left_panel_translations.py index 6a44f0c..fa0465c 100644 --- a/tests/basic/test_left_panel_translations.py +++ b/tests/basic/test_left_panel_translations.py @@ -179,14 +179,14 @@ def test_help_tooltip_in_english(self, page: Page): page.goto(BASE_URL, wait_until="domcontentloaded") page.wait_for_selector("#filter-form", timeout=10000) - # Find and hover over a help icon - help_icon = page.get_by_label("Help: categories_options_help_small bridge") + # Find and hover over a help icon (label is "Help: {translated_text}") + expected = TRANSLATIONS["en"]["help_texts"]["categories_options_help_small bridge"] + help_icon = page.get_by_label(f"Help: {expected}") assert help_icon.count() > 0, "Help icon not found - UI may have changed" help_icon.first.hover() tooltip = page.locator('[role="tooltip"]') expect(tooltip).to_be_visible() tooltip_text = tooltip.inner_text() - expected = TRANSLATIONS["en"]["help_texts"]["categories_options_help_small bridge"] assert expected in tooltip_text, f"Expected '{expected}' in tooltip" def test_help_tooltip_in_polish(self, page: Page): @@ -196,12 +196,12 @@ def test_help_tooltip_in_polish(self, page: Page): switch_to_language(page, "polski") page.wait_for_selector("#filter-form", timeout=10000) - # Find and hover over a help icon - help_icon = page.get_by_label("Help: categories_options_help_small bridge") + # Find and hover over a help icon (label is "Help: {translated_text}") + expected = TRANSLATIONS["pl"]["help_texts"]["categories_options_help_small bridge"] + help_icon = page.get_by_label(f"Help: {expected}") assert help_icon.count() > 0, "Help icon not found - UI may have changed" help_icon.first.hover() tooltip = page.locator('[role="tooltip"]') expect(tooltip).to_be_visible() tooltip_text = tooltip.inner_text() - expected = TRANSLATIONS["pl"]["help_texts"]["categories_options_help_small bridge"] assert expected in tooltip_text, f"Expected '{expected}' in tooltip" From f6be1ba0b38b0187e99c2d3938ff5cae0c190eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Ko=C5=82odzi=C5=84ski?= Date: Sat, 24 Jan 2026 22:28:47 +0100 Subject: [PATCH 5/6] fix after review --- tests/basic/test_left_panel_translations.py | 43 ++++++++------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/tests/basic/test_left_panel_translations.py b/tests/basic/test_left_panel_translations.py index fa0465c..e196ec3 100644 --- a/tests/basic/test_left_panel_translations.py +++ b/tests/basic/test_left_panel_translations.py @@ -101,7 +101,9 @@ def setup(self, page: Page): page.set_viewport_size({"width": 1200, "height": 800}) page.goto(BASE_URL, wait_until="domcontentloaded") switch_to_language(page, "polski") - page.wait_for_selector("#filter-form", timeout=10000) + # Use expect().to_contain_text() to auto-wait for translated content + panel = page.locator("#left-panel") + expect(panel).to_contain_text("dostępny dla", ignore_case=True, timeout=10000) def test_category_names_in_polish(self, page: Page): """Verify category names are displayed in Polish""" @@ -131,43 +133,28 @@ def test_switch_from_english_to_polish_updates_category_names(self, page: Page): """Verify switching from English to Polish updates category names""" page.set_viewport_size({"width": 1200, "height": 800}) page.goto(BASE_URL, wait_until="domcontentloaded") - page.wait_for_selector("#filter-form", timeout=10000) - - # Verify English first panel = page.locator("#left-panel") - panel_text = panel.inner_text().lower() - assert "accessible by" in panel_text, "Expected English 'accessible by'" - # Switch to Polish - switch_to_language(page, "polski") - page.wait_for_selector("#filter-form", timeout=10000) + # Verify English first (auto-wait for content) + expect(panel).to_contain_text("accessible by", ignore_case=True, timeout=10000) - # Verify Polish - panel = page.locator("#left-panel") - panel_text = panel.inner_text().lower() - assert "dostępny dla" in panel_text, "Expected Polish 'dostępny dla'" + # Switch to Polish and verify (auto-wait for translated content) + switch_to_language(page, "polski") + expect(panel).to_contain_text("dostępny dla", ignore_case=True, timeout=10000) def test_switch_from_polish_to_english_updates_category_names(self, page: Page): """Verify switching from Polish back to English restores English text""" page.set_viewport_size({"width": 1200, "height": 800}) page.goto(BASE_URL, wait_until="domcontentloaded") + panel = page.locator("#left-panel") - # Switch to Polish first + # Switch to Polish first and verify (auto-wait for translated content) switch_to_language(page, "polski") - page.wait_for_selector("#filter-form", timeout=10000) + expect(panel).to_contain_text("dostępny dla", ignore_case=True, timeout=10000) - panel = page.locator("#left-panel") - panel_text = panel.inner_text().lower() - assert "dostępny dla" in panel_text, "Expected Polish 'dostępny dla'" - - # Switch back to English + # Switch back to English and verify (auto-wait for translated content) switch_to_language(page, "English") - page.wait_for_selector("#filter-form", timeout=10000) - - # Verify English restored - panel = page.locator("#left-panel") - panel_text = panel.inner_text().lower() - assert "accessible by" in panel_text, "Expected English 'accessible by' restored" + expect(panel).to_contain_text("accessible by", ignore_case=True, timeout=10000) class TestLeftPanelHelpTextTranslations: @@ -194,7 +181,9 @@ def test_help_tooltip_in_polish(self, page: Page): page.set_viewport_size({"width": 1200, "height": 800}) page.goto(BASE_URL, wait_until="domcontentloaded") switch_to_language(page, "polski") - page.wait_for_selector("#filter-form", timeout=10000) + # Auto-wait for translated content before interacting with help icon + panel = page.locator("#left-panel") + expect(panel).to_contain_text("dostępny dla", ignore_case=True, timeout=10000) # Find and hover over a help icon (label is "Help: {translated_text}") expected = TRANSLATIONS["pl"]["help_texts"]["categories_options_help_small bridge"] From 7fb2e100b6287aa91c40035e3264c3cc690fa42c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Ko=C5=82odzi=C5=84ski?= Date: Sat, 24 Jan 2026 22:40:52 +0100 Subject: [PATCH 6/6] fixes after review --- tests/basic/test_left_panel_translations.py | 32 +++++++++------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/tests/basic/test_left_panel_translations.py b/tests/basic/test_left_panel_translations.py index e196ec3..32695b3 100644 --- a/tests/basic/test_left_panel_translations.py +++ b/tests/basic/test_left_panel_translations.py @@ -69,26 +69,24 @@ def setup(self, page: Page): """Navigate to home page and wait for filter form to load""" page.set_viewport_size({"width": 1200, "height": 800}) page.goto(BASE_URL, wait_until="domcontentloaded") - page.wait_for_selector("#filter-form", timeout=10000) + # Auto-wait for content to be fully loaded + panel = page.locator("#left-panel") + expect(panel).to_contain_text("accessible by", ignore_case=True, timeout=10000) def test_category_names_in_english(self, page: Page): """Verify category names are displayed in English""" panel = page.locator("#left-panel") - panel_text = panel.inner_text().lower() - for key, expected in TRANSLATIONS["en"]["category_names"].items(): - assert ( - expected.lower() in panel_text + expect(panel).to_contain_text( + expected, ignore_case=True ), f"Expected '{expected}' (translation of '{key}') in left panel" def test_filter_options_in_english(self, page: Page): """Verify filter options are displayed in English""" panel = page.locator("#left-panel") - panel_text = panel.inner_text().lower() - for key, expected in TRANSLATIONS["en"]["filter_options"].items(): - assert ( - expected.lower() in panel_text + expect(panel).to_contain_text( + expected, ignore_case=True ), f"Expected '{expected}' (translation of '{key}') in left panel" @@ -108,21 +106,17 @@ def setup(self, page: Page): def test_category_names_in_polish(self, page: Page): """Verify category names are displayed in Polish""" panel = page.locator("#left-panel") - panel_text = panel.inner_text().lower() - for key, expected in TRANSLATIONS["pl"]["category_names"].items(): - assert ( - expected.lower() in panel_text + expect(panel).to_contain_text( + expected, ignore_case=True ), f"Expected '{expected}' (Polish translation of '{key}') in left panel" def test_filter_options_in_polish(self, page: Page): """Verify filter options are displayed in Polish""" panel = page.locator("#left-panel") - panel_text = panel.inner_text().lower() - for key, expected in TRANSLATIONS["pl"]["filter_options"].items(): - assert ( - expected.lower() in panel_text + expect(panel).to_contain_text( + expected, ignore_case=True ), f"Expected '{expected}' (Polish translation of '{key}') in left panel" @@ -164,7 +158,9 @@ def test_help_tooltip_in_english(self, page: Page): """Verify help tooltip shows English text""" page.set_viewport_size({"width": 1200, "height": 800}) page.goto(BASE_URL, wait_until="domcontentloaded") - page.wait_for_selector("#filter-form", timeout=10000) + # Auto-wait for content to be fully loaded + panel = page.locator("#left-panel") + expect(panel).to_contain_text("accessible by", ignore_case=True, timeout=10000) # Find and hover over a help icon (label is "Help: {translated_text}") expected = TRANSLATIONS["en"]["help_texts"]["categories_options_help_small bridge"]