first commit
This commit is contained in:
32
tests/test_2026_holidays.py
Normal file
32
tests/test_2026_holidays.py
Normal file
@@ -0,0 +1,32 @@
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 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 holidays
|
||||
|
||||
def test_2026_holidays():
|
||||
"""Test načtení svátků pro rok 2026."""
|
||||
print("Načítám svátky pro rok 2026...")
|
||||
|
||||
# Načteme všechny svátky
|
||||
all_holidays = holidays.load_holidays()
|
||||
|
||||
# Zkontrolujeme, zda obsahují data pro rok 2026
|
||||
if "2026" in all_holidays:
|
||||
print(f"Svátky pro rok 2026: {all_holidays['2026']}")
|
||||
print(f"Počet svátků v roce 2026: {len(all_holidays['2026'])}")
|
||||
|
||||
# Otestujeme konkrétní svátek - Nový rok
|
||||
is_new_year_holiday = holidays.is_holiday("01.01.2026")
|
||||
print(f"1.1.2026 je svátek: {is_new_year_holiday}")
|
||||
|
||||
# Otestujeme, zda je 15.1.2026 svátek
|
||||
is_jan15_holiday = holidays.is_holiday("15.01.2026")
|
||||
print(f"15.1.2026 je svátek: {is_jan15_holiday}")
|
||||
else:
|
||||
print("Data pro rok 2026 nebyla nalezena.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_2026_holidays()
|
||||
64
tests/test_auto_yearly_download.py
Normal file
64
tests/test_auto_yearly_download.py
Normal file
@@ -0,0 +1,64 @@
|
||||
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_finder
|
||||
import database
|
||||
import data_fetcher
|
||||
|
||||
def test_auto_yearly_download():
|
||||
"""Test: Automatické stažení ročních dat, pokud data pro daný rok neexistují."""
|
||||
print("Test: Automatické stažení ročních dat, pokud data pro daný rok neexistují...")
|
||||
|
||||
# Inicializujeme databázi
|
||||
database.init_db()
|
||||
|
||||
# Zkontrolujeme, zda databáze obsahuje data pro rok 2019
|
||||
year = 2019
|
||||
has_data = rate_finder.check_year_data_in_db(year)
|
||||
|
||||
if has_data:
|
||||
print(f"Varování: Databáze již obsahuje data pro rok {year}. Pro test je třeba databázi vyčistit.")
|
||||
# Pro účely testu odstraníme data pro rok 2019
|
||||
conn = sqlite3.connect(database.DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM exchange_rates WHERE strftime(\'%Y\', date) = ?', (str(year),))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
print(f"Data pro rok {year} byla odstraněna z databáze.")
|
||||
# Znovu zkontrolujeme
|
||||
has_data = rate_finder.check_year_data_in_db(year)
|
||||
|
||||
if not has_data:
|
||||
print(f"Databáze neobsahuje data pro rok {year}, jak očekáváno.")
|
||||
|
||||
# Zkusíme vyhledat kurz pro datum 18.08.2019
|
||||
test_date = "18.08.2019"
|
||||
test_currency = "USD"
|
||||
print(f"Vyhledávám kurz pro {test_currency} na datum {test_date}...")
|
||||
rate = rate_finder.get_rate_for_date(test_date, test_currency)
|
||||
|
||||
# Po vyhledání by měla být data pro rok 2019 v databázi
|
||||
has_data_after = rate_finder.check_year_data_in_db(year)
|
||||
if has_data_after:
|
||||
print(f"Test: Automatické stažení ročních dat pro rok {year} - OK")
|
||||
if rate:
|
||||
print(f"Kurz {test_currency} na datum {test_date} (nebo nejbližší pracovní den): {rate}")
|
||||
else:
|
||||
print(f"Kurz {test_currency} na datum {test_date} nebyl nalezen.")
|
||||
else:
|
||||
print(f"Test selhal: Data pro rok {year} nebyla automaticky stažena.")
|
||||
else:
|
||||
print(f"Test nelze provést, protože databáze již obsahuje data pro rok {year}.")
|
||||
|
||||
def run_all_tests():
|
||||
"""Spustí všechny testy."""
|
||||
print("Spouštím testy automatického stahování ročních dat...")
|
||||
test_auto_yearly_download()
|
||||
print("\nTesty automatického stahování ročních dat dokončeny!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_all_tests()
|
||||
201
tests/test_data_consistency.py
Normal file
201
tests/test_data_consistency.py
Normal file
@@ -0,0 +1,201 @@
|
||||
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()
|
||||
31
tests/test_data_fetcher.py
Normal file
31
tests/test_data_fetcher.py
Normal file
@@ -0,0 +1,31 @@
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 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
|
||||
|
||||
def test_download_yearly_data():
|
||||
"""Test stahování ročních dat pro rok 2020."""
|
||||
print("Spouštím test stahování ročních dat pro rok 2020...")
|
||||
# Ujistěme se, že adresář data existuje
|
||||
os.makedirs("data", exist_ok=True)
|
||||
|
||||
# Volání funkce pro stažení dat
|
||||
file_path = data_fetcher.download_yearly_data(2020, output_dir="data")
|
||||
|
||||
# Ověření výsledku
|
||||
if file_path and os.path.exists(file_path):
|
||||
print(f"Test úspěšný: Data byla stažena a uložena do {file_path}")
|
||||
|
||||
# Zkontrolujme, zda soubor není prázdný
|
||||
if os.path.getsize(file_path) > 0:
|
||||
print("Test úspěšný: Soubor není prázdný.")
|
||||
else:
|
||||
print("Test selhal: Soubor je prázdný.")
|
||||
else:
|
||||
print("Test selhal: Nepodařilo se stáhnout data.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_download_yearly_data()
|
||||
40
tests/test_holidays.py
Normal file
40
tests/test_holidays.py
Normal file
@@ -0,0 +1,40 @@
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 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 holidays
|
||||
|
||||
def test_holidays():
|
||||
"""Test funkcionality modulu holidays.py."""
|
||||
print("Načítám státní svátky...")
|
||||
holiday_data = holidays.load_holidays()
|
||||
assert "2025" in holiday_data, "Data pro rok 2025 nebyla nalezena"
|
||||
print("Test načtení svátků: OK")
|
||||
|
||||
# Test, zda 1. ledna 2025 je svátek
|
||||
assert holidays.is_holiday("01.01.2025"), "1. ledna 2025 by měl být svátek"
|
||||
print("Test svátku 1.1.2025: OK")
|
||||
|
||||
# Test, zda 15. ledna 2025 není svátek
|
||||
assert not holidays.is_holiday("15.01.2025"), "15. ledna 2025 by neměl být svátek"
|
||||
print("Test nesvátku 15.1.2025: OK")
|
||||
|
||||
# Test víkendu
|
||||
assert holidays.is_weekend("04.01.2025"), "4. ledna 2025 je sobota"
|
||||
print("Test víkendu 4.1.2025 (sobota): OK")
|
||||
|
||||
assert not holidays.is_weekend("06.01.2025"), "6. ledna 2025 je pondělí"
|
||||
print("Test pracovního dne 6.1.2025: OK")
|
||||
|
||||
# Test předchozího pracovního dne
|
||||
# 1. ledna 2025 je svátek (středa), předchozí pracovní den by měl být 31.12.2024 (úterý)
|
||||
prev_workday = holidays.get_previous_working_day("01.01.2025")
|
||||
assert prev_workday == "31.12.2024", f"Očekáváno 31.12.2024, ale vráceno {prev_workday}"
|
||||
print("Test předchozího pracovního dne před 1.1.2025: OK")
|
||||
|
||||
print("\nVšechny testy modulu holidays.py byly úspěšné!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_holidays()
|
||||
23
tests/test_holidays_path.py
Normal file
23
tests/test_holidays_path.py
Normal file
@@ -0,0 +1,23 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Add src to path to import holidays module
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))
|
||||
|
||||
import holidays
|
||||
|
||||
def test_paths():
|
||||
print("Current working directory:", os.getcwd())
|
||||
print("Script directory:", os.path.dirname(__file__))
|
||||
|
||||
# Print the HOLIDAYS_FILE constant from holidays module
|
||||
print(f"HOLIDAYS_FILE constant: {holidays.HOLIDAYS_FILE}")
|
||||
print(f"File exists: {os.path.exists(holidays.HOLIDAYS_FILE)}")
|
||||
|
||||
# Try to load holidays
|
||||
print("\nTrying to load holidays...")
|
||||
holidays_data = holidays.load_holidays()
|
||||
print(f"Loaded holidays data for {len(holidays_data)} years")
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_paths()
|
||||
104
tests/test_rate_calculation.py
Normal file
104
tests/test_rate_calculation.py
Normal file
@@ -0,0 +1,104 @@
|
||||
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()
|
||||
69
tests/test_rate_finder.py
Normal file
69
tests/test_rate_finder.py
Normal file
@@ -0,0 +1,69 @@
|
||||
import sys
|
||||
import os
|
||||
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_finder
|
||||
import database
|
||||
import holidays
|
||||
|
||||
def test_future_date():
|
||||
"""Test vyhledání kurzu pro budoucí datum."""
|
||||
print("Test: Vyhledání kurzu pro budoucí datum...")
|
||||
future_date = "01.01.2030"
|
||||
rate = rate_finder.get_rate_for_date(future_date, "USD")
|
||||
assert rate is None, "Mělo by vrátit None pro budoucí datum"
|
||||
print("Test pro budoucí datum: OK")
|
||||
|
||||
def test_today_before_1430():
|
||||
"""Test vyhledání kurzu pro dnešní datum před 14:30."""
|
||||
print("Test: Vyhledání kurzu pro dnešní datum před 14:30...")
|
||||
# Pro tento test předpokládáme, že čas je před 14:30
|
||||
# Tento test může být složitější na automatizaci, protože závisí na aktuálním čase
|
||||
# Pro jednoduchost jej provedeme pouze pokud je to relevantní
|
||||
today = datetime.now()
|
||||
if today.time() < datetime.strptime("14:30", "%H:%M").time():
|
||||
today_str = today.strftime("%d.%m.%Y")
|
||||
rate = rate_finder.get_rate_for_date(today_str, "USD")
|
||||
assert rate is None, "Mělo by vrátit None pro dnešní datum před 14:30"
|
||||
print("Test pro dnešní datum před 14:30: OK")
|
||||
else:
|
||||
print("Test pro dnešní datum před 14:30: Přeskočeno (čas je po 14:30)")
|
||||
|
||||
def test_weekend_with_previous_workday():
|
||||
"""Test vyhledání kurzu pro víkend s předchozím pracovním dnem."""
|
||||
print("Test: Vyhledání kurzu pro víkend...")
|
||||
# 11.08.2025 je pondělí, 10.08.2025 je neděle
|
||||
# Otestujeme, zda pro neděli vrátí kurz z pondělí
|
||||
|
||||
# Nejprve vložíme testovací kurz pro pondělí
|
||||
database.init_db()
|
||||
database.insert_rate("11.08.2025", "TEST", 1, 25.0)
|
||||
|
||||
rate = rate_finder.get_rate_for_date("10.08.2025", "TEST")
|
||||
# Očekáváme, že vrátí kurz z 11.08.2025, ale protože logika hledá zpět,
|
||||
# měl by najít kurz z předchozího pracovního dne, který je 08.08.2025 (pátek)
|
||||
# Nicméně v naší testovací databázi máme jen kurz z 11.08.2025
|
||||
# Takže tento test by měl selhat, pokud není správně implementována logika.
|
||||
# Pro správný test bychom museli mít data v databázi.
|
||||
# Upravíme test tak, že vložíme kurz pro 08.08.2025 a otestujeme proti němu.
|
||||
|
||||
# Vložíme kurz pro 08.08.2025
|
||||
database.insert_rate("08.08.2025", "TEST", 1, 24.5)
|
||||
# 10.08.2025 je neděle, předchozí pracovní den je 08.08.2025
|
||||
rate = rate_finder.get_rate_for_date("10.08.2025", "TEST")
|
||||
assert rate == 24.5, f"Očekáváno 24.5, ale vráceno {rate}"
|
||||
print("Test pro víkend: OK")
|
||||
|
||||
def run_all_tests():
|
||||
"""Spustí všechny testy."""
|
||||
print("Spouštím testy modulu rate_finder.py...")
|
||||
test_future_date()
|
||||
test_today_before_1430()
|
||||
test_weekend_with_previous_workday()
|
||||
print("\nVšechny testy modulu rate_finder.py byly úspěšné!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_all_tests()
|
||||
91
tests/test_rate_reporter.py
Normal file
91
tests/test_rate_reporter.py
Normal file
@@ -0,0 +1,91 @@
|
||||
import sys
|
||||
import os
|
||||
|
||||
# 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
|
||||
|
||||
def test_yearly_report():
|
||||
"""Test: Generování ročního reportu."""
|
||||
print("Test: Generování ročního reportu...")
|
||||
|
||||
# Inicializujeme databázi
|
||||
database.init_db()
|
||||
|
||||
# Vygenerujeme report pro rok 2020 a měnu USD
|
||||
filepath = rate_reporter.generate_yearly_report(2020, "USD", output_dir="data")
|
||||
|
||||
if filepath and os.path.exists(filepath):
|
||||
print(f"Roční report byl úspěšně vygenerován: {filepath}")
|
||||
# Zkontrolujeme, zda soubor není prázdný
|
||||
if os.path.getsize(filepath) > 0:
|
||||
print("Roční report není prázdný.")
|
||||
# Zobrazíme prvních několik řádků souboru
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
print("Prvních 5 řádků reportu:")
|
||||
for line in lines[:5]:
|
||||
print(f" {line.strip()}")
|
||||
else:
|
||||
print("Varování: Roční report je prázdný.")
|
||||
else:
|
||||
print("Test selhal: Roční report nebyl vygenerován.")
|
||||
|
||||
def test_monthly_report():
|
||||
"""Test: Generování měsíčního reportu."""
|
||||
print("\nTest: Generování měsíčního reportu...")
|
||||
|
||||
# Vygenerujeme report pro červenec 2020 a měnu USD
|
||||
filepath = rate_reporter.generate_monthly_report(2020, 7, "USD", output_dir="data")
|
||||
|
||||
if filepath and os.path.exists(filepath):
|
||||
print(f"Měsíční report byl úspěšně vygenerován: {filepath}")
|
||||
# Zkontrolujeme, zda soubor není prázdný
|
||||
if os.path.getsize(filepath) > 0:
|
||||
print("Měsíční report není prázdný.")
|
||||
# Zobrazíme prvních několik řádků souboru
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
print("Prvních 5 řádků reportu:")
|
||||
for line in lines[:5]:
|
||||
print(f" {line.strip()}")
|
||||
else:
|
||||
print("Varování: Měsíční report je prázdný.")
|
||||
else:
|
||||
print("Test selhal: Měsíční report nebyl vygenerován.")
|
||||
|
||||
def test_period_report():
|
||||
"""Test: Generování reportu za období."""
|
||||
print("\nTest: Generování reportu za období...")
|
||||
|
||||
# Vygenerujeme report pro období 1.7.2020 - 31.7.2020 a měnu USD
|
||||
filepath = rate_reporter.generate_period_report("01.07.2020", "31.07.2020", "USD", output_dir="data")
|
||||
|
||||
if filepath and os.path.exists(filepath):
|
||||
print(f"Report za období byl úspěšně vygenerován: {filepath}")
|
||||
# Zkontrolujeme, zda soubor není prázdný
|
||||
if os.path.getsize(filepath) > 0:
|
||||
print("Report za období není prázdný.")
|
||||
# Zobrazíme prvních několik řádků souboru
|
||||
with open(filepath, 'r', encoding='utf-8') as f:
|
||||
lines = f.readlines()
|
||||
print("Prvních 5 řádků reportu:")
|
||||
for line in lines[:5]:
|
||||
print(f" {line.strip()}")
|
||||
else:
|
||||
print("Varování: Report za období je prázdný.")
|
||||
else:
|
||||
print("Test selhal: Report za období nebyl vygenerován.")
|
||||
|
||||
def run_all_tests():
|
||||
"""Spustí všechny testy."""
|
||||
print("Spouštím testy generování reportů o kurzech...")
|
||||
test_yearly_report()
|
||||
test_monthly_report()
|
||||
test_period_report()
|
||||
print("\nTesty generování reportů o kurzech dokončeny!")
|
||||
|
||||
if __name__ == "__main__":
|
||||
run_all_tests()
|
||||
Reference in New Issue
Block a user