feat: Enhance currency handling and validation across scenarios

- Updated form template to prefill currency input with default value and added help text for clarity.
- Modified integration tests to assert more descriptive error messages for invalid currency codes.
- Introduced new tests for currency normalization and validation in various scenarios, including imports and exports.
- Added comprehensive tests for pricing calculations, ensuring defaults are respected and overrides function correctly.
- Implemented unit tests for pricing settings repository, ensuring CRUD operations and default settings are handled properly.
- Enhanced scenario pricing evaluation tests to validate currency handling and metadata defaults.
- Added simulation tests to ensure Monte Carlo runs are accurate and handle various distribution scenarios.
This commit is contained in:
2025-11-11 18:29:59 +01:00
parent 032e6d2681
commit 795a9f99f4
50 changed files with 5110 additions and 81 deletions

42
tests/test_currency.py Normal file
View File

@@ -0,0 +1,42 @@
from __future__ import annotations
import pytest
from services.currency import CurrencyValidationError, normalise_currency, require_currency
@pytest.mark.parametrize(
"raw,expected",
[
("usd", "USD"),
(" Eur ", "EUR"),
("JPY", "JPY"),
(None, None),
],
)
def test_normalise_currency_valid_inputs(raw: str | None, expected: str | None) -> None:
assert normalise_currency(raw) == expected
@pytest.mark.parametrize("raw", ["usd1", "us", "", "12", "X Y Z"])
def test_normalise_currency_invalid_inputs(raw: str) -> None:
with pytest.raises(CurrencyValidationError):
normalise_currency(raw)
def test_require_currency_with_value() -> None:
assert require_currency("gbp", default="usd") == "GBP"
def test_require_currency_with_default() -> None:
assert require_currency(None, default="cad") == "CAD"
def test_require_currency_missing_default() -> None:
with pytest.raises(CurrencyValidationError):
require_currency(None)
def test_require_currency_invalid_default() -> None:
with pytest.raises(CurrencyValidationError):
require_currency(None, default="invalid")