import sys import os import sqlite3 from datetime import datetime # 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) # Zkontrolujeme, co je ve skutečnosti v databázi print("\nObsah databáze pro měnu TEST:") conn = sqlite3.connect(database.DB_PATH) cursor = conn.cursor() cursor.execute("SELECT * FROM exchange_rates WHERE currency_code = 'TEST'") rows = cursor.fetchall() for row in rows: print(f" {row}") conn.close() # 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("\nTest 1: Sobota 2.1.2021 (víkend po svátku)") # Zkontrolujeme, zda je 2.1.2021 víkend is_weekend = holidays.is_weekend("02.01.2021") print(f" Je 02.01.2021 víkend? {is_weekend}") # Zkontrolujeme, zda je 1.1.2021 svátek is_holiday = holidays.is_holiday("01.01.2021") print(f" Je 01.01.2021 svátek? {is_holiday}") # Zkontrolujeme, jaký předchozí pracovní den vrátí funkce prev_workday = holidays.get_previous_working_day("02.01.2021") print(f" Předchozí pracovní den před 02.01.2021: {prev_workday}") # Zkontrolujeme kurz pro 1.1.2021 rate_01_01 = database.get_rate("01.01.2021", "TEST") print(f" Kurz pro 01.01.2021: {rate_01_01}") # Zkontrolujeme kurz pro 31.12.2020 rate_31_12 = database.get_rate("31.12.2020", "TEST") print(f" Kurz pro 31.12.2020: {rate_31_12}") 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("\nTest 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ř. 5.1.2021 - středa bez kurzu) # Podle pravidel ČNB by měla být použita hodnota z posledního pracovního dne s kurzem před ním (04.01.2021) print("\nTest 3: Běžný den bez kurzu (05.01.2021)") # Zkontrolujeme kurz pro 04.01.2021 rate_04_01 = database.get_rate("04.01.2021", "TEST") print(f" Kurz pro 04.01.2021: {rate_04_01}") rate = rate_reporter.get_rate_for_date_with_fallback("05.01.2021", "TEST") expected_rate = 21.259 # Kurz z 04.01.2021 (poslední pracovní den s kurzem 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("\nTest 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}") def run_all_tests(): """Spustí všechny testy.""" print("Spouštím testy dopočítávání kurzů...") test_rate_calculation() print("\nTesty dopočítávání kurzů dokončeny!") if __name__ == "__main__": run_all_tests()