import pytest import sqlite3 from datetime import datetime from controllers.database.product import ProductController from models.products.product import Product product = Product( "product", "image.png", "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 @pytest.mark.skip def test_duplicate_product(): db = ProductController() with pytest.raises(sqlite3.IntegrityError): db.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 + 1 # Added in previous test 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="test")) == 33 assert len(db.read_all("Car Parts", "test")) == 9 assert len(db.read_all(search_term="product")) == 1 assert db.read_all(search_term="not_test") 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__