Update Deliverable_3 authored by Hooria Fatima (xcm172)'s avatar Hooria Fatima (xcm172)
......@@ -496,6 +496,49 @@ As GrandGourmetGary, I want to see how my recipes are performing compared to oth
| **TC29 – US3** | New recipe affects score | Create recipe → Update score | Score +15 | Rank updates +15 | Updated by 15 | Pass |
| **TC30 – US3** | View chef score breakdown | Home → Click “\>” | — | Chef score + graph displayed | Score + pie graph shown | Pass |
```markdown
## Testcases - Aron
## **User Story 3 – AI Recipe Generation (10 Test Cases)**
### User Story:
As Campus Chris, I want to enter specific ingredients I already have, then the system should automatically (using AI) generate a new recipe that adapts to those ingredients, customizing quantities, cooking time, and any missing items with substitutions.
| Test Case ID | Test Scenario | Test Steps | Test Data | Expected Result | Actual Result | Pass/Fail |
|--------------|---------------|------------|-----------|------------------|---------------|-----------|
| **TC-TT-021 – US3** | AI recipe generation happy path | Enter "chicken, rice, garlic" → Click Generate Recipe | ingredients: chicken, rice, garlic | AI returns full customized recipe (quantities + cooking time) | --- | --- |
| **TC-TT-022 – US3** | Validate ingredient field required | Leave ingredient field empty → Click Generate | ingredients: "" | Error: "Please enter at least one ingredient" | --- | --- |
| **TC-TT-023 – US3** | AI handles 1 ingredient | Enter "eggs" → Generate | ingredients: eggs | AI generates simple recipe or suggests missing items | --- | --- |
| **TC-TT-024 – US3** | AI generates substitutions | Enter "pasta, tomato" → Generate | ingredients: pasta, tomato | At least 1 substitution shown | --- | --- |
| **TC-TT-025 – US3** | AI customizes cooking time | Enter ingredients → Generate | ingredients: ground beef, onions | Output includes cooking duration | --- | --- |
| **TC-TT-026 – US3** | AI customizes ingredient quantities | Enter "potatoes, butter" → Generate | ingredients: potatoes, butter | Recipe lists measurable quantities | --- | --- |
| **TC-TT-027 – US3** | AI handles long ingredient list | Enter 12 ingredients → Generate | ingredients: long list | Valid structured recipe still produced | --- | --- |
| **TC-TT-028 – US3** | AI rejects invalid characters | Enter "@@@🔥🔥" → Generate | ingredients: @@@🔥🔥 | Error: "Invalid ingredient input" | --- | --- |
| **TC-TT-029 – US3** | AI handles rare ingredients | Enter "saffron" → Generate | ingredients: saffron | AI gives recipe or alternatives | --- | --- |
| **TC-TT-030 – US3** | Displays loading state during AI fetch | Enter ingredients → Generate | ingredients: chicken, onions | Shows "Loading…" animation during fetch | --- | --- |
---
## **User Story 4 – Favourite Recipes (10 Test Cases)**
### User Story:
As Campus Chris, I want to create a list that contains my favourite recipes.
| Test Case ID | Test Scenario | Test Steps | Test Data | Expected Result | Actual Result | Pass/Fail |
|--------------|---------------|------------|-----------|------------------|---------------|-----------|
| **TC-TT-031 – US4** | Add recipe to favourites happy path | Open recipe → Click "Add to Favourites" | recipeId: 101 | Recipe added + confirmation toast | --- | --- |
| **TC-TT-032 – US4** | Prevent duplicate favourites | Click "Add to Favourites" twice | recipeId: 101 | Error: "Already in favourites" | --- | --- |
| **TC-TT-033 – US4** | Remove recipe from favourites | Open favourites → Click Remove | recipeId: 204 | Item removed, list updates | --- | --- |
| **TC-TT-034 – US4** | Empty favourites list | Navigate to Favourites page | none | Shows "No favourite recipes yet" | --- | --- |
| **TC-TT-035 – US4** | Persistence across sessions | Add favourite → Logout → Login → Check | recipeId: 501 | Favourite still saved | --- | --- |
| **TC-TT-036 – US4** | Favourites load within 2 seconds | Go to Favourites page | none | List loads < 2 seconds | --- | --- |
| **TC-TT-037 – US4** | Requires authentication | Logged out → Click "Add to Favourites" | recipeId: 88 | Redirect to Login page | --- | --- |
| **TC-TT-038 – US4** | Heart icon state correct | View recipe card | recipeId: 303 | Filled heart = favourited, outline = not | --- | --- |
| **TC-TT-039 – US4** | Favourites show recipe details | Open Favourites page | recipeId: random | Displays title, image, cook time, ingredients | --- | --- |
| **TC-TT-040 – US4** | Backend failure handling | Simulate server error → Add favourite | recipeId: 300 | Error toast: "Unable to save favourite" | --- | --- |
``````markdown
## **_Test Cases - Hooria_**
### **User Story - 1**: As AnnaAllergyAware, I can filter recipes by multiple allergens (e.g., nuts, gluten, dairy) so that I only see safe meal options tailored to my dietary needs.
......@@ -740,6 +783,52 @@ As GrandGourmetGary, I want to see how my recipes are performing compared to oth
**_Aron's Report to Hooriya_**
| Category | Inspection Question | Answer |
|----------|---------------------|--------|
| **General** | Does the code work as intended for the feature being reviewed (e.g., search, filters, comments, recipe upload, leaderboard)? | Yea |
| **General** | Is the code easy to read and understand without relying on external explanations? | Yea |
| **General** | Does the code follow our team’s conventions (React component naming, consistent indentation, meaningful variable names, clear folder structure)? | Yea |
| **General** | Is there any repeated logic that could be moved into shared utilities (e.g., API error handlers, database queries, form validation)? | Nah |
| **General** | Is the component or function modular, or is it doing more than one responsibility? | Modular |
| **General** | Are there unnecessary global variables or shared state values? | Nah |
| **General** | Is there commented-out code that should be removed? | Yea |
| **General** | Are loops, array maps, and async workflows properly controlled? | Yea |
| **General** | Do variable and function names clearly describe their purpose? | Yea |
| **Performance** | Are there any expensive operations running too often (re-fetches, un-memoized computations)? | Nah |
| **Performance** | Can built-in methods replace custom loops? | Nah |
| **Performance** | Are unnecessary console logs/debugging statements left in the code? | Yea |
| **Performance** | Are API calls grouped efficiently? | Yea |
| **Security** | Are backend inputs validated before being used in queries? | Yea |
| **Security** | Are database queries protected using parameterized queries (pg-pool)? | Yea |
| **Security** | Are errors from third-party tools handled properly? | Yea |
| **Security** | Are invalid parameters rejected with proper error responses? | Yea |
| **Security** | Are protected routes using authentication middleware correctly? | Yea |
| **Documentation** | Are comments meaningful where logic is not obvious? | Yea |
| **Documentation** | Are all API routes documented clearly? | Yea |
| **Documentation** | Are edge cases explained? | Yea |
| **Documentation** | Are third-party libraries used clearly? | Yea |
| **Documentation** | Are TODOs marked clearly? | Yea |
| **Documentation** | Are data structures explained? | Yea |
| **Testing** | Is the code structured to be testable? | Yea |
| **Testing** | Can functions be manually triggered for testing? | Yea |
| **Testing** | Are input validations testable? | Yea |
| **Testing** | Could custom logic be replaced with built-in utilities? | Nah |
| **Implementation** | Are descriptive variable names used consistently? | Yea |
| **Implementation** | Any confusing or similar variable names? | Nah |
| **Implementation** | Are state/backend variables initialized properly? | Yea |
| **Implementation** | Should non-local variables be moved inside functions? | Nah |
| **Implementation** | Should literal values (rating limits, pagination size) be constants? | Nah |
| **Implementation** | Are constants used for repetitive values? | Nah |
| **Implementation** | Are function/handler names descriptive? | Yea |
| **Implementation** | Are parameters validated before use? | Yea |
| **Implementation** | Do functions return correct structures/status codes? | Yea |
| **Implementation** | Any overflow or invalid calculation risks? | Nah |
| **Implementation** | Are parentheses/grouping used correctly? | Yea |
| **Implementation** | Are async operations handled safely? | Yea |
| **Implementation** | Do loops/branches terminate correctly? | Yea |
| **Implementation** | Are conditionals readable and complete? | Yea |
**_Hooriya's Report to Aron_**
| Category | Inspection Question | Answer|
| ------ | ------ | ------ |
......@@ -791,7 +880,7 @@ Team Contribution Breakdown
| Member | Work Completed | Contribution % |
|--------|----------------|----------------|
| Amna Shakeel | Worked on Deliverable 3: made test cases for my user stories, including search/filtering and commenting and rating. Tested these cases manually. Reviewed the searching/filter for Hiba. | 20% |
| John Aron Calderon | | 20% |
| John Aron Calderon | worked on middleware, fixed many auth bugs, error handling, front end ui and other helper functions and logic. | 20% |
| Hiba Ajaz | reviewed the Recipe creation/editing/deletion, AI recipe generation, frontend recipe forms, image upload handling, recipe display pages. Wrote tests for teh search and filter user stories. | 20% |
| Herin Patel | reviewed the comment and rating section for Amna .wrote and tested the testcases for 3 of my user stories. | 20% |
| Hooria Fatima | reviewed user signup/login/logout, Test cases for 2 user stories. | 20% |
......@@ -812,4 +901,6 @@ Amna's: I used ChatGPT to help format the test cases, clean up wording, and orga
Herin's: I used AI to review and help me in formatting my testcases, i also used it to format my suggestion. Wherever I used AI I made sure to review it properly first and tahn add it.
Aron: I used AI to review and format everything as well as help me brainstorm a few of the test cases.
Hooria's: I used AI to help me format and structure test cases.
\ No newline at end of file