import os import pytest from app import app as flask_app @pytest.fixture def client(): flask_app.config['TESTING'] = True with flask_app.test_client() as client: yield client def test_homepage(client): resp = client.get('/') assert resp.status_code == 200 assert b'Elpatrons Datumsrechner' in resp.data def test_tage_berechnung(client): resp = client.post('/', data={ 'action': 'tage_werktage', 'start1': '2024-01-01', 'end1': '2024-01-10' }) assert resp.status_code == 200 assert b'Anzahl der Tage' in resp.data assert b'9' in resp.data def test_xss_protection(client): # Versuche ein Skript einzuschleusen xss = '' resp = client.post('/', data={ 'action': 'tage_werktage', 'start1': xss, 'end1': '2024-01-10' }) assert resp.status_code == 200 # Das Skript darf nicht im HTML erscheinen assert b'' not in resp.data # Es sollte eine Fehlermeldung erscheinen html = resp.data.decode('utf-8') assert 'Ungültige Eingabe' in html def test_stats_login_required(client): resp = client.get('/stats') assert resp.status_code == 200 assert b'Dashboard Login' in resp.data def test_werktage_berechnung(client): from numpy import busday_count from datetime import date, timedelta start = '2024-01-01' end = '2024-03-01' expected = busday_count(date.fromisoformat(start), date.fromisoformat(end) + timedelta(days=1)) resp = client.post('/', data={ 'action': 'tage_werktage', 'start1': start, 'end1': end, 'werktage': 'on' }) assert resp.status_code == 200 assert b'Anzahl der Werktage' in resp.data assert f': {expected}'.encode() in resp.data