TC-CCM-004 Search with duplicated ingredients 1. Enter "rice, rice, rice"
2. Click Search rice, rice, rice Same result as single "rice"; no duplicates used Normalized → same query → same result PASS
TC-CCM-005 Search with extra spaces 1. Enter " chicken , rice , broccoli "
2. Click Search (with extra spaces) Recipes containing chicken, rice, and broccoli appear normalizeWord handles trim → works PASS
TC-CCM-006 Search with uppercase/lowercase mix 1. Enter "CHICKEN, Rice, BROCCOLI"
2. Click Search Mixed case Correct recipes appear .toLowerCase() + ILIKE makes search case-insensitive PASS
TC-CCM-007 Search with partial ingredient match 1. Enter "broc"
2. Click Search broc Either: No results Because of %broc%, broccoli matches → returns recipes FAIL
TC-CCM-008 Search with invalid characters 1. Enter "rice!!!"
2. Click Search rice!!! Error message No sanitizing, treated literally, e.g. rice!!! won't match → 0 results, no error PASS
TC-CCM-009 Search with empty input 1. Leave input blank
2. Click Search "" Prompt user to enter ingredients and show all recipes q = '' → ILIKE %% → returns ALL recipes PASS
TC-CCM-010 Search with many ingredients at once 1. Enter long list: "chicken, rice, cheese, carrots, onion, celery, beans, corn, tomatoes"
2. Click Search 9 ingredients Recipes requiring all listed ingredients appear Works as OR search → shows recipes containing any FAIL
User Story 2: As CourtneyChaosMom, I want to filter recipes by allergies so that all my children can safely eat the meals.
Test Case ID Test Scenario Test Steps Test Data Expected Results Actual Results Pass/Fail
TC-CCM-021 Filter by single allergy (no dairy) 1. Open Filter
2. Select "No Dairy"
3. Click Apply no dairy Only dairy-free recipes appear Works if correct check box is chosen PASS
TC-CCM-022 Filter by multiple allergies 1. Select "No Dairy" + "No Peanuts"
2. Click Search no dairy, no peanuts Only recipes meeting both restrictions appear Works. Adds multiple NOT @> clauses PASS
TC-CCM-023 Allergy filter with cuisine filters 1. Select Cuisine = Italian
2. Select "No Dairy"
3. Click Search Italian + no dairy Italian dairy-free recipes appear Works: LOWER(cuisine)=... AND NOT(allergens @>) PASS
TC-CCM-024 Allergy filter with ingredient search 1. Enter ingredient "chicken"
2. Select "No Nuts"
3. Search chicken + nut-free Chicken recipes that are nut-free appear Works, both rules applied PASS
TC-CCM-025 Filter with no matching recipes 1. Type in "Eggs" into excluded ingredients
2. Apply no eggs "No recipes found" message displayed Shows message saying no recipes found PASS
TC-CCM-026 Clear allergy filters 1. Apply "No Dairy"
2. Click "Clear Filters" click clear filter while filters are applied All allergy filters removed; full list returns Works — filter cleared, returns all PASS
TC-CCM-027 Allergy filter refreshes after page refresh 1. Apply "No Peanuts"
2. Refresh page no peanuts Filter remains applied (if system is designed for persistence) State of filters not stored anywhere, resets PASS
TC-CCM-028 Invalid allergy selection input 1. Attempt to enter custom allergen manually "no mangoes" No check box to choose Can not be applied PASS
TC-CCM-029 Conflicting allergy filters 1. Select "Only dairy" AND "No dairy" conflicting filters Error message no result / recipe not found PASS
TC-CCM-030 Display allergy icons on results 1. Apply "No Nuts"
2. Search no nuts Each recipe excludes the proper allergens allergens are only excluded correctly sometimes FAIL
## Test Cases - Hiba's User Stories
### User Story 1: As CourtneyChaosMom, I want to enter leftover ingredients into a search bar so that I can see recipes that use them.
| Test Case ID | Test Scenario | Test Steps | Test Data | Expected Results | Actual Results | Pass/Fail |
| TC-CCM-001 | Search with multiple valid ingredients | 1. Go to search page<br>2. Enter "chicken, rice, broccoli"<br>3. Click Search | chicken, rice, broccoli | Recipes containing ALL three ingredients appear | No results | FAIL |
| TC-CCM-002 | Search with one ingredient | 1. Go to search page<br>2. Enter "rice"<br>3. Click Search | rice | Recipes containing rice appear | Works — finds matches using ILIKE | PASS |
| TC-CCM-003 | Ingredient not found | 1. Enter "quinoa flakes"<br>2. Click Search | quinoa flakes | "No recipes found" message appears | Returns empty recipes: [] | PASS |
| TC-CCM-004 | Search with duplicated ingredients | 1. Enter "rice, rice, rice"<br>2. Click Search | rice, rice, rice | Same result as single "rice"; no duplicates used | Normalized → same query → same result | PASS |
| TC-CCM-005 | Search with extra spaces | 1. Enter " chicken , rice , broccoli "<br>2. Click Search | (with extra spaces) | Recipes containing chicken, rice, and broccoli appear | normalizeWord handles trim → works | PASS |
| TC-CCM-006 | Search with uppercase/lowercase mix | 1. Enter "CHICKEN, Rice, BROCCOLI"<br>2. Click Search | Mixed case | Correct recipes appear | .toLowerCase() + ILIKE makes search case-insensitive | PASS |
| TC-CCM-007 | Search with partial ingredient match | 1. Enter "broc"<br>2. Click Search | broc | Either: No results | Because of %broc%, broccoli matches → returns recipes | FAIL |
| TC-CCM-008 | Search with invalid characters | 1. Enter "rice!!!"<br>2. Click Search | rice!!! | Error message | No sanitizing, treated literally, e.g. rice!!! won't match → 0 results, no error | PASS |
| TC-CCM-009 | Search with empty input | 1. Leave input blank<br>2. Click Search | "" | Prompt user to enter ingredients and show all recipes | q = '' → ILIKE %% → returns ALL recipes | PASS |
| TC-CCM-010 | Search with many ingredients at once | 1. Enter long list: "chicken, rice, cheese, carrots, onion, celery, beans, corn, tomatoes"<br>2. Click Search | 9 ingredients | Recipes requiring all listed ingredients appear | Works as OR search → shows recipes containing any | FAIL |
### User Story 2: As CourtneyChaosMom, I want to filter recipes by allergies so that all my children can safely eat the meals.
| Test Case ID | Test Scenario | Test Steps | Test Data | Expected Results | Actual Results | Pass/Fail |
| TC-CCM-021 | Filter by single allergy (no dairy) | 1. Open Filter<br>2. Select "No Dairy"<br>3. Click Apply | no dairy | Only dairy-free recipes appear | Works if correct check box is chosen | PASS |
| TC-CCM-022 | Filter by multiple allergies | 1. Select "No Dairy" + "No Peanuts"<br>2. Click Search | no dairy, no peanuts | Only recipes meeting both restrictions appear | Works. Adds multiple NOT @> clauses | PASS |
| TC-CCM-023 | Allergy filter with cuisine filters | 1. Select Cuisine = Italian<br>2. Select "No Dairy"<br>3. Click Search | Italian + no dairy | Italian dairy-free recipes appear | Works: LOWER(cuisine)=... AND NOT(allergens @>) | PASS |
| TC-CCM-024 | Allergy filter with ingredient search | 1. Enter ingredient "chicken"<br>2. Select "No Nuts"<br>3. Search | chicken + nut-free | Chicken recipes that are nut-free appear | Works, both rules applied | PASS |
| TC-CCM-025 | Filter with no matching recipes | 1. Type in "Eggs" into excluded ingredients<br>2. Apply | no eggs | "No recipes found" message displayed | Shows message saying no recipes found | PASS |
| TC-CCM-026 | Clear allergy filters | 1. Apply "No Dairy"<br>2. Click "Clear Filters" | click clear filter while filters are applied | All allergy filters removed; full list returns | Works — filter cleared, returns all | PASS |
| TC-CCM-027 | Allergy filter refreshes after page refresh | 1. Apply "No Peanuts"<br>2. Refresh page | no peanuts | Filter remains applied (if system is designed for persistence) | State of filters not stored anywhere, resets | PASS |
| TC-CCM-028 | Invalid allergy selection input | 1. Attempt to enter custom allergen manually | "no mangoes" | No check box to choose | Can not be applied | PASS |
| TC-CCM-029 | Conflicting allergy filters | 1. Select "Only dairy" AND "No dairy" | conflicting filters | Error message | no result / recipe not found | PASS |
| TC-CCM-030 | Display allergy icons on results | 1. Apply "No Nuts"<br>2. Search | no nuts | Each recipe excludes the proper allergens | allergens are only excluded correctly sometimes | FAIL |