mirror of https://github.com/mitsuhiko/flask.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.5 KiB
92 lines
2.5 KiB
import pytest |
|
from flaskr.db import get_db |
|
|
|
|
|
def test_index(client, auth): |
|
response = client.get('/') |
|
assert b"Log In" in response.data |
|
assert b"Register" in response.data |
|
|
|
auth.login() |
|
response = client.get('/') |
|
assert b'test title' in response.data |
|
assert b'by test on 2018-01-01' in response.data |
|
assert b'test\nbody' in response.data |
|
assert b'href="/1/update"' in response.data |
|
|
|
|
|
@pytest.mark.parametrize('path', ( |
|
'/create', |
|
'/1/update', |
|
'/1/delete', |
|
)) |
|
def test_login_required(client, path): |
|
response = client.post(path) |
|
assert response.headers['Location'] == 'http://localhost/auth/login' |
|
|
|
|
|
def test_author_required(app, client, auth): |
|
# change the post author to another user |
|
with app.app_context(): |
|
db = get_db() |
|
db.execute('UPDATE post SET author_id = 2 WHERE id = 1') |
|
db.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 b'href="/1/update"' not in client.get('/').data |
|
|
|
|
|
@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(): |
|
db = get_db() |
|
count = db.execute('SELECT COUNT(id) FROM post').fetchone()[0] |
|
assert 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(): |
|
db = get_db() |
|
post = db.execute('SELECT * FROM post WHERE id = 1').fetchone() |
|
assert post['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 b'Title is required.' in response.data |
|
|
|
|
|
def test_delete(client, auth, app): |
|
auth.login() |
|
response = client.post('/1/delete') |
|
assert response.headers['Location'] == 'http://localhost/' |
|
|
|
with app.app_context(): |
|
db = get_db() |
|
post = db.execute('SELECT * FROM post WHERE id = 1').fetchone() |
|
assert post is None
|
|
|