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