Refactor test cases for improved readability and consistency
- Updated test functions in various test files to enhance code clarity by formatting long lines and improving indentation. - Adjusted assertions to use multi-line formatting for better readability. - Added new test cases for theme settings API to ensure proper functionality. - Ensured consistent use of line breaks and spacing across test files for uniformity.
This commit is contained in:
@@ -4,6 +4,7 @@ import time
|
||||
from typing import Dict, Generator
|
||||
|
||||
import pytest
|
||||
|
||||
# type: ignore[import]
|
||||
from playwright.sync_api import Browser, Page, Playwright, sync_playwright
|
||||
|
||||
@@ -70,10 +71,17 @@ def seed_default_currencies(live_server: str) -> None:
|
||||
|
||||
seeds = [
|
||||
{"code": "EUR", "name": "Euro", "symbol": "EUR", "is_active": True},
|
||||
{"code": "CLP", "name": "Chilean Peso", "symbol": "CLP$", "is_active": True},
|
||||
{
|
||||
"code": "CLP",
|
||||
"name": "Chilean Peso",
|
||||
"symbol": "CLP$",
|
||||
"is_active": True,
|
||||
},
|
||||
]
|
||||
|
||||
with httpx.Client(base_url=live_server, timeout=5.0, trust_env=False) as client:
|
||||
with httpx.Client(
|
||||
base_url=live_server, timeout=5.0, trust_env=False
|
||||
) as client:
|
||||
try:
|
||||
response = client.get("/api/currencies/?include_inactive=true")
|
||||
response.raise_for_status()
|
||||
@@ -128,8 +136,12 @@ def page(browser: Browser, live_server: str) -> Generator[Page, None, None]:
|
||||
def _prepare_database_environment(env: Dict[str, str]) -> Dict[str, str]:
|
||||
"""Ensure granular database env vars are available for the app under test."""
|
||||
|
||||
required = ("DATABASE_HOST", "DATABASE_USER",
|
||||
"DATABASE_NAME", "DATABASE_PASSWORD")
|
||||
required = (
|
||||
"DATABASE_HOST",
|
||||
"DATABASE_USER",
|
||||
"DATABASE_NAME",
|
||||
"DATABASE_PASSWORD",
|
||||
)
|
||||
if all(env.get(key) for key in required):
|
||||
return env
|
||||
|
||||
|
||||
@@ -7,7 +7,9 @@ def test_consumption_form_loads(page: Page):
|
||||
"""Verify the consumption form page loads correctly."""
|
||||
page.goto("/ui/consumption")
|
||||
expect(page).to_have_title("Consumption · CalMiner")
|
||||
expect(page.locator("h2:has-text('Add Consumption Record')")).to_be_visible()
|
||||
expect(
|
||||
page.locator("h2:has-text('Add Consumption Record')")
|
||||
).to_be_visible()
|
||||
|
||||
|
||||
def test_create_consumption_item(page: Page):
|
||||
|
||||
@@ -55,7 +55,9 @@ def test_create_capex_and_opex_items(page: Page):
|
||||
).to_be_visible()
|
||||
|
||||
# Verify the feedback messages.
|
||||
expect(page.locator("#capex-feedback")
|
||||
).to_have_text("Entry saved successfully.")
|
||||
expect(page.locator("#opex-feedback")
|
||||
).to_have_text("Entry saved successfully.")
|
||||
expect(page.locator("#capex-feedback")).to_have_text(
|
||||
"Entry saved successfully."
|
||||
)
|
||||
expect(page.locator("#opex-feedback")).to_have_text(
|
||||
"Entry saved successfully."
|
||||
)
|
||||
|
||||
@@ -12,7 +12,8 @@ def _unique_currency_code(existing: set[str]) -> str:
|
||||
if candidate not in existing and candidate != "USD":
|
||||
return candidate
|
||||
raise AssertionError(
|
||||
"Unable to generate a unique currency code for the test run.")
|
||||
"Unable to generate a unique currency code for the test run."
|
||||
)
|
||||
|
||||
|
||||
def _metric_value(page: Page, element_id: str) -> int:
|
||||
@@ -42,8 +43,9 @@ def test_currency_workflow_create_update_toggle(page: Page) -> None:
|
||||
expect(page.locator("h2:has-text('Currency Overview')")).to_be_visible()
|
||||
|
||||
code_cells = page.locator("#currencies-table-body tr td:nth-child(1)")
|
||||
existing_codes = {text.strip().upper()
|
||||
for text in code_cells.all_inner_texts()}
|
||||
existing_codes = {
|
||||
text.strip().upper() for text in code_cells.all_inner_texts()
|
||||
}
|
||||
|
||||
total_before = _metric_value(page, "currency-metric-total")
|
||||
active_before = _metric_value(page, "currency-metric-active")
|
||||
@@ -109,7 +111,9 @@ def test_currency_workflow_create_update_toggle(page: Page) -> None:
|
||||
toggle_button = row.locator("button[data-action='toggle']")
|
||||
expect(toggle_button).to_have_text("Activate")
|
||||
|
||||
with page.expect_response(f"**/api/currencies/{new_code}/activation") as toggle_info:
|
||||
with page.expect_response(
|
||||
f"**/api/currencies/{new_code}/activation"
|
||||
) as toggle_info:
|
||||
toggle_button.click()
|
||||
toggle_response = toggle_info.value
|
||||
assert toggle_response.status == 200
|
||||
@@ -126,5 +130,6 @@ def test_currency_workflow_create_update_toggle(page: Page) -> None:
|
||||
_expect_feedback(page, f"Currency {new_code} activated.")
|
||||
|
||||
expect(row.locator("td").nth(3)).to_contain_text("Active")
|
||||
expect(row.locator("button[data-action='toggle']")
|
||||
).to_have_text("Deactivate")
|
||||
expect(row.locator("button[data-action='toggle']")).to_have_text(
|
||||
"Deactivate"
|
||||
)
|
||||
|
||||
@@ -38,11 +38,8 @@ def test_create_equipment_item(page: Page):
|
||||
# Verify the new item appears in the table.
|
||||
page.select_option("#equipment-scenario-filter", label=scenario_name)
|
||||
expect(
|
||||
page.locator("#equipment-table-body tr").filter(
|
||||
has_text=equipment_name
|
||||
)
|
||||
page.locator("#equipment-table-body tr").filter(has_text=equipment_name)
|
||||
).to_be_visible()
|
||||
|
||||
# Verify the feedback message.
|
||||
expect(page.locator("#equipment-feedback")
|
||||
).to_have_text("Equipment saved.")
|
||||
expect(page.locator("#equipment-feedback")).to_have_text("Equipment saved.")
|
||||
|
||||
@@ -53,5 +53,6 @@ def test_create_maintenance_item(page: Page):
|
||||
).to_be_visible()
|
||||
|
||||
# Verify the feedback message.
|
||||
expect(page.locator("#maintenance-feedback")
|
||||
).to_have_text("Maintenance entry saved.")
|
||||
expect(page.locator("#maintenance-feedback")).to_have_text(
|
||||
"Maintenance entry saved."
|
||||
)
|
||||
|
||||
@@ -43,5 +43,6 @@ def test_create_production_item(page: Page):
|
||||
).to_be_visible()
|
||||
|
||||
# Verify the feedback message.
|
||||
expect(page.locator("#production-feedback")
|
||||
).to_have_text("Production output saved.")
|
||||
expect(page.locator("#production-feedback")).to_have_text(
|
||||
"Production output saved."
|
||||
)
|
||||
|
||||
@@ -39,4 +39,5 @@ def test_create_new_scenario(page: Page):
|
||||
feedback = page.locator("#feedback")
|
||||
expect(feedback).to_be_visible()
|
||||
expect(feedback).to_have_text(
|
||||
f'Scenario "{scenario_name}" created successfully.')
|
||||
f'Scenario "{scenario_name}" created successfully.'
|
||||
)
|
||||
|
||||
@@ -5,7 +5,11 @@ from playwright.sync_api import Page, expect
|
||||
UI_ROUTES = [
|
||||
("/", "Dashboard · CalMiner", "Operations Overview"),
|
||||
("/ui/dashboard", "Dashboard · CalMiner", "Operations Overview"),
|
||||
("/ui/scenarios", "Scenario Management · CalMiner", "Create a New Scenario"),
|
||||
(
|
||||
"/ui/scenarios",
|
||||
"Scenario Management · CalMiner",
|
||||
"Create a New Scenario",
|
||||
),
|
||||
("/ui/parameters", "Process Parameters · CalMiner", "Scenario Parameters"),
|
||||
("/ui/settings", "Settings · CalMiner", "Settings"),
|
||||
("/ui/costs", "Costs · CalMiner", "Cost Overview"),
|
||||
@@ -20,35 +24,44 @@ UI_ROUTES = [
|
||||
|
||||
|
||||
@pytest.mark.parametrize("url, title, heading", UI_ROUTES)
|
||||
def test_ui_pages_load_correctly(page: Page, url: str, title: str, heading: str):
|
||||
def test_ui_pages_load_correctly(
|
||||
page: Page, url: str, title: str, heading: str
|
||||
):
|
||||
"""Verify that all UI pages load with the correct title and a visible heading."""
|
||||
page.goto(url)
|
||||
expect(page).to_have_title(title)
|
||||
# The app uses a mix of h1 and h2 for main page headings.
|
||||
heading_locator = page.locator(
|
||||
f"h1:has-text('{heading}'), h2:has-text('{heading}')")
|
||||
f"h1:has-text('{heading}'), h2:has-text('{heading}')"
|
||||
)
|
||||
expect(heading_locator.first).to_be_visible()
|
||||
|
||||
|
||||
def test_settings_theme_form_interaction(page: Page):
|
||||
page.goto("/ui/settings")
|
||||
expect(page).to_have_title("Settings · CalMiner")
|
||||
page.goto("/theme-settings")
|
||||
expect(page).to_have_title("Theme Settings · CalMiner")
|
||||
|
||||
env_rows = page.locator("#theme-env-overrides tbody tr")
|
||||
disabled_inputs = page.locator(
|
||||
"#theme-settings-form input.color-value-input[disabled]")
|
||||
"#theme-settings-form input.color-value-input[disabled]"
|
||||
)
|
||||
env_row_count = env_rows.count()
|
||||
disabled_count = disabled_inputs.count()
|
||||
assert disabled_count == env_row_count
|
||||
|
||||
color_input = page.locator(
|
||||
"#theme-settings-form input[name='--color-primary']")
|
||||
"#theme-settings-form input[name='--color-primary']"
|
||||
)
|
||||
expect(color_input).to_be_visible()
|
||||
expect(color_input).to_be_enabled()
|
||||
|
||||
original_value = color_input.input_value()
|
||||
candidate_values = ("#114455", "#225566")
|
||||
new_value = candidate_values[0] if original_value != candidate_values[0] else candidate_values[1]
|
||||
new_value = (
|
||||
candidate_values[0]
|
||||
if original_value != candidate_values[0]
|
||||
else candidate_values[1]
|
||||
)
|
||||
|
||||
color_input.fill(new_value)
|
||||
page.click("#theme-settings-form button[type='submit']")
|
||||
|
||||
Reference in New Issue
Block a user