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
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
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'))
|
||||
@@ -25,35 +24,9 @@ def test_rate_calculation():
|
||||
# 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}")
|
||||
|
||||
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:
|
||||
@@ -63,7 +36,7 @@ def test_rate_calculation():
|
||||
|
||||
# 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)")
|
||||
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:
|
||||
@@ -71,14 +44,11 @@ def test_rate_calculation():
|
||||
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}")
|
||||
# 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 (poslední pracovní den s kurzem před 05.01.2021)
|
||||
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:
|
||||
@@ -86,19 +56,15 @@ def test_rate_calculation():
|
||||
|
||||
# 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)")
|
||||
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}")
|
||||
|
||||
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()
|
||||
test_rate_calculation()
|
||||
Reference in New Issue
Block a user