from pathlib import Path import sqlite3 from jarca_ledger_mcp.db import init_db from jarca_ledger_mcp.application.monthly_settlement_service import list_monthly_settlement_overview def test_monthly_overview_excludes_transaction_only_months(tmp_path: Path): db = tmp_path / "fixture.sqlite3" init_db(str(db)) with sqlite3.connect(db) as conn: conn.execute( "INSERT INTO transactions(id,transaction_date,type,amount,created_at,updated_at) VALUES (?,?,?,?,?,?)", ("tx-1", "2026-09-03", "income", 100, "2026-09-03T00:00:00Z", "2026-09-03T00:00:00Z"), ) conn.commit() result = list_monthly_settlement_overview(db_path=str(db)) assert result["success"] assert result["months"] == [] def test_monthly_overview_keeps_existing_parent_and_joins_live_transaction_totals(tmp_path: Path): db = tmp_path / "fixture.sqlite3" init_db(str(db)) with sqlite3.connect(db) as conn: conn.execute( "INSERT INTO monthly_settlement(id,month,basis_date,status,version,created_by,created_at,updated_by,updated_at) VALUES (?,?,?,?,?,?,?,?,?)", ("settlement-1", "2026-09", "2026-09-30", "draft", 1, "test", "now", "test", "now"), ) conn.execute( "INSERT INTO transactions(id,transaction_date,type,amount,created_at,updated_at) VALUES (?,?,?,?,?,?)", ("tx-1", "2026-09-03", "income", 100, "2026-09-03T00:00:00Z", "2026-09-03T00:00:00Z"), ) conn.commit() result = list_monthly_settlement_overview(db_path=str(db)) assert result["success"] assert len(result["months"]) == 1 row = result["months"][0] assert row["month"] == "2026-09" assert row["settlement_id"] == "settlement-1" assert row["income"] == 100 assert row["net_cashflow_display"] is None assert row["net_worth_display"] is None def test_monthly_overview_keeps_parent_without_transactions(tmp_path: Path): db = tmp_path / "fixture.sqlite3" init_db(str(db)) with sqlite3.connect(db) as conn: conn.execute( "INSERT INTO monthly_settlement(id,month,basis_date,status,version,created_by,created_at,updated_by,updated_at) VALUES (?,?,?,?,?,?,?,?,?)", ("settlement-1", "2026-09", "2026-09-30", "draft", 1, "test", "now", "test", "now"), ) conn.commit() row = list_monthly_settlement_overview(db_path=str(db))["months"][0] assert row["settlement_id"] == "settlement-1" assert row["income"] == 0 assert row["expense"] == 0