Started on making functional unit tests for endpoints

This commit is contained in:
2024-02-05 19:19:29 +00:00
parent e45ec4b217
commit ee33965baf
9 changed files with 199 additions and 159 deletions

View File

View File

@ -0,0 +1,41 @@
from app import app
from flask.testing import FlaskClient
import pytest
import os
@pytest.fixture(scope="module")
def test_client() -> FlaskClient:
""" Test that required environment variables are set
ahead of runtime
"""
os.environ['CONFIG_TYPE'] = 'config.TestingConfig'
with app.test_client() as testing_client:
with app.app_context():
yield testing_client
def test_homepage(test_client: FlaskClient):
""" Tests that the main homepage loads correctly
once the '/' endpoint is hit
"""
response = test_client.get('/')
assert response.status_code == 302
response = test_client.get('/products')
assert response.status_code == 308
def test_products(test_client: FlaskClient):
""" Tests that a product page is displayed when
hitting one of the product endpoints
"""
response = test_client.get('/products/2')
assert response.status_code == 200
response = test_client.get('/products/50')
assert response.status_code == 302
response = test_client.get('/products/Books')
assert response.status_code == 200

0
tests/unit/__init__.py Normal file
View File

View File

@ -1,3 +1,3 @@
# Ensure test environment is set before using
# Runs the database creation scripts
import scripts.create_database
# Ensure test environment is set before using
# Runs the database creation scripts
import scripts.create_database

View File

@ -1,67 +1,67 @@
import pytest
import sqlite3
from datetime import datetime
from controllers.database.product import ProductController
from models.products.product import Product
product = Product(
"product",
"brake-disks.bmp",
"description",
10.00,
1,
1,
datetime.now(),
1
)
# Tests a new product can be created
def test_create_product():
db = ProductController()
db.create(product)
# Tests the database maintains integrity when we try
# and add a product with the same details
def test_duplicate_product():
test_create_product()
# Tests that products can be refined by category
def test_search_category():
db = ProductController()
# Check each category for correct amount of test products
assert len(db.read_all("Car Parts")) == 9 + 2 # Added in previous tests
assert len(db.read_all("Books")) == 9
assert db.read_all("Phones") is None
# Tests that products can be refined by search term
def test_search_term():
db = ProductController()
# Check each search term for correct amount of test products
assert len(db.read_all(search_term="Alloy")) == 9
assert len(db.read_all("Car Parts", "tur")) == 2
assert len(db.read_all(search_term="fold")) == 8
assert db.read_all(search_term="Twin") is None
# Test we the same product details get returned from the database
def test_read_product():
db = ProductController()
# Test the same product is returned
new_product = db.read("product")
assert isinstance(new_product, list)
assert isinstance(new_product[0], Product)
# Update the ID on the item as database assigns new id
product.id = new_product[0].id
assert new_product[0].__dict__ == product.__dict__
import pytest
import sqlite3
from datetime import datetime
from controllers.database.product import ProductController
from models.products.product import Product
product = Product(
"product",
"brake-disks.bmp",
"description",
10.00,
1,
1,
datetime.now(),
1
)
# Tests a new product can be created
def test_create_product():
db = ProductController()
db.create(product)
# Tests the database maintains integrity when we try
# and add a product with the same details
def test_duplicate_product():
test_create_product()
# Tests that products can be refined by category
def test_search_category():
db = ProductController()
# Check each category for correct amount of test products
assert len(db.read_all("Car Parts")) == 9 + 2 # Added in previous tests
assert len(db.read_all("Books")) == 9
assert db.read_all("Phones") is None
# Tests that products can be refined by search term
def test_search_term():
db = ProductController()
# Check each search term for correct amount of test products
assert len(db.read_all(search_term="Alloy")) == 9
assert len(db.read_all("Car Parts", "tur")) == 2
assert len(db.read_all(search_term="fold")) == 8
assert db.read_all(search_term="Twin") is None
# Test we the same product details get returned from the database
def test_read_product():
db = ProductController()
# Test the same product is returned
new_product = db.read("product")
assert isinstance(new_product, list)
assert isinstance(new_product[0], Product)
# Update the ID on the item as database assigns new id
product.id = new_product[0].id
assert new_product[0].__dict__ == product.__dict__

View File

@ -1,74 +1,74 @@
import pytest
import sqlite3
from controllers.database.user import UserController
from models.users.customer import Customer
from models.users.seller import Seller
customer = Customer(
"testcustomer",
"Password1",
"firstname",
"lastname",
"test@test",
"123456789"
)
seller = Seller(
"testseller",
"Password1",
"firstname",
"lastname",
"seller@seller",
"987654321"
)
# Tests a new user can be created
def test_create_user():
db = UserController()
db.create(customer)
# Tests the database maintains integrity when we try
# and add a user with the same details
def test_duplicate_user():
db = UserController()
with pytest.raises(sqlite3.IntegrityError):
db.create(customer)
# Test we the same user details get returned from the database
def test_read_user():
db = UserController()
# Test the same user is returned
user = db.read(customer.username)
assert isinstance(user, Customer)
# Update the ID on the item as database assigns new id
customer.id = user.id
assert user.__dict__ == customer.__dict__
# Tests a new seller can be created
def test_create_seller():
db = UserController()
db.create(seller)
# Test that the same seller details get returned from the database
def test_read_seller():
db = UserController()
# Test the same user is returned
user = db.read(seller.username)
assert isinstance(user, Seller)
# Update the ID on the item as database assigns new id
seller.id = user.id
user.store = ""
assert user.__dict__ == seller.__dict__
import pytest
import sqlite3
from controllers.database.user import UserController
from models.users.customer import Customer
from models.users.seller import Seller
customer = Customer(
"testcustomer",
"Password1",
"firstname",
"lastname",
"test@test",
"123456789"
)
seller = Seller(
"testseller",
"Password1",
"firstname",
"lastname",
"seller@seller",
"987654321"
)
# Tests a new user can be created
def test_create_user():
db = UserController()
db.create(customer)
# Tests the database maintains integrity when we try
# and add a user with the same details
def test_duplicate_user():
db = UserController()
with pytest.raises(sqlite3.IntegrityError):
db.create(customer)
# Test we the same user details get returned from the database
def test_read_user():
db = UserController()
# Test the same user is returned
user = db.read(customer.username)
assert isinstance(user, Customer)
# Update the ID on the item as database assigns new id
customer.id = user.id
assert user.__dict__ == customer.__dict__
# Tests a new seller can be created
def test_create_seller():
db = UserController()
db.create(seller)
# Test that the same seller details get returned from the database
def test_read_seller():
db = UserController()
# Test the same user is returned
user = db.read(seller.username)
assert isinstance(user, Seller)
# Update the ID on the item as database assigns new id
seller.id = user.id
user.store = ""
assert user.__dict__ == seller.__dict__

View File

@ -1,11 +1,11 @@
import pycodestyle
# Tests files to ensure they conform to pep8 standards
def test_pep8_conformance():
"""Test that we conform to PEP8."""
pep8style = pycodestyle.StyleGuide()
dirs = ["./controllers", "./models", "./scripts", "./tests", "./utils"]
result = pep8style.check_files(dirs)
assert result.total_errors == 0
import pycodestyle
# Tests files to ensure they conform to pep8 standards
def test_pep8_conformance():
"""Test that we conform to PEP8."""
pep8style = pycodestyle.StyleGuide()
dirs = ["./controllers", "./models", "./scripts", "./tests", "./utils"]
result = pep8style.check_files(dirs)
assert result.total_errors == 0