JezK
Edit File: test_blog.py
import pytest from flaskr import db from flaskr.auth.models import User from flaskr.blog.models import Post def test_index(client, auth): text = client.get("/").text assert "Log In" in text assert "Register" in text auth.login() text = client.get("/").text assert "test title" in text assert "by test on 2018-01-01" in text assert "test\nbody" in text assert 'href="/1/update"' in text @pytest.mark.parametrize("path", ("/create", "/1/update", "/1/delete")) def test_login_required(client, path): response = client.post(path) assert response.headers["Location"] == "/auth/login" def test_author_required(app, client, auth): # change the post author to another user with app.app_context(): db.session.get(Post, 1).author = db.session.get(User, 2) db.session.commit() auth.login() # current user can't modify other user's post assert client.post("/1/update").status_code == 403 assert client.post("/1/delete").status_code == 403 # current user doesn't see edit link assert 'href="/1/update"' not in client.get("/").text @pytest.mark.parametrize("path", ("/2/update", "/2/delete")) def test_exists_required(client, auth, path): auth.login() assert client.post(path).status_code == 404 def test_create(client, auth, app): auth.login() assert client.get("/create").status_code == 200 client.post("/create", data={"title": "created", "body": ""}) with app.app_context(): select = db.select(db.func.count(Post.id)) post_count = db.session.execute(select).scalar() assert post_count == 2 def test_update(client, auth, app): auth.login() assert client.get("/1/update").status_code == 200 client.post("/1/update", data={"title": "updated", "body": ""}) with app.app_context(): assert db.session.get(Post, 1).title == "updated" @pytest.mark.parametrize("path", ("/create", "/1/update")) def test_create_update_validate(client, auth, path): auth.login() response = client.post(path, data={"title": "", "body": ""}) assert "Title is required." in response.text def test_delete(client, auth, app): auth.login() response = client.post("/1/delete") assert response.headers["Location"] == "/" with app.app_context(): assert db.session.get(Post, 1) is None