from __future__ import annotations

from pathlib import Path

from jarvis_finance.imports.dry_run import dry_run_csv
from jarvis_finance.imports.row_hash import compute_row_hash


def test_row_hash_is_stable() -> None:
    assert compute_row_hash({"b": "2", "a": "1"}) == compute_row_hash({"a": "1", "b": "2"})


def test_csv_dry_run_valid_file(tmp_path: Path) -> None:
    path = tmp_path / "accounts.csv"
    path.write_text("platform_name,platform_type,account_name,account_type,currency\nDemo,broker,Demo Depot,brokerage,CHF\n")
    result = dry_run_csv(path, {"platform_name", "platform_type", "account_name", "account_type", "currency"})
    assert result.rows_total == 1
    assert result.rows_failed == 0
    assert len(result.row_hashes) == 1


def test_csv_duplicate_row_hash_blocked(tmp_path: Path) -> None:
    path = tmp_path / "accounts.csv"
    path.write_text("platform_name,platform_type,account_name,account_type,currency\nDemo,broker,Demo Depot,brokerage,CHF\nDemo,broker,Demo Depot,brokerage,CHF\n")
    result = dry_run_csv(path, {"platform_name", "platform_type", "account_name", "account_type", "currency"})
    assert result.rows_failed == 1
    assert "Duplicate row hash" in result.errors[0]
