87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
def test_create_bike_requires_name(client):
|
|
client.login()
|
|
csrf = client.csrf(client.get("/bikes/new").text)
|
|
resp = client.post("/bikes/new", data={"csrf": csrf, "name": ""})
|
|
assert resp.status_code == 200
|
|
assert "Name must be" in resp.text
|
|
|
|
|
|
def test_create_and_list_bike(client):
|
|
client.login()
|
|
bike_id = client.create_bike("Roadie")
|
|
assert bike_id >= 1
|
|
assert "Roadie" in client.get("/").text
|
|
d = client.get(f"/bikes/{bike_id}")
|
|
assert "Service status" in d.text
|
|
|
|
|
|
def test_update_bike(client):
|
|
client.login()
|
|
bike_id = client.create_bike("Roadie")
|
|
csrf = client.csrf(client.get(f"/bikes/{bike_id}/edit").text)
|
|
resp = client.post(
|
|
f"/bikes/{bike_id}/edit",
|
|
data={"csrf": csrf, "name": "Roadie 2", "service_interval_miles": "3000"},
|
|
)
|
|
assert resp.status_code == 303
|
|
assert "Roadie 2" in client.get(f"/bikes/{bike_id}").text
|
|
|
|
|
|
def test_create_event_and_list(client):
|
|
client.login()
|
|
bike_id = client.create_bike("Roadie")
|
|
result = client.create_event(
|
|
bike_id, type="service", event_date="2026-09-09", mileage="15000", cost="150"
|
|
)
|
|
assert result["status"] == 200
|
|
assert "15,000" in result["text"]
|
|
assert "service" in result["text"]
|
|
|
|
|
|
def test_event_rejects_future_date(client):
|
|
client.login()
|
|
bike_id = client.create_bike("Roadie")
|
|
result = client.create_event(bike_id, type="service", event_date="2999-01-01")
|
|
assert "future" in result["text"].lower()
|
|
|
|
|
|
def test_event_rejects_negative_mileage(client):
|
|
client.login()
|
|
bike_id = client.create_bike("Roadie")
|
|
result = client.create_event(bike_id, type="other", event_date="2026-09-09", mileage="-5")
|
|
assert "negative" in result["text"].lower()
|
|
|
|
|
|
def test_event_requires_known_type(client):
|
|
client.login()
|
|
bike_id = client.create_bike("Roadie")
|
|
result = client.create_event(bike_id, type="bogus", event_date="2026-09-09")
|
|
assert "must be one of" in result["text"].lower()
|
|
|
|
|
|
def test_delete_event(client):
|
|
client.login()
|
|
bike_id = client.create_bike("Roadie")
|
|
client.create_event(bike_id, type="service", event_date="2026-09-09", mileage="15000")
|
|
page = client.get(f"/bikes/{bike_id}").text
|
|
import re
|
|
|
|
m = re.search(r"/events/(\d+)/delete", page)
|
|
assert m, "delete link not found"
|
|
event_id = m.group(1)
|
|
csrf = client.csrf(page)
|
|
resp = client.post(f"/events/{event_id}/delete", data={"csrf": csrf})
|
|
assert resp.status_code == 303
|
|
assert "No events yet" in client.get(f"/bikes/{bike_id}").text
|
|
|
|
|
|
def test_delete_bike_cascades(client):
|
|
client.login()
|
|
bike_id = client.create_bike("Roadie")
|
|
client.create_event(bike_id, type="service", event_date="2026-09-09", mileage="15000")
|
|
page = client.get(f"/bikes/{bike_id}/edit").text
|
|
csrf = client.csrf(page)
|
|
resp = client.post(f"/bikes/{bike_id}/delete", data={"csrf": csrf})
|
|
assert resp.status_code == 303
|
|
assert client.get(f"/bikes/{bike_id}").status_code == 303
|