updated for reversed proxy
This commit is contained in:
+52
-31
@@ -1,9 +1,9 @@
|
||||
import tempfile
|
||||
|
||||
from app import create_app
|
||||
from fatima import create_app
|
||||
|
||||
|
||||
def client():
|
||||
def client(url_prefix="/fatima"):
|
||||
database = tempfile.NamedTemporaryFile(suffix=".sqlite")
|
||||
app = create_app({
|
||||
"TESTING": True,
|
||||
@@ -11,6 +11,7 @@ def client():
|
||||
"APP_USERNAME": "user",
|
||||
"APP_PASSWORD": "pass",
|
||||
"DATABASE": database.name,
|
||||
"URL_PREFIX": url_prefix,
|
||||
})
|
||||
test_client = app.test_client()
|
||||
test_client._database_file = database
|
||||
@@ -18,59 +19,79 @@ def client():
|
||||
|
||||
|
||||
def test_calendar_requires_login():
|
||||
response = client().get("/")
|
||||
response = client().get("/fatima/")
|
||||
assert response.status_code == 302
|
||||
assert response.headers["Location"].endswith("/login")
|
||||
assert response.headers["Location"].endswith("/fatima/login")
|
||||
|
||||
|
||||
def test_prefix_applies_to_generated_links_and_static_assets():
|
||||
test_client = client()
|
||||
test_client.post("/fatima/login", data={"username": "user", "password": "pass"})
|
||||
page = test_client.get("/fatima/")
|
||||
|
||||
assert b'href="/fatima/static/styles.css"' in page.data
|
||||
assert b'src="/fatima/static/calendar.js"' in page.data
|
||||
assert b'data-save-url="/fatima/api/choices"' in page.data
|
||||
assert test_client.get("/").status_code == 404
|
||||
|
||||
|
||||
def test_url_prefix_is_configurable_and_can_be_disabled():
|
||||
custom_client = client("/calendar")
|
||||
assert custom_client.get("/calendar/").headers["Location"].endswith("/calendar/login")
|
||||
assert custom_client.get("/fatima/").status_code == 404
|
||||
|
||||
root_client = client("")
|
||||
assert root_client.get("/").headers["Location"].endswith("/login")
|
||||
|
||||
|
||||
def test_login_and_logout():
|
||||
test_client = client()
|
||||
response = test_client.post("/login", data={"username": "user", "password": "pass"})
|
||||
response = test_client.post("/fatima/login", data={"username": "user", "password": "pass"})
|
||||
assert response.status_code == 302
|
||||
assert response.headers["Location"].endswith("/")
|
||||
assert test_client.get("/").status_code == 200
|
||||
assert test_client.post("/logout").headers["Location"].endswith("/login")
|
||||
assert response.headers["Location"].endswith("/fatima/")
|
||||
assert test_client.get("/fatima/").status_code == 200
|
||||
assert test_client.post("/fatima/logout").headers["Location"].endswith("/fatima/login")
|
||||
|
||||
|
||||
def test_bad_login_shows_error():
|
||||
response = client().post("/login", data={"username": "user", "password": "wrong"})
|
||||
response = client().post("/fatima/login", data={"username": "user", "password": "wrong"})
|
||||
assert response.status_code == 200
|
||||
assert b"not correct" in response.data
|
||||
|
||||
|
||||
def test_choice_is_saved_and_rendered():
|
||||
test_client = client()
|
||||
test_client.post("/login", data={"username": "user", "password": "pass"})
|
||||
response = test_client.post("/api/choices", json={"date": "2026-07-15", "amount": "27.50"})
|
||||
test_client.post("/fatima/login", data={"username": "user", "password": "pass"})
|
||||
response = test_client.post("/fatima/api/choices", json={"date": "2026-07-15", "amount": "27.50"})
|
||||
assert response.status_code == 200
|
||||
assert response.json["amount_cents"] == 2750
|
||||
assert b'"2026-07-15": 2750' in test_client.get("/").data
|
||||
assert b'"2026-07-15": 2750' in test_client.get("/fatima/").data
|
||||
|
||||
|
||||
def test_choice_rejects_invalid_amount():
|
||||
test_client = client()
|
||||
test_client.post("/login", data={"username": "user", "password": "pass"})
|
||||
response = test_client.post("/api/choices", json={"date": "2026-07-15", "amount": "-1"})
|
||||
test_client.post("/fatima/login", data={"username": "user", "password": "pass"})
|
||||
response = test_client.post("/fatima/api/choices", json={"date": "2026-07-15", "amount": "-1"})
|
||||
assert response.status_code == 400
|
||||
|
||||
|
||||
def test_day_status_is_saved_and_rendered():
|
||||
test_client = client()
|
||||
test_client.post("/login", data={"username": "user", "password": "pass"})
|
||||
test_client.post("/fatima/login", data={"username": "user", "password": "pass"})
|
||||
response = test_client.post(
|
||||
"/api/statuses",
|
||||
"/fatima/api/statuses",
|
||||
json={"date": "2026-07-15", "status": "vacation"},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json["status"] == "vacation"
|
||||
assert b'"2026-07-15": "vacation"' in test_client.get("/").data
|
||||
assert b'"2026-07-15": "vacation"' in test_client.get("/fatima/").data
|
||||
|
||||
|
||||
def test_day_status_rejects_unknown_value():
|
||||
test_client = client()
|
||||
test_client.post("/login", data={"username": "user", "password": "pass"})
|
||||
test_client.post("/fatima/login", data={"username": "user", "password": "pass"})
|
||||
response = test_client.post(
|
||||
"/api/statuses",
|
||||
"/fatima/api/statuses",
|
||||
json={"date": "2026-07-15", "status": "elsewhere"},
|
||||
)
|
||||
assert response.status_code == 400
|
||||
@@ -78,14 +99,14 @@ def test_day_status_rejects_unknown_value():
|
||||
|
||||
def test_delete_removes_amount_and_status():
|
||||
test_client = client()
|
||||
test_client.post("/login", data={"username": "user", "password": "pass"})
|
||||
test_client.post("/api/choices", json={"date": "2026-07-15", "amount": "55"})
|
||||
test_client.post("/api/statuses", json={"date": "2026-07-15", "status": "sick"})
|
||||
test_client.post("/fatima/login", data={"username": "user", "password": "pass"})
|
||||
test_client.post("/fatima/api/choices", json={"date": "2026-07-15", "amount": "55"})
|
||||
test_client.post("/fatima/api/statuses", json={"date": "2026-07-15", "status": "sick"})
|
||||
|
||||
response = test_client.post("/api/delete-date", json={"date": "2026-07-15"})
|
||||
response = test_client.post("/fatima/api/delete-date", json={"date": "2026-07-15"})
|
||||
assert response.status_code == 200
|
||||
assert response.json["deleted"] is True
|
||||
page = test_client.get("/").data
|
||||
page = test_client.get("/fatima/").data
|
||||
assert b'"2026-07-15": 5500' not in page
|
||||
assert b'"2026-07-15": "sick"' not in page
|
||||
|
||||
@@ -94,15 +115,15 @@ def test_report_groups_money_and_days_by_status():
|
||||
from datetime import date
|
||||
|
||||
test_client = client()
|
||||
test_client.post("/login", data={"username": "user", "password": "pass"})
|
||||
test_client.post("/fatima/login", data={"username": "user", "password": "pass"})
|
||||
year = date.today().year
|
||||
worked_date = f"{year}-01-10"
|
||||
vacation_date = f"{year}-02-10"
|
||||
test_client.post("/api/choices", json={"date": worked_date, "amount": "55"})
|
||||
test_client.post("/api/choices", json={"date": vacation_date, "amount": "27.50"})
|
||||
test_client.post("/api/statuses", json={"date": vacation_date, "status": "vacation"})
|
||||
test_client.post("/fatima/api/choices", json={"date": worked_date, "amount": "55"})
|
||||
test_client.post("/fatima/api/choices", json={"date": vacation_date, "amount": "27.50"})
|
||||
test_client.post("/fatima/api/statuses", json={"date": vacation_date, "status": "vacation"})
|
||||
|
||||
response = test_client.get("/report")
|
||||
response = test_client.get("/fatima/report")
|
||||
assert response.status_code == 200
|
||||
assert b"\xe2\x82\xac55.00" in response.data
|
||||
assert b"\xe2\x82\xac27.50" in response.data
|
||||
@@ -111,8 +132,8 @@ def test_report_groups_money_and_days_by_status():
|
||||
|
||||
def test_report_can_navigate_to_another_year():
|
||||
test_client = client()
|
||||
test_client.post("/login", data={"username": "user", "password": "pass"})
|
||||
response = test_client.get("/report?year=2025")
|
||||
test_client.post("/fatima/login", data={"username": "user", "password": "pass"})
|
||||
response = test_client.get("/fatima/report?year=2025")
|
||||
assert response.status_code == 200
|
||||
assert b"2025 report" in response.data
|
||||
assert b"year=2024" in response.data
|
||||
|
||||
Reference in New Issue
Block a user