148 lines
6.2 KiB
Python
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/", follow_redirects=True)
|
|
# 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"}, follow_redirects=True)
|
|
# assert good HTTP response
|
|
assert response.status_code == 200
|
|
|
|
def test_post_request(self, client):
|
|
"""test POST request"""
|
|
response = client.post("/genre/", follow_redirects=True)
|
|
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
|