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
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(
"""
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
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
+