@jam_owner_only
def delete(jamid):
# Delete a jam, redirect to the jams list
+
+ # First delete all events
+ events = db.query("SELECT * FROM jam_events WHERE jamid = ?", [jamid])
+ for event in events:
+ events_delete(jamid, event["eventid"])
+
row = db.query(
"DELETE FROM jams WHERE jamid = ? RETURNING *",
[jamid], expect_one=True)
@jam_owner_only
def events_delete(jamid, eventid):
# Delete an event, redirect to list of all events
+ db.query("UPDATE songs SET eventid = NULL WHERE eventid = ?", [eventid])
db.query(
"""
DELETE FROM jam_events
WHERE eventid = ? AND jamid = ?
RETURNING *
""", [eventid, jamid], expect_one=True)
+ db.commit()
return redirect(url_for("jams.jam", jamid=jamid))
response = client.get(f"/jams/{jam}")
assert response.status_code == 404
+def test_delete_jam_with_event_and_song(client, user, jam, event):
+ client.post(
+ f"/jams/{jam}/events/{event}/update",
+ data=_get_event_data(startdate=yesterday, enddate=tomorrow))
+ upload_song(client, b"Success", eventid=event)
+
+ response = client.get(f"/jams/{jam}/delete", follow_redirects=True)
+ assert response.request.path == f"/jams"
+ assert b"New Jam" not in response.data
+ assert b"Event Title" not in response.data
+ assert b"[Upcoming Event]" not in response.data
+
def test_delete_jam_not_logged_in(client):
response = client.get("/jams/1/delete", follow_redirects=True)
assert response.request.path == "/login"
response = client.get(f"/jams/{jam}/events/{event}/delete", follow_redirects=True)
assert response.request.path == f"/jams/{jam}"
assert b"Event Title" not in response.data
+ assert b"[Upcoming Event]" not in response.data
+
+def test_delete_event_with_song(client, user, jam, event):
+ client.post(
+ f"/jams/{jam}/events/{event}/update",
+ data=_get_event_data(startdate=yesterday, enddate=tomorrow))
+ upload_song(client, b"Success", eventid=event)
+
+ response = client.get(f"/jams/{jam}/events/{event}/delete", follow_redirects=True)
+ assert response.request.path == f"/jams/{jam}"
+ assert b"Event Title" not in response.data
+ assert b"[Upcoming Event]" not in response.data
def test_delete_event_not_logged_in(client, user, jam, event):
client.get("/logout")