import pytest import sqlite3 from tests.unit.database.database_test_class import TestDatabase 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" ) class TestUsers(TestDatabase): """ Class to encapsulate all of the user datbase tests """ def test_create_user(self): """ Tests a new user can be created """ db = UserController() db.create(customer) def test_duplicate_user(self): """ Tests the database maintains integrity when we try and add a user with the same details """ db = UserController() with pytest.raises(sqlite3.IntegrityError): db.create(customer) def test_read_user(self): """ Test we the same user details get returned from the database """ 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__ def test_create_seller(self): """ Tests a new seller can be created """ db = UserController() db.create(seller) def test_read_seller(self): """ Test that the same seller details get returned from the database """ 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__