Files
cnb_exchange_rates/tests/test_rate_calculation.py
Kadu 38ec0969e1 feat: Add --debug switch and minimize normal output
- Added --debug switch to CLI to show detailed diagnostic information
- In normal mode, --get-rate now outputs only the rate value without additional messages
- All diagnostic messages are now hidden in normal mode and shown only with --debug
- Updated all modules to support debug mode with debug_print() function
- Fixed rate calculation logic to properly handle weekends and holidays according to CNB rules
- For weekends/holidays, uses rate from last working day before them
- For regular days without rates, searches backwards for working day with rate
- Maintains backward compatibility with existing functionality
- Added comprehensive tests for rate calculation with weekends/holidays
- All modules now respect the debug mode setting
- Rate calculation correctly implements CNB rules for tax purposes
2025-08-19 23:59:27 +02:00

70 lines
3.0 KiB
Python

import sys
import os
import sqlite3
# Přidání adresáře src do sys.path, aby bylo možné importovat moduly
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))
import rate_reporter
import database
import holidays
def test_rate_calculation():
"""Test: Správné dopočítání kurzů pro víkendy a svátky."""
print("Test: Správné dopočítání kurzů pro víkendy a svátky...")
# Inicializujeme databázi
database.init_db()
# Vložíme testovací data
# Pátek 1.1.2021 - svátek, kurz 21.387
database.insert_rate("01.01.2021", "TEST", 1, 21.387)
# Čtvrtek 31.12.2020 - pracovní den, kurz 21.380
database.insert_rate("31.12.2020", "TEST", 1, 21.380)
# Pondělí 4.1.2021 - pracovní den, kurz 21.259
database.insert_rate("04.01.2021", "TEST", 1, 21.259)
# Test 1: Sobota 2.1.2021 (víkend po svátku)
# Měla by být použita hodnota z pátku 1.1.2021 (poslední den s kurzem před víkendem/svátkem)
print("Test 1: Sobota 2.1.2021 (víkend po svátku)")
rate = rate_reporter.get_rate_for_date_with_fallback("02.01.2021", "TEST")
expected_rate = 21.387
if rate == expected_rate:
print(f" OK: Kurz pro 02.01.2021 je {rate} (očekáváno {expected_rate})")
else:
print(f" CHYBA: Kurz pro 02.01.2021 je {rate}, očekáváno {expected_rate}")
# Test 2: Neděle 3.1.2021 (víkend po svátku)
# Měla by být použita hodnota z pátku 1.1.2021
print("Test 2: Neděle 3.1.2021 (víkend po svátku)")
rate = rate_reporter.get_rate_for_date_with_fallback("03.01.2021", "TEST")
expected_rate = 21.387
if rate == expected_rate:
print(f" OK: Kurz pro 03.01.2021 je {rate} (očekáváno {expected_rate})")
else:
print(f" CHYBA: Kurz pro 03.01.2021 je {rate}, očekáváno {expected_rate}")
# Test 3: Běžný den bez kurzu (např. 05.01.2021 - středa bez kurzu)
# Měla by být použita hodnota z posledního pracovního dne před ním (04.01.2021)
print("Test 3: Běžný den bez kurzu (05.01.2021)")
rate = rate_reporter.get_rate_for_date_with_fallback("05.01.2021", "TEST")
expected_rate = 21.259 # Kurz z 04.01.2021 (pondělí před 05.01.2021)
if rate == expected_rate:
print(f" OK: Kurz pro 05.01.2021 je {rate} (očekáváno {expected_rate})")
else:
print(f" CHYBA: Kurz pro 05.01.2021 je {rate}, očekáváno {expected_rate}")
# Test 4: Pracovní den s kurzem (04.01.2021)
# Měl by být použit jeho vlastní kurz
print("Test 4: Pracovní den s kurzem (04.01.2021)")
rate = rate_reporter.get_rate_for_date_with_fallback("04.01.2021", "TEST")
expected_rate = 21.259
if rate == expected_rate:
print(f" OK: Kurz pro 04.01.2021 je {rate} (očekáváno {expected_rate})")
else:
print(f" CHYBA: Kurz pro 04.01.2021 je {rate}, očekáváno {expected_rate}")
print("\nTesty dopočítávání kurzů dokončeny!")
if __name__ == "__main__":
test_rate_calculation()