Products can now be searched using search term
This commit is contained in:
		| @@ -51,15 +51,18 @@ class ProductController(DatabaseController): | ||||
|         return products | ||||
|  | ||||
|  | ||||
|     def read_all(self, category: str = "") -> list[Product] | None: | ||||
|     def read_all(self, category: str = "", search_term: str = "") -> list[Product] | None: | ||||
|         params = [ | ||||
|             "%" + category + "%" | ||||
|             "%" + category + "%", | ||||
|             "%" + search_term + "%" | ||||
|         ] | ||||
|          | ||||
|         cursor = self._conn.execute( | ||||
|             """SELECT * FROM Products  | ||||
|             INNER JOIN Categories ON Products.categoryID = Categories.id  | ||||
|             WHERE Categories.name LIKE ? """, | ||||
|             WHERE Categories.name LIKE ?  | ||||
|             AND Products.name LIKE ? | ||||
|             """, | ||||
|             params | ||||
|         ) | ||||
|         rows = cursor.fetchall() | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| from flask import Blueprint | ||||
|  | ||||
| from flask import render_template, session, flash | ||||
| from flask import render_template, session, flash, request | ||||
| from controllers.database.product import ProductController | ||||
| from controllers.database.category import CategoryController | ||||
|  | ||||
| @@ -29,9 +29,15 @@ def index(): | ||||
| # Loads a given product category page | ||||
| @blueprint.route('/<string:category>') | ||||
| def category(category: str): | ||||
|     print(category) | ||||
|     database = ProductController() | ||||
|     products = database.read_all(category) | ||||
|      | ||||
|     # Check to see if there is a custome search term | ||||
|     search_term = request.args.get("search", type=str) | ||||
|     if search_term != None: | ||||
|         print(f"Search Term {search_term}") | ||||
|         products = database.read_all(category, search_term) | ||||
|     else: | ||||
|         products = database.read_all(category) | ||||
|  | ||||
|     # No Products visible | ||||
|     if products == None: | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| <div class="navbar"> | ||||
|     <nav> | ||||
|         <a href="/"><img src="{{url_for('static', filename='assets/img/wmgzon.png')}}" id="logo" class="not-required" alt="WMGZON Logo"></a> | ||||
|         <form action="test.html" method="get"> | ||||
|         <form action="" method="get"> | ||||
|             <input type="text" name="search" placeholder="Find your favourite products" class="search-bar"> | ||||
|             <input type="submit" class="search-button"> | ||||
|         </form> | ||||
|   | ||||
| @@ -27,6 +27,26 @@ def test_duplicate_product(): | ||||
|     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") == 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") == None | ||||
|  | ||||
| # Test we the same product details get returned from the database | ||||
| def test_read_product(): | ||||
|     db = ProductController() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user