import sys import os import csv from datetime import datetime, timedelta # 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 data_fetcher import holidays def create_test_csv(filename, dates): """ Vytvoří testovací CSV soubor s danými daty. :param filename: Jméno souboru. :param dates: Seznam dat ve formátu DD.MM.YYYY. """ with open(filename, 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) # Hlavička writer.writerow(["Datum", "1_USD", "1_EUR"]) # Data for date in dates: writer.writerow([date, "25.0", "28.0"]) def test_consistency_with_all_required_dates(): """Test: Všechny požadované pracovní dny jsou v souboru.""" print("Test: Všechny požadované pracovní dny jsou v souboru...") # Vytvoříme testovací soubor test_file = "data/test_2025_consistent.csv" os.makedirs("data", exist_ok=True) # Definujeme testovací data - poslední 3 pracovní dny v srpnu 2025 # Předpokládáme, že 19.8.2025 je úterý test_dates = [ "18.08.2025", # Pondělí "15.08.2025", # Pátek "14.08.2025" # Čtvrtek ] create_test_csv(test_file, test_dates) # Upravíme funkci check_yearly_data_consistency pro testování s jiným souborem # Pro jednoduchost testu zkopírujeme logiku a upravíme ji try: with open(test_file, 'r', encoding='utf-8') as csvfile: reader = csv.reader(csvfile) lines = list(reader) except IOError as e: print(f"Chyba při čtení souboru {test_file}: {e}") return False if len(lines) < 2: print(f"Soubor {test_file} je prázdný nebo obsahuje pouze hlavičku.") return False # Získáme seznam dat z CSV (první sloupec) dates_in_file = [] for line in lines[1:]: # Přeskočíme hlavičku if line and line[0]: # Zkontrolujeme, že řádek a první sloupec nejsou prázdné dates_in_file.append(line[0]) # Pro test předpokládáme, že kontrolujeme rok 2025 year = 2025 # Zkontrolujeme poslední 3 pracovní dny today = datetime(2025, 8, 19) # Simulujeme datum 19.8.2025 checked_dates = [] # Projdeme posledních 7 dní (pro jistotu) a vybereme 3 pracovní dny current_date = today - timedelta(days=1) # Začneme včerejškem days_checked = 0 while len(checked_dates) < 3 and days_checked < 7: date_str = current_date.strftime("%d.%m.%Y") # Zkontrolujeme, zda je to pracovní den (není víkend ani svátek) if not holidays.is_weekend(date_str) and not holidays.is_holiday(date_str): # Zkontrolujeme, zda je rok správný try: date_obj = datetime.strptime(date_str, "%d.%m.%Y") if date_obj.year == year: checked_dates.append(date_str) except ValueError: pass current_date -= timedelta(days=1) days_checked += 1 # Zkontrolujeme, zda všechny pracovní dny jsou v souboru missing_dates = [] for date_str in checked_dates: if date_str not in dates_in_file: missing_dates.append(date_str) # Vyčistíme testovací soubor if os.path.exists(test_file): os.remove(test_file) if missing_dates: print(f"Test selhal: Chybí záznamy pro následující pracovní dny: {', '.join(missing_dates)}") return False else: print("Test: Všechny požadované pracovní dny jsou v souboru - OK") return True def test_consistency_with_missing_dates(): """Test: Některé požadované pracovní dny chybí v souboru.""" print("Test: Některé požadované pracovní dny chybí v souboru...") # Vytvoříme testovací soubor test_file = "data/test_2025_inconsistent.csv" os.makedirs("data", exist_ok=True) # Definujeme testovací data - chybí 18.08.2025 test_dates = [ "15.08.2025", # Pátek "14.08.2025" # Čtvrtek ] create_test_csv(test_file, test_dates) # Upravíme funkci check_yearly_data_consistency pro testování s jiným souborem # Pro jednoduchost testu zkopírujeme logiku a upravíme ji try: with open(test_file, 'r', encoding='utf-8') as csvfile: reader = csv.reader(csvfile) lines = list(reader) except IOError as e: print(f"Chyba při čtení souboru {test_file}: {e}") return False if len(lines) < 2: print(f"Soubor {test_file} je prázdný nebo obsahuje pouze hlavičku.") return False # Získáme seznam dat z CSV (první sloupec) dates_in_file = [] for line in lines[1:]: # Přeskočíme hlavičku if line and line[0]: # Zkontrolujeme, že řádek a první sloupec nejsou prázdné dates_in_file.append(line[0]) # Pro test předpokládáme, že kontrolujeme rok 2025 year = 2025 # Zkontrolujeme poslední 3 pracovní dny today = datetime(2025, 8, 19) # Simulujeme datum 19.8.2025 checked_dates = [] # Projdeme posledních 7 dní (pro jistotu) a vybereme 3 pracovní dny current_date = today - timedelta(days=1) # Začneme včerejškem days_checked = 0 while len(checked_dates) < 3 and days_checked < 7: date_str = current_date.strftime("%d.%m.%Y") # Zkontrolujeme, zda je to pracovní den (není víkend ani svátek) if not holidays.is_weekend(date_str) and not holidays.is_holiday(date_str): # Zkontrolujeme, zda je rok správný try: date_obj = datetime.strptime(date_str, "%d.%m.%Y") if date_obj.year == year: checked_dates.append(date_str) except ValueError: pass current_date -= timedelta(days=1) days_checked += 1 # Zkontrolujeme, zda všechny pracovní dny jsou v souboru missing_dates = [] for date_str in checked_dates: if date_str not in dates_in_file: missing_dates.append(date_str) # Vyčistíme testovací soubor if os.path.exists(test_file): os.remove(test_file) if missing_dates: print(f"Test: Některé požadované pracovní dny chybí v souboru - OK (chybí: {', '.join(missing_dates)})") return True else: print("Test selhal: Všechny pracovní dny jsou v souboru, ale očekávali jsme chybějící") return False def run_all_tests(): """Spustí všechny testy.""" print("Spouštím testy kontroly konzistence ročních dat...") test1_result = test_consistency_with_all_required_dates() test2_result = test_consistency_with_missing_dates() if test1_result and test2_result: print("\nVšechny testy kontroly konzistence ročních dat byly úspěšné!") else: print("\nNěkteré testy kontroly konzistence ročních dat selhaly!") if __name__ == "__main__": run_all_tests()