]> littlesong.place Git - littlesongplace.git/commitdiff
Fix jam/event deletion
authorChris Fulljames <christianfulljames@gmail.com>
Sat, 26 Apr 2025 18:11:36 +0000 (14:11 -0400)
committerChris Fulljames <christianfulljames@gmail.com>
Sat, 26 Apr 2025 18:11:36 +0000 (14:11 -0400)
src/littlesongplace/jams.py
src/littlesongplace/templates/jam-event.html
test/test_jams.py

index e4af38015976cf7e2a05b6a5abf5513b9febcbff..0708154c14843726637ec6aad55c5c4b60426e81 100644 (file)
@@ -111,6 +111,12 @@ def update(jamid):
 @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)
@@ -181,12 +187,14 @@ def events_update(jamid, eventid):
 @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))
 
 
index 0d3cad93df1ac2a39252963eeb5a5d62eaef55fa..44a3f95e33f701412c1c653de2a3dc09d5c559ef 100644 (file)
@@ -28,7 +28,7 @@
     {% if session["userid"] == jam.ownerid -%}
     <div class="actions">
     <button class="song-list-button" onclick="showJamEventEditor()" title="Edit"><img class="lsp_btn_edit02" /></button>
-    <a href="/jams/{{ jam.jamid }}/delete" class="song-list-button" onclick="return confirm('Are you sure you want to delete this jam and all events?')" title="Delete"><img class="lsp_btn_delete02" /></a>
+    <a href="/jams/{{ jam.jamid }}/events/{{ event.eventid }}/delete" class="song-list-button" onclick="return confirm('Are you sure you want to delete this event?')" title="Delete"><img class="lsp_btn_delete02" /></a>
     </div>
     {%- endif %}
 
index edf1b2ba99b7d3067227448c6aa1c1742d633a90..77a7b9ae613c6c30a52e71cec9bd0cb1c0b5d1fc 100644 (file)
@@ -66,6 +66,18 @@ def test_delete_jam(client, user, jam):
     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"
@@ -173,6 +185,18 @@ def test_delete_event(client, user, jam, 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_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")