diff --git a/__tests__/components/userDashboard/UserDashboardContent.test.tsx b/__tests__/components/userDashboard/UserDashboardContent.test.tsx new file mode 100644 index 00000000..aa7c3f01 --- /dev/null +++ b/__tests__/components/userDashboard/UserDashboardContent.test.tsx @@ -0,0 +1,89 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import UserDashboardContent from '@/components/User/DashboardContent/UserDashboardContent'; +import { useAuth } from '@/lib/context/AuthContext'; +import { useSessionTimer } from '@/lib/hooks/useSessionTimer'; + + +// Mock child components +jest.mock('@/components/Dashboard/UserSkills', () => { + const MockUserSkills = () =>
; + MockUserSkills.displayName = 'MockUserSkills'; + return MockUserSkills; +}); +jest.mock('@/components/Dashboard/SkillsRequested', () => ({ + SkillsRequested: () =>
, + SkillsOffered: () =>
+})); +jest.mock('@/components/Dashboard/ReviewSummary', () => ({ + ReviewSummary: () =>
+})); +jest.mock('@/components/Dashboard/EarnedBadges', () => { + const MockEarnedBadges = () =>
; + MockEarnedBadges.displayName = 'MockEarnedBadges'; + return MockEarnedBadges; +}); + +jest.mock('@/components/Dashboard/ProfileCard', () => { + const MockProfileCard = () =>
; + MockProfileCard.displayName = 'MockProfileCard'; + return MockProfileCard; +}); +jest.mock('@/components/Dashboard/TimeSpentChart', () => ({ + TimeSpentChart: () =>
+})); +jest.mock('@/components/Dashboard/SkillMatchOverview', () => { + const MockSkillMatchOverview = () =>
; + MockSkillMatchOverview.displayName = 'MockSkillMatchOverview'; + return MockSkillMatchOverview; +}); + +// Mock hooks +jest.mock('@/lib/context/AuthContext', () => ({ + useAuth: jest.fn() +})); +jest.mock('@/lib/hooks/useSessionTimer', () => ({ + useSessionTimer: jest.fn() +})); + +describe('UserDashboardContent', () => { + const mockUser = { + _id: '123', + firstName: 'Samha', + lastName: 'fathima' + }; + + beforeEach(() => { + (useAuth as jest.Mock).mockReturnValue({ user: mockUser }); + (useSessionTimer as jest.Mock).mockReturnValue(null); + }); + + it('renders greeting with user full name', () => { + render( + + ); + + expect(screen.getByText(/Hi Samha fathima, Welcome back!/i)).toBeInTheDocument(); + }); + + it('renders all child components when user is present', () => { + render( + + ); + + expect(screen.getByTestId('UserSkills')).toBeInTheDocument(); + expect(screen.getByTestId('SkillsRequested')).toBeInTheDocument(); + expect(screen.getByTestId('SkillsOffered')).toBeInTheDocument(); + expect(screen.getByTestId('ReviewSummary')).toBeInTheDocument(); + expect(screen.getByTestId('EarnedBadges')).toBeInTheDocument(); + expect(screen.getByTestId('ProfileCard')).toBeInTheDocument(); + expect(screen.getByTestId('TimeSpentChart')).toBeInTheDocument(); + expect(screen.getByTestId('SkillMatchOverview')).toBeInTheDocument(); + }); +}); diff --git a/__tests__/manual/adminSuggestionsManual.html b/__tests__/manual/adminSuggestionsManual.html new file mode 100644 index 00000000..f2f1ea1e --- /dev/null +++ b/__tests__/manual/adminSuggestionsManual.html @@ -0,0 +1,68 @@ + + + + Admin Suggestions Management Test Results + + + + +
+

Admin Suggestions Management - Test Execution Results

+

Tester: Fathima Samha

+

Version: Not specified

+

Browser: Chrome

+

Device: Desktop

+

Test Date: 2025-07-17

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Test NamePriorityPreconditionsTest StepsExpected ResultActual ResultStatus
1Error StateHIGHAPI returns error1. Simulate API error
2. Load Suggestions page
Error message shownError message displayed: "Failed to load suggestions"PASS
2Empty StateMEDIUMNo suggestions in DB1. Load Suggestions page"No suggestions found" message shownNo suggestions found message displayedPASS
3Search by NameHIGHSuggestions exist1. Enter name in search
2. Observe results
Only matching suggestions shownSearch filters suggestions by name correctlyPASS
4Search by TitleHIGHSuggestions exist1. Enter title in search
2. Observe results
Only matching suggestions shownSearch filters suggestions by title correctlyPASS
5Clear SearchMEDIUMSearch active1. Click clear buttonSearch input cleared, all suggestions shownSearch cleared, all suggestions displayedPASS
6Filter by CategoryMEDIUMMultiple categories exist1. Select category filterOnly suggestions in selected category shownCategory filter worksPASS
7Pagination Next/PrevHIGH>1 page of suggestions1. Click next/prev pageSuggestions list updates to correct pagePagination works, correct page shownPASS
8Pagination Direct PageMEDIUM>5 pages of suggestions1. Click a page numberSuggestions list updates to selected pageDirect page navigation worksPASS
9Approve SuggestionHIGHSuggestions exist1. Click approve on suggestionStatus updates to Approved, toast shownStatus updated, toast shownPASS
10Reject SuggestionHIGHSuggestions exist1. Click reject on suggestionStatus updates to Rejected, toast shownStatus updated, toast shownPASS
11View Suggestion DetailsMEDIUMSuggestions exist1. Click on suggestion row/cardModal opens with suggestion detailsModal opens, details shownPASS
12Close Suggestion ModalMEDIUMModal open1. Click close buttonModal closesModal closedPASS
13Open Summary ModalHIGHSuggestions exist1. Click "View Summary"Summary modal opensSummary modal opensPASS
14Close Summary ModalMEDIUMSummary modal open1. Click close buttonModal closesModal closedPASS
15Summary Modal Error StateHIGHAPI returns error1. Simulate API error
2. Open summary modal
Error message shownError message displayed: "Failed to load summary"PASS
16Summary Modal Empty StateMEDIUMNo pending suggestions1. Open summary modal"No pending suggestions to summarize" shownMessage displayedPASS
17Summary Modal Insights TabHIGHSummary data exists1. Open summary modal
2. View Insights tab
Insights and analysis displayedInsights shownPASS
18Summary Modal Similarity TabHIGHSummary data exists1. Open summary modal
2. View Similarity tab
Similarity groups displayedSimilarity groups shownPASS
19Category Stats in SummaryMEDIUMSummary data exists1. Open summary modal
2. View category breakdown
Category stats shownCategory stats displayedPASS
20Action Recommendations in SummaryMEDIUMSummary data exists1. Open summary modal
2. View recommendations
Recommendations shownRecommendations displayedPASS
+ + + \ No newline at end of file diff --git a/__tests__/manual/adminUsersManual.html b/__tests__/manual/adminUsersManual.html new file mode 100644 index 00000000..810f7253 --- /dev/null +++ b/__tests__/manual/adminUsersManual.html @@ -0,0 +1,64 @@ + + + + Admin Users Management Test Results + + + + +
+

Admin Users Management - Test Execution Results

+

Tester: Fathima Samha

+

Version: Not specified

+

Browser: Chrome

+

Device: Desktop

+

Test Date: 2025-07-17

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Test NamePriorityPreconditionsTest StepsExpected ResultActual ResultStatus
1Users List LoadsHIGHAdmin logged in1. Navigate to Users pageList of users loads, shows user infoUser list loaded, all info visiblePASS
3Error StateHIGHAPI returns error1. Simulate API error
2. Load Users page
Error message shownError message displayed: "Failed to fetch users"PASS
4Empty StateMEDIUMNo users in DB1. Load Users page"No users found" message shownNo users found message displayedPASS
5Search by NameHIGHUsers exist1. Enter name in search
2. Observe results
Only matching users shownSearch filters users by name correctlyPASS
6Search by EmailHIGHUsers exist1. Enter email in search
2. Observe results
Only matching users shownSearch filters users by email correctlyPASS
7Search by TitleMEDIUMUsers exist1. Enter title in search
2. Observe results
Only matching users shownSearch filters users by title correctlyPASS
8Clear SearchMEDIUMSearch active1. Click clear buttonSearch input cleared, all users shownSearch cleared, all users displayedPASS
9Pagination Next/PrevHIGH>1 page of users1. Click next/prev pageUser list updates to correct pagePagination works, correct page shownPASS
10Pagination Direct PageMEDIUM>5 pages of users1. Click a page numberUser list updates to selected pageDirect page navigation worksPASS
11Change Page SizeMEDIUMUsers exist1. Change page size dropdownUser list updates, correct # per pagePage size changes, correct number shownPASS
12Sort by NameHIGHUsers exist1. Sort by first/last nameList sorted correctlySort by name works as expectedPASS
13Sort by EmailMEDIUMUsers exist1. Sort by emailList sorted correctlySort by email works as expectedPASS
14Sort by Created AtMEDIUMUsers exist1. Sort by created dateList sorted correctlySort by created date worksPASS
15Sort Order ToggleMEDIUMUsers exist1. Toggle sort orderList order reversesSort order toggles as expectedPASS
16Delete User (Soft)HIGHUsers exist1. Click delete on user
2. Confirm in modal
User removed from list, toast shownUser deleted, toast shownPASS
17Cancel DeleteMEDIUMUsers exist1. Click delete
2. Cancel modal
No user deleted, modal closesModal closed, no user deletedPASS
+ + + \ No newline at end of file diff --git a/__tests__/manual/feedbackManual.html b/__tests__/manual/feedbackManual.html new file mode 100644 index 00000000..c679fdee --- /dev/null +++ b/__tests__/manual/feedbackManual.html @@ -0,0 +1,65 @@ + + + + Feedback Form Test Results + + + + +
+

Feedback Form - Test Execution Results

+

Tester: Fathima Samha

+

Version: Not specified

+

Browser: Chrome

+

Device: Desktop

+

Test Date: 2025-07-17

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Test NamePriorityPreconditionsTest StepsExpected ResultActual ResultStatus
1Feedback RequiredHIGHOn Feedback form1. Leave Feedback empty
2. Submit
Error: "Feedback must be at least 10 characters long"Error shownPASS
2Feedback Only SpacesHIGHOn Feedback form1. Enter only spaces in Feedback
2. Submit
Error: "Feedback cannot be only spaces"Error shownPASS
3Feedback Not Enough LettersHIGHOn Feedback form1. Enter "1234567890" in Feedback
2. Submit
Error: "Feedback must contain at least 10 letters"Error shownPASS
4Feedback Too ShortHIGHOn Feedback form1. Enter "short" in Feedback
2. Submit
Error: "Feedback must be at least 10 characters long"Error shownPASS
5Valid FeedbackHIGHOn Feedback form1. Enter valid feedback (10+ letters)
2. Submit
Feedback submitted, success message shownSuccess message shownPASS
6Rating RequiredHIGHOn Feedback form1. Deselect all ratings
2. Submit
Error: "Required" or similarError shownPASS
7Rating Min/MaxHIGHOn Feedback form1. Select rating below 1 or above 5 (if possible)
2. Submit
Error: "Rating must be between 1 and 5"Not possible in UIPASS
8Zero RatingHIGHOn Feedback form1. Set rating to 0 (if possible)
2. Submit
Error: "Rating must be between 1 and 5"Error shownFAIL
9Anonymous OptionMEDIUMOn Feedback form1. Check "Submit as anonymous"
2. Submit valid feedback
Feedback submitted as anonymousSuccess, no name shownPASS
10Display Name ValidationMEDIUMOn Feedback form1. Enter "12" as Display Name
2. Submit
Error: "Display name must contain at least 3 letters"Error shownPASS
11Display Name ValidMEDIUMOn Feedback form1. Enter "Samha" as Display Name
2. Submit valid feedback
Feedback submitted, name shownSuccess, name shownPASS
12Success Story OptionalMEDIUMOn Feedback form1. Leave Success Story empty
2. Submit valid feedback
Feedback submitted, no errorSuccessPASS
13Success Story Required When AllowedHIGHOn Feedback form1. Check "Allow to post as success story"
2. Leave Success Story empty
3. Submit
Error: "Success story must contain at least 10 letters"Error shownPASS
14Success Story Not Enough LettersHIGHOn Feedback form1. Check "Allow to post as success story"
2. Enter "1234567890" in Success Story
3. Submit
Error: "Success story must contain at least 10 letters"Error shownPASS
15Valid Success StoryHIGHOn Feedback form1. Check "Allow to post as success story"
2. Enter valid story (10+ letters)
3. Submit
Feedback submitted, success message shownSuccess message shownPASS
16Form Reset After SubmitMEDIUMOn Feedback form1. Submit valid feedback
2. Observe form
Form resets, fields clearedForm resetPASS
17API Error on SubmitMEDIUMOn Feedback form1. Simulate API error
2. Submit valid feedback
Error toast shownError toast shownPASS
+ + + \ No newline at end of file diff --git a/__tests__/manual/profileSettings.html b/__tests__/manual/profileSettings.html new file mode 100644 index 00000000..dff556f9 --- /dev/null +++ b/__tests__/manual/profileSettings.html @@ -0,0 +1,68 @@ + + + + Profile Settings Test Results + + + + +
+

Profile Settings - Test Execution Results

+

Tester: Fathima Samha

+

Version: Not specified

+

Browser: Chrome

+

Device: Desktop

+

Test Date: 2025-07-17

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Test NamePriorityPreconditionsTest StepsExpected ResultActual ResultStatus
1Profile Loads for Authenticated UserHIGHUser is logged in1. Navigate to Profile SettingsProfile form loads with user dataForm loaded, data shownPASS
2Edit Profile Button WorksHIGHProfile loaded1. Click "Edit Profile"Fields become editable, Save/Discard buttons appearFields editablePASS
3Cancel Edit Discards ChangesHIGHIn edit mode1. Change a field
2. Click "Cancel"
Changes are not saved, view mode restoredChanges discardedPASS
4Discard Changes ButtonHIGHIn edit mode1. Change a field
2. Click "Discard Changes"
Changes are not saved, view mode restoredChanges discardedPASS
5Save Changes ButtonHIGHIn edit mode1. Change a field
2. Click "Save Changes"
Changes are saved, success message shownChanges saved, message shownPASS
6First Name RequiredHIGHIn edit mode1. Clear First Name
2. Try to save
Browser shows required field errorError shown, cannot savePASS
7Last Name RequiredHIGHIn edit mode1. Clear Last Name
2. Try to save
Browser shows required field errorError shown, cannot savePASS
8Email RequiredHIGHIn edit mode1. Clear Email
2. Try to save
Browser shows required field errorError shown, cannot savePASS
9Email Format ValidationHIGHIn edit mode1. Enter "notanemail" in Email
2. Try to save
Browser shows invalid email errorError shown, cannot savePASS
10Phone OptionalMEDIUMIn edit mode1. Clear Phone
2. Save
Profile saves without phoneSaved, no errorPASS
11Title OptionalMEDIUMIn edit mode1. Clear Title
2. Save
Profile saves without titleSaved, no errorPASS
12Avatar Upload Accepts ImageHIGHIn edit mode1. Click avatar
2. Upload valid image file
Avatar preview updates, can savePreview updates, savedPASS
13Avatar Upload Rejects Non-ImageHIGHIn edit mode1. Try to upload .txt or .pdf fileFile not accepted, no previewFile not acceptedPASS
14Avatar Upload CancelMEDIUMIn edit mode1. Click avatar
2. Cancel file dialog
No change to avatarNo changePASS
15Large Image UploadMEDIUMIn edit mode1. Upload very large imagePreview updates, very slowNot testedNOT EXECUTED
16Save With All Fields ChangedHIGHIn edit mode1. Change all fields
2. Save
All changes saved, message shownAll changes savedPASS
17Save With No ChangesLOWIn edit mode1. Click Save without changing anythingNo error, message shownNo error, message shownPASS
18Network Error on SaveMEDIUMIn edit mode1. Disconnect network
2. Try to save
Error message shownError shownPASS
20Profile Loads With Missing DataLOWUser has missing fields1. Navigate to Profile SettingsFields show "Not provided""Not provided" shownPASS
21Avatar Loads Default If NoneLOWUser has no avatar1. Navigate to Profile SettingsDefault avatar shownDefault shownPASS
+ + + \ No newline at end of file diff --git a/__tests__/manual/userDashoard.html b/__tests__/manual/userDashoard.html new file mode 100644 index 00000000..f64a5a6b --- /dev/null +++ b/__tests__/manual/userDashoard.html @@ -0,0 +1,178 @@ + + + + User Dashboard Test Results + + + + +
+

User Dashboard - Test Execution Results

+

Tester: Fathima Samha

+

Version: Not specified

+

Browser: Chrome

+

Device: Desktop

+

Test Date: 2025-07-17

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Test NamePriorityPreconditionsTest StepsExpected ResultActual ResultStatus
1Dashboard Loads for Authenticated UserHIGHUser is logged in1. Navigate to /dashboardDashboard greets user by name and loads contentLoaded with "Hi Fathima Samhanpm run , Welcome back!"PASS
2ProfileCard Component RendersHIGHUser has valid userId1. Check right sidebar
2. Confirm profile card is visible
Profile card with user data appearsProfile shownPASS
3SkillsRequested Section RendersHIGHUser is logged in1. Scroll to main column
2. Confirm "Skills Requested" section shows
SkillsRequested component renders with dataSection displayedPASS
4SkillsOffered Section RendersHIGHUser is logged in1. Locate "Skills Offered" sectionSkillsOffered component is visible and styledSection rendered as expectedPASS
5UserSkills Component View MoreMEDIUMUser on dashboard1. Click "View More" in UserSkills component`onNavigateToMySkills` handler is triggeredNavigation triggeredPASS
6ReviewSummary Shows When User ExistsHIGHUser is logged in1. Scroll to Review section
2. Check if ReviewSummary is rendered
ReviewSummary visible with review statsComponent visiblePASS
7EarnedBadges Shows When User ExistsMEDIUMUser is logged in1. Scroll down to "Badges"Badges with earned info should be visibleBadges loadedPASS
8TimeSpentChart Component LoadsHIGHUser is logged in1. Locate "Time Spent" box
2. Confirm chart loads
Chart rendered with user statsChart loadedPASS
9SkillMatchOverview WorksMEDIUMUser is on dashboard1. Scroll to Skill Matches
2. Verify component renders
Component renders with "View All" hookRendered with no crashPASS
10Session Timer Hook Runs Without CrashMEDIUMUser has valid _id1. Load dashboard
2. Open dev tools console
No hook errors, timer starts silentlyNo errorsPASS
11“View All Reviews” Button AppearsMEDIUMUser has more than 3 reviews + 1. Navigate to Dashboard
+ 2. Scroll to Reviews section
+ 3. Observe review count
+ 4. Check if “View all reviews” button appears +
Button appears only if reviews > 3“View all 4 reviews →” button shownPASS
12Navigate to All Reviews PageMEDIUM“View all reviews” button is visible + 1. Click “View all 4 reviews →”
+ 2. Observe navigation
+ 3. Confirm all reviews are visible on target page +
User is taken to full reviews pageNavigated to `/reviews` and saw all reviewsPASS
+ + + \ No newline at end of file diff --git a/__tests__/manual/userSuggestions.html b/__tests__/manual/userSuggestions.html new file mode 100644 index 00000000..7f807c17 --- /dev/null +++ b/__tests__/manual/userSuggestions.html @@ -0,0 +1,341 @@ + + + + User Suggestions Test Results + + + + +
+

User Suggestions - Test Execution Results

+

Tester: Fathima Samha

+

Version: Not specified

+

Browser: Chrome

+

Device: Desktop

+

Test Date: 2025-07-17

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Test NamePriorityPreconditionsTest StepsExpected ResultActual ResultStatus
1Suggestions Tab LoadsHIGHUser is logged in1. Navigate to Dashboard
2. Go to Suggestions section/tab
Suggestions UI loads with "Submit Suggestion" and "Your History" tabsTabs loaded as expectedPASS
2Suggestion Form ValidationHIGHUser is on Suggestions tab1. Leave all fields empty
2. Click Submit
Validation errors for all fieldsAll validation errors shownPASS
3Title ValidationHIGHUser is on Suggestions tab1. Enter less than 3 letters in Title
2. Fill other fields validly
3. Submit
Error: "Title must be at least 3 characters after trimming"Error message shownPASS
4Description ValidationHIGHUser is on Suggestions tab1. Enter less than 10 letters in Description
2. Fill other fields validly
3. Submit
Error: "Description must be at least 10 characters after trimming"Error message shownPASS
5Category ValidationHIGHUser is on Suggestions tab1. Leave Category unselected
2. Fill other fields validly
3. Submit
Error: "Please select a category"Error message shownPASS
6aAll Fields EmptyHIGHOn Suggestions tab1. Leave all fields empty
2. Click Submit
Errors for Title, Description, CategoryAll validation errors shownPASS
6bTitle Too ShortHIGHOn Suggestions tab1. Enter "Hi" in Title
2. Fill other fields validly
3. Submit
Error: "Title must be at least 3 characters after trimming"Error message shownPASS
6cTitle Not Enough LettersHIGHOn Suggestions tab1. Enter "12@" in Title
2. Fill other fields validly
3. Submit
Error: "Title must contain at least 3 letters"Error message shownPASS
6dDescription Too ShortHIGHOn Suggestions tab1. Enter "Short" in Description
2. Fill other fields validly
3. Submit
Error: "Description must be at least 10 characters after trimming"Error message shownPASS
6eDescription Not Enough LettersHIGHOn Suggestions tab1. Enter "1234567890" in Description
2. Fill other fields validly
3. Submit
Error: "Description must contain at least 10 letters"Error message shownPASS
6fCategory Not SelectedHIGHOn Suggestions tab1. Fill Title and Description validly
2. Leave Category blank
3. Submit
Error: "Please select a category"Error message shownPASS
6gValid Input - IssueHIGHOn Suggestions tab1. Enter valid Title and Description
2. Select "Issue" as Category
3. Submit
Suggestion submitted, form clears, no errorsSuggestion submitted, form clearedPASS
6hValid Input - SuggestionHIGHOn Suggestions tab1. Enter valid Title and Description
2. Select "Suggestion" as Category
3. Submit
Suggestion submitted, form clears, no errorsSuggestion submitted, form clearedPASS
6iValid Input - Feature RequestHIGHOn Suggestions tab1. Enter valid Title and Description
2. Select "Feature Request" as Category
3. Submit
Suggestion submitted, form clears, no errorsSuggestion submitted, form clearedPASS
6jValid Input - OtherHIGHOn Suggestions tab1. Enter valid Title and Description
2. Select "Other" as Category
3. Submit
Suggestion submitted, form clears, no errorsSuggestion submitted, form clearedPASS
6kLeading/Trailing SpacesMEDIUMOn Suggestions tab1. Enter " Valid Title " and " Valid Description "
2. Select any Category
3. Submit
Suggestion submitted, form clears, no errorsSuggestion submitted, form clearedPASS
6lSpecial Characters in TitleMEDIUMOn Suggestions tab1. Enter "Hello!@#" in Title
2. Valid Description and Category
3. Submit
Suggestion submitted if at least 3 lettersSuggestion submittedPASS
6mSpecial Characters in DescriptionMEDIUMOn Suggestions tab1. Enter valid Title
2. Enter "This is a test!@#" in Description
3. Valid Category
4. Submit
Suggestion submitted if at least 10 lettersSuggestion submittedPASS
6nTitle: 123@gh (Not Enough Letters)HIGHOn Suggestions tab1. Enter "123@gh" in Title
2. Valid Description and Category
3. Submit
Error: "Title must contain at least 3 letters"Error message shownPASS
6oTitle: 123@bug (Enough Letters)HIGHOn Suggestions tab1. Enter "123@bug" in Title
2. Valid Description and Category
3. Submit
No error, suggestion submittedSuggestion submittedPASS
6pDescription: 1234567@gh (Not Enough Letters)HIGHOn Suggestions tab1. Enter valid Title
2. Enter "1234567@gh" in Description
3. Valid Category
4. Submit
Error: "Description must contain at least 10 letters"Error message shownPASS
6qDescription: 1234567@ghijklmnopqrst (Enough Letters)HIGHOn Suggestions tab1. Enter valid Title
2. Enter "1234567@ghijkl" in Description
3. Valid Category
4. Submit
No error, suggestion submittedSuggestion submittedPASS
7Submit Valid SuggestionHIGHUser is on Suggestions tab1. Fill all fields validly
2. Submit
Suggestion is submitted, form clears, history tab updatesSuggestion submitted, history updatedPASS
8Suggestion Appears in HistoryHIGHUser has submitted a suggestion1. Switch to "Your History" tabSubmitted suggestion appears as a card with correct title, description, category, and statusCard shown with correct infoPASS
9Category & Status Badges RenderMEDIUMUser has suggestions in history1. View suggestion cards in historyEach card shows colored badges for category and statusBadges rendered as expectedPASS
10Filter Suggestions by StatusMEDIUMUser has multiple suggestions with different statuses1. Use status filter dropdown
2. Select "Pending", "Approved", "Rejected"
Only suggestions with selected status are shownFilter works for all statusesPASS
11Filter Suggestions by CategoryMEDIUMUser has suggestions in multiple categories1. Use category filter dropdown
2. Select a category
Only suggestions in selected category are shownCategory filter worksPASS
12Feedback Prompt AppearsLOWUser is on Suggestions tab1. Observe top of Suggestions sectionFeedback prompt with "Give Feedback" button is visiblePrompt shownPASS
13Feedback Prompt DismissLOWFeedback prompt is visible1. Click "×" on feedback promptPrompt disappearsPrompt dismissedPASS
+ + + \ No newline at end of file