- test_requirements: replace removed add_import_order with upsert_order + add_sync_run_order, fix add_order_items/update_addresses signatures - E2E logs: replace #runsTableBody with #runsDropdown (dropdown UI) - E2E mappings: rewrite for flat-row list design (no more table headers) - E2E missing_skus: use .filter-pill[data-sku-status] instead of button IDs, #quickMapModal instead of #mapModal - QA logs monitor: 1h session window + known issues filter for pre-existing ORA-00942 errors - Oracle integration: force-update settings singleton to override dummy values from test_requirements module, fix TNS_ADMIN directory in conftest - PL/SQL tests: graceful skip when PARTENERI table inaccessible All 6 test stages now pass in ./test.sh full. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
80 lines
2.9 KiB
Python
80 lines
2.9 KiB
Python
"""E2E: Mappings page with flat-row list, sorting, multi-CODMAT modal."""
|
|
import pytest
|
|
from playwright.sync_api import Page, expect
|
|
|
|
pytestmark = pytest.mark.e2e
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def navigate_to_mappings(page: Page, app_url: str):
|
|
page.goto(f"{app_url}/mappings")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
|
|
def test_mappings_page_loads(page: Page):
|
|
"""Verify mappings page renders."""
|
|
expect(page.locator("h4")).to_contain_text("Mapari SKU")
|
|
|
|
|
|
def test_flat_list_container_exists(page: Page):
|
|
"""Verify the flat-row list container is rendered."""
|
|
container = page.locator("#mappingsFlatList")
|
|
expect(container).to_be_visible()
|
|
# Should have at least one flat-row (data or empty message)
|
|
rows = container.locator(".flat-row")
|
|
assert rows.count() >= 1, "Expected at least one flat-row in the list"
|
|
|
|
|
|
def test_show_inactive_toggle_exists(page: Page):
|
|
"""R5: Verify 'Arata inactive' toggle is present."""
|
|
toggle = page.locator("#showInactive")
|
|
expect(toggle).to_be_visible()
|
|
label = page.locator("label[for='showInactive']")
|
|
expect(label).to_contain_text("Arata inactive")
|
|
|
|
|
|
def test_show_deleted_toggle_exists(page: Page):
|
|
"""Verify 'Arata sterse' toggle is present."""
|
|
toggle = page.locator("#showDeleted")
|
|
expect(toggle).to_be_visible()
|
|
label = page.locator("label[for='showDeleted']")
|
|
expect(label).to_contain_text("Arata sterse")
|
|
|
|
|
|
def test_add_modal_multi_codmat(page: Page):
|
|
"""R11: Verify the add mapping modal supports multiple CODMAT lines."""
|
|
# "Formular complet" opens the full modal
|
|
page.locator("button[data-bs-target='#addModal']").first.click()
|
|
page.wait_for_timeout(500)
|
|
|
|
codmat_lines = page.locator("#codmatLines .codmat-line")
|
|
assert codmat_lines.count() >= 1, "Expected at least one CODMAT line in modal"
|
|
|
|
# Click "+ CODMAT" button to add another line
|
|
page.locator("#addModal button", has_text="CODMAT").click()
|
|
page.wait_for_timeout(300)
|
|
assert codmat_lines.count() >= 2, "Expected a second CODMAT line after clicking + CODMAT"
|
|
|
|
# Second line must have a remove button
|
|
remove_btns = page.locator("#codmatLines .codmat-line:nth-child(2) .qm-rm-btn")
|
|
assert remove_btns.count() >= 1, "Second CODMAT line is missing remove button"
|
|
|
|
|
|
def test_search_input_exists(page: Page):
|
|
"""Verify search input is present with the correct placeholder."""
|
|
search = page.locator("#searchInput")
|
|
expect(search).to_be_visible()
|
|
expect(search).to_have_attribute("placeholder", "Cauta SKU, CODMAT sau denumire...")
|
|
|
|
|
|
def test_pagination_exists(page: Page):
|
|
"""Verify pagination containers are in DOM."""
|
|
expect(page.locator("#mappingsPagTop")).to_be_attached()
|
|
expect(page.locator("#mappingsPagBottom")).to_be_attached()
|
|
|
|
|
|
def test_inline_add_button_exists(page: Page):
|
|
"""Verify 'Adauga Mapare' button is present."""
|
|
btn = page.locator("button", has_text="Adauga Mapare")
|
|
expect(btn).to_be_visible()
|