From bdf12d4ba0277a82ec97ff7c4a78c183d17ec9e3 Mon Sep 17 00:00:00 2001 From: Chris Fulljames Date: Sat, 12 Apr 2025 08:04:02 -0400 Subject: [PATCH] Implement jam update --- src/littlesongplace/jams.py | 34 +++++++++++++++++++++------------- test/test_jams.py | 17 +++++++++++++++++ 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/littlesongplace/jams.py b/src/littlesongplace/jams.py index 0bcdbe5..dd03ab7 100644 --- a/src/littlesongplace/jams.py +++ b/src/littlesongplace/jams.py @@ -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("/") +@bp.get("/") 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("//update") +@bp.post("//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("//delete") +@bp.get("//delete") @auth.requires_login def delete(jamid): # Delete a jam, redirect to the jams list ... -@bp.get("//events") +@bp.get("//events") def events(jamid): # Show a list of all events for the jam (current, upcoming, previous) ... -@bp.get("//events/create") +@bp.get("//events/create") @auth.requires_login def events_create(): # Create a new event and redirect to the edit form ... -@bp.get("//events/") +@bp.get("//events/") def events_view(eventid): # Show the event page ... -@bp.post("//events//update") +@bp.post("//events//update") @auth.requires_login def events_update(jamid): # Update an event with the new form data ... -@bp.get("//events//delete") +@bp.get("//events//delete") @auth.requires_login def events_delete(jamid): # Delete an event, redirect to list of all events diff --git a/test/test_jams.py b/test/test_jams.py index eacb428..6d361ef 100644 --- a/test/test_jams.py +++ b/test/test_jams.py @@ -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 + -- 2.39.5