From 19165220fadde3390699fa6e773c71097316122c Mon Sep 17 00:00:00 2001 From: Luke Else Date: Thu, 18 Jan 2024 21:11:01 +0000 Subject: [PATCH] #2 Added ability for user to login as seller and added test to verify functionality --- controllers/database/database.py | 4 ++++ controllers/database/user.py | 9 ++++++++- tests/database/test_users.py | 33 ++++++++++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/controllers/database/database.py b/controllers/database/database.py index b43e1b1..0772f72 100644 --- a/controllers/database/database.py +++ b/controllers/database/database.py @@ -26,6 +26,10 @@ class DatabaseController(ABC): self._conn.close() print(e) + def __del__(self): + if self._conn != None: + self._conn.close() + """ Takes a dictionary of fields and returns the object with those fields populated """ def new_instance(self, of: type, with_fields: Mapping[str, Any]): diff --git a/controllers/database/user.py b/controllers/database/user.py index 87d93d4..f13f21c 100644 --- a/controllers/database/user.py +++ b/controllers/database/user.py @@ -1,6 +1,7 @@ from .database import DatabaseController from models.users.user import User from models.users.customer import Customer +from models.users.seller import Seller class UserController(DatabaseController): FIELDS = ['id', 'username', 'password', 'firstName', 'lastName', 'email', 'phone', 'role'] @@ -38,7 +39,13 @@ class UserController(DatabaseController): if row != None: params = dict(zip(self.FIELDS, row)) - obj = self.new_instance(Customer, params) + + # Is user a seller + type = Customer + if row[7] == "Seller": + type = Seller + + obj = self.new_instance(type, params) return obj return None diff --git a/tests/database/test_users.py b/tests/database/test_users.py index 95281f8..f0cfae7 100644 --- a/tests/database/test_users.py +++ b/tests/database/test_users.py @@ -2,9 +2,10 @@ import pytest import sqlite3 from controllers.database.user import UserController from models.users.customer import Customer +from models.users.seller import Seller customer = Customer( - "testuser", + "testcustomer", "Password1", "firstname", "lastname", @@ -12,6 +13,15 @@ customer = Customer( "123456789" ) +seller = Seller( + "testseller", + "Password1", + "firstname", + "lastname", + "seller@seller", + "987654321" +) + # Tests a new user can be created def test_create_user(): db = UserController() @@ -28,9 +38,28 @@ def test_read_user(): db = UserController() # Test the same user is returned - user = db.read("testuser") + 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__