]> littlesong.place Git - littlesongplace.git/commitdiff
Implement jam update
authorChris Fulljames <christianfulljames@gmail.com>
Sat, 12 Apr 2025 12:04:02 +0000 (08:04 -0400)
committerChris Fulljames <christianfulljames@gmail.com>
Sat, 12 Apr 2025 12:04:02 +0000 (08:04 -0400)
src/littlesongplace/jams.py
test/test_jams.py

index 0bcdbe5e64b069e34ef849d1997434cbc258c8df..dd03ab762f909e2c652d96f83a251fa7ffead86f 100644 (file)
@@ -1,7 +1,7 @@
 from dataclasses import dataclass
 from datetime import datetime, timezone
 
-from flask import Blueprint, g, redirect, render_template, url_for
+from flask import Blueprint, g, redirect, render_template, request, url_for
 
 from . import auth, db
 from .sanitize import sanitize_user_text
@@ -23,14 +23,12 @@ def create():
             INSERT INTO jams (ownerid, created, title)
             VALUES (?, ?, ?)
             RETURNING jamid
-            """,
-            args=[g.userid, timestamp, f"New Jam"],
-            one=True)
+            """, [g.userid, timestamp, f"New Jam"], one=True)
     db.commit()
     jamid = row["jamid"]
     return redirect(url_for('jams.jam', jamid=jamid))
 
-@bp.get("/<jamid>")
+@bp.get("/<int:jamid>")
 def jam(jamid):
     row = db.query(
             """
@@ -38,45 +36,55 @@ def jam(jamid):
             INNER JOIN users ON jams.ownerid = users.userid
             WHERE jamid = ?
             """, [jamid], one=True)
+    print(type(jamid), row)
     jam = Jam.from_row(row)
     # Show the main jam page
     return render_template("jam.html", jam=jam)
 
-@bp.post("/<jamid>/update")
+@bp.post("/<int:jamid>/update")
 @auth.requires_login
 def update(jamid):
     # Update a jam with the new form data, redirect to view page
-    ...
+    title = request.form["title"]
+    description = request.form["description"]
+    db.query(
+            """
+            UPDATE jams
+            SET title = ?, description = ?
+            WHERE jamid = ?
+            """, [title, description, jamid])
+    db.commit()
+    return redirect(url_for('jams.jam', jamid=jamid))
 
-@bp.get("/<jamid>/delete")
+@bp.get("/<int:jamid>/delete")
 @auth.requires_login
 def delete(jamid):
     # Delete a jam, redirect to the jams list
     ...
 
-@bp.get("/<jamid>/events")
+@bp.get("/<int:jamid>/events")
 def events(jamid):
     # Show a list of all events for the jam (current, upcoming, previous)
     ...
 
-@bp.get("/<jamid>/events/create")
+@bp.get("/<int:jamid>/events/create")
 @auth.requires_login
 def events_create():
     # Create a new event and redirect to the edit form
     ...
 
-@bp.get("/<jamid>/events/<int:eventid>")
+@bp.get("/<int:jamid>/events/<int:eventid>")
 def events_view(eventid):
     # Show the event page
     ...
 
-@bp.post("/<jamid>/events/<int:eventid>/update")
+@bp.post("/<int:jamid>/events/<int:eventid>/update")
 @auth.requires_login
 def events_update(jamid):
     # Update an event with the new form data
     ...
 
-@bp.get("/<jamid>/events/<int:eventid>/delete")
+@bp.get("/<int:jamid>/events/<int:eventid>/delete")
 @auth.requires_login
 def events_delete(jamid):
     # Delete an event, redirect to list of all events
index eacb42877b03357e9a5631e21d93b5ed77c3254f..6d361ef937373516ca6a9c534175250f9ef71471 100644 (file)
@@ -7,8 +7,25 @@ def user(client):
     create_user(client, "user", login=True)
     yield "user"
 
+@pytest.fixture
+def jam(client):
+    client.get("/jams/create")
+    return 1
+
 def test_create_jam(client, user):
     response = client.get("/jams/create", follow_redirects=True)
     assert response.status_code == 200
+    assert response.request.path == "/jams/1"
     assert b"New Jam" in response.data
 
+def test_update_jam(client, user, jam):
+    response = client.post(
+            f"/jams/{jam}/update",
+            data={"title": "Coolest Jam", "description": "pb and jam"},
+            follow_redirects=True)
+
+    assert response.status_code == 200
+    assert response.request.path == f"/jams/{jam}"
+    assert b"Coolest Jam" in response.data
+    assert b"pb and jam" in response.data
+