the_works/tests/unit/test_unit_genre.py

59 lines
1.9 KiB
Python

import pytest
from the_works.models import Genre
def test_genre_all(client, mocker):
"""Test view all() from genre.py."""
# mock database function
# Note: The original scalars() method returns an sqlalchemy.engine.Result.ScalarResult, not a list
# but the template code uses the return value in a way which works for both ScalarResult and list
mocker.patch("flask_sqlalchemy.session.Session.scalars", return_value=[
Genre(ID=4, Genre="spam"),
Genre(ID=26, Genre="eggs")
])
# test case: get request
response = client.get("/genre")
assert response.status_code == 200
assert response.data.count(b'<tr id="genre-') == 2
# test case: post request
response = client.post("/genre")
assert response.status_code == 405
def test_genre_create(client, mocker):
"""Test view create() from genre.py."""
# mock database function
mocker.patch("flask_sqlalchemy.session.Session.add")
# test a POST request with good data
response = client.post("/genre/create", data={"form_Genre": "spam"}, follow_redirects=True)
# exactly 1 redirect
assert len(response.history) == 1
# redirect to the right page
assert response.request.path == "/genre/all"
assert response.status_code == 200
# test a POST request with no form data
with pytest.raises(ValueError) as excinfo:
response = client.post("/genre/create", data={})
assert "value can't be empty" in str(excinfo.value)
# test a POST request with bad form data
with pytest.raises(ValueError) as excinfo:
response = client.post("/genre/create", data={"wrong_key": "eggs"})
assert "value can't be empty" in str(excinfo.value)
# test a POST request with empty form data
with pytest.raises(ValueError) as excinfo:
response = client.post("/genre/create", data={"form_genre": ""})
assert "value can't be empty" in str(excinfo.value)
# test a GET request
response = client.get("/genre/create", query_string={"form_Genre": "spam eggs"})
assert response.status_code == 405