70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
# tests/test_calculation.py
|
|
import pytest
|
|
|
|
from pages.dev_page import DevPage
|
|
from pages.navigation import Navigation
|
|
from pages.calculation_page import CalculationPage
|
|
from pages.results_page import ResultsPage
|
|
|
|
|
|
class TestCalculation:
|
|
"""Testklasse für Berechnungslogik"""
|
|
|
|
def test_calculation_workflow(self, driver, wait, base_url, test_data):
|
|
"""
|
|
Haupttest: Führt einen kompletten Berechnungsdurchlauf durch
|
|
Wird automatisch für jede Excel-Datei parametrisiert
|
|
"""
|
|
|
|
login_page = DevPage(driver, wait)
|
|
login_page.dev_login(base_url, user_name="John")
|
|
|
|
|
|
# Setup assistant
|
|
nav = Navigation(driver, wait)
|
|
assistant = nav.start_calculation(base_url)
|
|
assistant.search_part_numbers(test_data["input"])
|
|
assistant.delete_preselected_suppliers()
|
|
assistant.select_supplier(test_data["input"])
|
|
assistant.create_calculation(test_data["input"])
|
|
|
|
# Fill calculation page
|
|
calc_page = CalculationPage(driver, wait)
|
|
calc_page.fill_form(test_data["input"])
|
|
|
|
for destination in test_data["input"]["DESTINATION"].values():
|
|
calc_page.add_destination(destination)
|
|
calc_page.fill_destination(destination)
|
|
|
|
# Ergebnisse lesen
|
|
results_page = ResultsPage(driver, wait)
|
|
actual_results = results_page.read_results()
|
|
|
|
# Assertions: Vergleich mit erwarteten Werten aus "out" Sheet
|
|
expected = test_data["expected"]
|
|
|
|
for field_name, expected_value in expected.items():
|
|
actual_value = actual_results.get(field_name)
|
|
|
|
# Numerische Werte mit Toleranz vergleichen
|
|
if self._is_numeric(expected_value):
|
|
expected_num = float(expected_value)
|
|
actual_num = float(actual_value.replace("€", "").replace(",", ".").strip())
|
|
|
|
assert pytest.approx(expected_num, rel=0.01) == actual_num, \
|
|
f"Feld '{field_name}': Erwartet {expected_num}, erhalten {actual_num}"
|
|
else:
|
|
# String-Vergleich
|
|
assert str(actual_value).strip() == str(expected_value).strip(), \
|
|
f"Feld '{field_name}': Erwartet '{expected_value}', erhalten '{actual_value}'"
|
|
|
|
print(f"✓ Test erfolgreich für {test_data['filename']}")
|
|
|
|
@staticmethod
|
|
def _is_numeric(value):
|
|
"""Prüft ob Wert numerisch ist"""
|
|
try:
|
|
float(str(value).replace(",", "."))
|
|
return True
|
|
except (ValueError, AttributeError):
|
|
return False
|