the_works/tests/unit/test_unit_genre.py
2025-07-26 18:39:53 +02:00

148 lines
6.2 KiB
Python

from the_works.models import Genre
class TestUnitGenreRead:
"""Test view all() from genre.py."""
def test_get_request(self, client, mocker):
"""test GET request"""
# mock database function
# Note: scalars() should return 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")
])
response = client.get("/genre")
# assert good HTTP response
assert response.status_code == 200
# assert two records read
assert response.data.count(b'<tr id="genre-') == 2
# assert records were correctly read from DB
assert b'SpAm' in response.data
assert b'eGgS' in response.data
def test_get_request_with_query(self, client):
"""test GET request with query string"""
response = client.get("/genre", query_string={"id": 1, "form_genre": "spam"})
# assert good HTTP response
assert response.status_code == 200
def test_post_request(self, client):
"""test POST request"""
response = client.post("/genre")
assert response.status_code == 405
class TestUnitGenreCreate:
"""Test view create() from genre.py."""
def test_good_data_request(self, client, mocker):
"""test a POST request with good data"""
mocker.patch("flask_sqlalchemy.session.Session.add")
response = client.post("/genre/create", data={"form_Genre": "spam"}, follow_redirects=True)
assert response.status_code == 200
def test_no_data(self, client, mocker):
"""test a POST request with no form data"""
mocker.patch("flask_sqlalchemy.session.Session.add")
response = client.post("/genre/create", data={}, follow_redirects=True)
assert response.status_code == 200 # note: a real DB would have raised an IntegrityError
def test_bad_data(self, client, mocker):
"""test a POST request with bad form data"""
mocker.patch("flask_sqlalchemy.session.Session.add")
response = client.post("/genre/create", data={"wrong_key": "eggs"}, follow_redirects=True)
assert response.status_code == 200 # same
def test_empty_data(self, client, mocker):
"""test a POST request with empty form data"""
mocker.patch("flask_sqlalchemy.session.Session.add")
response = client.post("/genre/create", data={"form_genre": ""}, follow_redirects=True)
assert response.status_code == 200 # same
def test_get_request(self, client):
"""test a GET request"""
response = client.get("/genre/create", query_string={"form_Genre": "spam & eggs"})
assert response.status_code == 405
class TestUnitGenreUpdate:
"""Test view update() from genre.py."""
def test_good_data_request(self, client, mocker):
"""test a POST request with good data"""
mocker.patch("flask_sqlalchemy.session.Session.get", return_value=Genre(ID=1, Genre="spam"))
response = client.post("/genre/update/1", data={"form_Genre": "eGgS"}, follow_redirects=True)
assert response.status_code == 200
def test_no_data(self, client, mocker):
"""test a POST request with no form data"""
mocker.patch("flask_sqlalchemy.session.Session.get", return_value=Genre(ID=1, Genre="spam"))
response = client.post("/genre/update/1", data={}, follow_redirects=True)
assert response.status_code == 200
def test_bad_data(self, client, mocker):
"""test a POST request with bad form data"""
# mock database function
mocker.patch("flask_sqlalchemy.session.Session.get", return_value=Genre(ID=1, Genre="spam"))
response = client.post("/genre/update/1", data={"wrong_key": "eggs"}, follow_redirects=True)
assert response.status_code == 200
def test_empty_data(self, client, mocker):
"""test a POST request with empty form data"""
# mock database function
mocker.patch("flask_sqlalchemy.session.Session.get", return_value=Genre(ID=1, Genre="spam"))
response = client.post("/genre/update/1", data={"form_genre": ""}, follow_redirects=True)
assert response.status_code == 200
def test_no_id(self, client):
"""test POST request without id"""
response = client.post("/genre/update/", data={"form_Genre": "spam & eggs"}, follow_redirects=True)
assert response.status_code == 404
def test_bad_id(self, client, mocker):
"""test method call with an id that doesn't exist"""
mocker.patch("flask_sqlalchemy.session.Session.get", return_value=None)
response = client.post("/genre/update/123", data={"form_Genre": "spam & eggs"}, follow_redirects=True)
assert response.status_code == 200
def test_get_request(self, client):
"""test a GET request"""
response = client.get("/genre/update/1", query_string={"form_Genre": "spam & eggs"})
assert response.status_code == 405
class TestUnitGenreDelete:
"""Test view delete() from genre.py."""
def test_get_request(self, client, mocker):
"""test a GET request with good data"""
mocker.patch("flask_sqlalchemy.session.Session.get", return_value=Genre(ID=1, Genre="spam"))
mocker.patch("flask_sqlalchemy.session.Session.delete")
response = client.get("/genre/delete/1", follow_redirects=True)
assert response.status_code == 200
def test_get_request_with_query(self, client, mocker):
"""test a GET request with good data"""
mocker.patch("flask_sqlalchemy.session.Session.get", return_value=Genre(ID=1, Genre="spam"))
mocker.patch("flask_sqlalchemy.session.Session.delete")
response = client.get("/genre/delete/1", query_string={"spam": 1, "eggs": "important stuff"}, follow_redirects=True)
assert response.status_code == 200
def test_no_id(self, client):
"""test a GET request with no id"""
response = client.get("/genre/delete", follow_redirects=True)
assert response.status_code == 404
def test_bad_id(self, client, mocker):
"""test a GET request with a non-existing id"""
mocker.patch("flask_sqlalchemy.session.Session.delete")
response = client.get("/genre/delete/123", follow_redirects=True)
assert response.status_code == 200
def test_post_request(self, client):
"""test a POST request"""
response = client.post("/genre/delete/1")
assert response.status_code == 405