from uuid import uuid4 from playwright.sync_api import Page, expect def test_costs_form_loads(page: Page): """Verify the costs form page loads correctly.""" page.goto("/ui/costs") expect(page).to_have_title("Costs ยท CalMiner") expect(page.locator("h2:has-text('Add CAPEX Entry')")).to_be_visible() def test_create_capex_and_opex_items(page: Page): """Test creating new CAPEX and OPEX items through the UI.""" # First, create a scenario to associate the costs with. page.goto("/ui/scenarios") scenario_name = f"Cost Test Scenario {uuid4()}" page.fill("input[name='name']", scenario_name) page.click("button[type='submit']") with page.expect_response("**/api/scenarios/"): pass # Wait for the scenario to be created # Now, navigate to the costs page and add CAPEX and OPEX items. page.goto("/ui/costs") # Create a CAPEX item. capex_desc = "Initial drilling equipment" page.select_option("#capex-form-scenario", label=scenario_name) page.fill("#capex-form-description", capex_desc) page.fill("#capex-form-amount", "150000") page.click("#capex-form button[type='submit']") with page.expect_response("**/api/costs/capex") as response_info: pass assert response_info.value.status == 200 # Create an OPEX item. opex_desc = "Monthly fuel costs" page.select_option("#opex-form-scenario", label=scenario_name) page.fill("#opex-form-description", opex_desc) page.fill("#opex-form-amount", "25000") page.click("#opex-form button[type='submit']") with page.expect_response("**/api/costs/opex") as response_info: pass assert response_info.value.status == 200 # Verify the new items appear in their respective tables. page.select_option("#costs-scenario-filter", label=scenario_name) expect( page.locator("#capex-table-body tr").filter(has_text=capex_desc) ).to_be_visible() expect( page.locator("#opex-table-body tr").filter(has_text=opex_desc) ).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.")