diff --git a/.github/workflows/badge-assignment.yml b/.github/workflows/badge-assignment.yml deleted file mode 100644 index ff759626..00000000 --- a/.github/workflows/badge-assignment.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Daily Badge Assignment - -on: - schedule: - # Runs daily at midnight UTC (adjust timezone as needed) - - cron: "0 0 * * *" - - # Allow manual trigger - workflow_dispatch: - -jobs: - assign-badges: - runs-on: ubuntu-latest - - steps: - - name: Call Badge Assignment API - run: | - curl -X POST \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer ${{ secrets.CRON_SECRET }}" \ - ${{ secrets.APP_URL }}/api/badge-assignments - env: - CRON_SECRET: ${{ secrets.CRON_SECRET }} - APP_URL: ${{ secrets.APP_URL }} diff --git a/.github/workflows/ci-build-check.yml b/.github/workflows/ci-build-check.yml new file mode 100644 index 00000000..b07ea6d5 --- /dev/null +++ b/.github/workflows/ci-build-check.yml @@ -0,0 +1,119 @@ +name: CI - Build and Test + +on: + # Trigger on pull requests to main branch + pull_request: + branches: [ main, master ] + + # Trigger on pushes to main branch (merges) + push: + branches: [ main, master ] + + # Allow manual trigger + workflow_dispatch: + +jobs: + build-and-test: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [18.x, 20.x] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test + continue-on-error: false + env: + CI: true + + - name: Build application + run: npm run build + continue-on-error: false + env: + CI: true + + - name: Check build output + run: | + if [ ! -d ".next" ]; then + echo "Build failed - .next directory not found" + exit 1 + fi + echo "Build successful - .next directory exists" + + - name: Upload build artifacts (on failure) + if: failure() + uses: actions/upload-artifact@v4 + with: + name: build-logs-${{ matrix.node-version }} + path: | + .next/ + npm-debug.log* + yarn-debug.log* + yarn-error.log* + retention-days: 5 + + # Additional job for documentation build (if needed) + build-docs: + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + cache: 'npm' + + - name: Install main dependencies + run: npm ci + + - name: Install documentation dependencies + run: | + cd documentation + npm ci + + - name: Build documentation + run: | + cd documentation + npm run build + continue-on-error: false + + # Security and quality checks + security-audit: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Run security audit + run: npm audit --audit-level=high + continue-on-error: true + + - name: Check for outdated packages + run: npm outdated || true diff --git a/.github/workflows/pr-quality-check.yml b/.github/workflows/pr-quality-check.yml new file mode 100644 index 00000000..fe475f59 --- /dev/null +++ b/.github/workflows/pr-quality-check.yml @@ -0,0 +1,32 @@ +name: PR Quality Check + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: + contents: read + pull-requests: write + issues: write + +jobs: + quick-check: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.x' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Build check + run: npm run build + env: + CI: true 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( +Tester: Fathima Samha
+Version: Not specified
+Browser: Chrome
+Device: Desktop
+Test Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | Error State | HIGH | API returns error | 1. Simulate API error 2. Load Suggestions page | Error message shown | Error message displayed: "Failed to load suggestions" | PASS |
| 2 | Empty State | MEDIUM | No suggestions in DB | 1. Load Suggestions page | "No suggestions found" message shown | No suggestions found message displayed | PASS |
| 3 | Search by Name | HIGH | Suggestions exist | 1. Enter name in search 2. Observe results | Only matching suggestions shown | Search filters suggestions by name correctly | PASS |
| 4 | Search by Title | HIGH | Suggestions exist | 1. Enter title in search 2. Observe results | Only matching suggestions shown | Search filters suggestions by title correctly | PASS |
| 5 | Clear Search | MEDIUM | Search active | 1. Click clear button | Search input cleared, all suggestions shown | Search cleared, all suggestions displayed | PASS |
| 6 | Filter by Category | MEDIUM | Multiple categories exist | 1. Select category filter | Only suggestions in selected category shown | Category filter works | PASS |
| 7 | Pagination Next/Prev | HIGH | >1 page of suggestions | 1. Click next/prev page | Suggestions list updates to correct page | Pagination works, correct page shown | PASS |
| 8 | Pagination Direct Page | MEDIUM | >5 pages of suggestions | 1. Click a page number | Suggestions list updates to selected page | Direct page navigation works | PASS |
| 9 | Approve Suggestion | HIGH | Suggestions exist | 1. Click approve on suggestion | Status updates to Approved, toast shown | Status updated, toast shown | PASS |
| 10 | Reject Suggestion | HIGH | Suggestions exist | 1. Click reject on suggestion | Status updates to Rejected, toast shown | Status updated, toast shown | PASS |
| 11 | View Suggestion Details | MEDIUM | Suggestions exist | 1. Click on suggestion row/card | Modal opens with suggestion details | Modal opens, details shown | PASS |
| 12 | Close Suggestion Modal | MEDIUM | Modal open | 1. Click close button | Modal closes | Modal closed | PASS |
| 13 | Open Summary Modal | HIGH | Suggestions exist | 1. Click "View Summary" | Summary modal opens | Summary modal opens | PASS |
| 14 | Close Summary Modal | MEDIUM | Summary modal open | 1. Click close button | Modal closes | Modal closed | PASS |
| 15 | Summary Modal Error State | HIGH | API returns error | 1. Simulate API error 2. Open summary modal | Error message shown | Error message displayed: "Failed to load summary" | PASS |
| 16 | Summary Modal Empty State | MEDIUM | No pending suggestions | 1. Open summary modal | "No pending suggestions to summarize" shown | Message displayed | PASS |
| 17 | Summary Modal Insights Tab | HIGH | Summary data exists | 1. Open summary modal 2. View Insights tab | Insights and analysis displayed | Insights shown | PASS |
| 18 | Summary Modal Similarity Tab | HIGH | Summary data exists | 1. Open summary modal 2. View Similarity tab | Similarity groups displayed | Similarity groups shown | PASS |
| 19 | Category Stats in Summary | MEDIUM | Summary data exists | 1. Open summary modal 2. View category breakdown | Category stats shown | Category stats displayed | PASS |
| 20 | Action Recommendations in Summary | MEDIUM | Summary data exists | 1. Open summary modal 2. View recommendations | Recommendations shown | Recommendations displayed | PASS |
Tester: Fathima Samha
+Version: Not specified
+Browser: Chrome
+Device: Desktop
+Test Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | Users List Loads | HIGH | Admin logged in | 1. Navigate to Users page | List of users loads, shows user info | User list loaded, all info visible | PASS |
| 3 | Error State | HIGH | API returns error | 1. Simulate API error 2. Load Users page | Error message shown | Error message displayed: "Failed to fetch users" | PASS |
| 4 | Empty State | MEDIUM | No users in DB | 1. Load Users page | "No users found" message shown | No users found message displayed | PASS |
| 5 | Search by Name | HIGH | Users exist | 1. Enter name in search 2. Observe results | Only matching users shown | Search filters users by name correctly | PASS |
| 6 | Search by Email | HIGH | Users exist | 1. Enter email in search 2. Observe results | Only matching users shown | Search filters users by email correctly | PASS |
| 7 | Search by Title | MEDIUM | Users exist | 1. Enter title in search 2. Observe results | Only matching users shown | Search filters users by title correctly | PASS |
| 8 | Clear Search | MEDIUM | Search active | 1. Click clear button | Search input cleared, all users shown | Search cleared, all users displayed | PASS |
| 9 | Pagination Next/Prev | HIGH | >1 page of users | 1. Click next/prev page | User list updates to correct page | Pagination works, correct page shown | PASS |
| 10 | Pagination Direct Page | MEDIUM | >5 pages of users | 1. Click a page number | User list updates to selected page | Direct page navigation works | PASS |
| 11 | Change Page Size | MEDIUM | Users exist | 1. Change page size dropdown | User list updates, correct # per page | Page size changes, correct number shown | PASS |
| 12 | Sort by Name | HIGH | Users exist | 1. Sort by first/last name | List sorted correctly | Sort by name works as expected | PASS |
| 13 | Sort by Email | MEDIUM | Users exist | 1. Sort by email | List sorted correctly | Sort by email works as expected | PASS |
| 14 | Sort by Created At | MEDIUM | Users exist | 1. Sort by created date | List sorted correctly | Sort by created date works | PASS |
| 15 | Sort Order Toggle | MEDIUM | Users exist | 1. Toggle sort order | List order reverses | Sort order toggles as expected | PASS |
| 16 | Delete User (Soft) | HIGH | Users exist | 1. Click delete on user 2. Confirm in modal | User removed from list, toast shown | User deleted, toast shown | PASS |
| 17 | Cancel Delete | MEDIUM | Users exist | 1. Click delete 2. Cancel modal | No user deleted, modal closes | Modal closed, no user deleted | PASS |
Tester: Fathima Samha
+Version: Not specified
+Browser: Chrome
+Device: Desktop
+Test Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | Feedback Required | HIGH | On Feedback form | 1. Leave Feedback empty 2. Submit | Error: "Feedback must be at least 10 characters long" | Error shown | PASS |
| 2 | Feedback Only Spaces | HIGH | On Feedback form | 1. Enter only spaces in Feedback 2. Submit | Error: "Feedback cannot be only spaces" | Error shown | PASS |
| 3 | Feedback Not Enough Letters | HIGH | On Feedback form | 1. Enter "1234567890" in Feedback 2. Submit | Error: "Feedback must contain at least 10 letters" | Error shown | PASS |
| 4 | Feedback Too Short | HIGH | On Feedback form | 1. Enter "short" in Feedback 2. Submit | Error: "Feedback must be at least 10 characters long" | Error shown | PASS |
| 5 | Valid Feedback | HIGH | On Feedback form | 1. Enter valid feedback (10+ letters) 2. Submit | Feedback submitted, success message shown | Success message shown | PASS |
| 6 | Rating Required | HIGH | On Feedback form | 1. Deselect all ratings 2. Submit | Error: "Required" or similar | Error shown | PASS |
| 7 | Rating Min/Max | HIGH | On Feedback form | 1. Select rating below 1 or above 5 (if possible) 2. Submit | Error: "Rating must be between 1 and 5" | Not possible in UI | PASS |
| 8 | Zero Rating | HIGH | On Feedback form | 1. Set rating to 0 (if possible) 2. Submit | Error: "Rating must be between 1 and 5" | Error shown | FAIL |
| 9 | Anonymous Option | MEDIUM | On Feedback form | 1. Check "Submit as anonymous" 2. Submit valid feedback | Feedback submitted as anonymous | Success, no name shown | PASS |
| 10 | Display Name Validation | MEDIUM | On Feedback form | 1. Enter "12" as Display Name 2. Submit | Error: "Display name must contain at least 3 letters" | Error shown | PASS |
| 11 | Display Name Valid | MEDIUM | On Feedback form | 1. Enter "Samha" as Display Name 2. Submit valid feedback | Feedback submitted, name shown | Success, name shown | PASS |
| 12 | Success Story Optional | MEDIUM | On Feedback form | 1. Leave Success Story empty 2. Submit valid feedback | Feedback submitted, no error | Success | PASS |
| 13 | Success Story Required When Allowed | HIGH | On Feedback form | 1. Check "Allow to post as success story" 2. Leave Success Story empty 3. Submit | Error: "Success story must contain at least 10 letters" | Error shown | PASS |
| 14 | Success Story Not Enough Letters | HIGH | On Feedback form | 1. 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 shown | PASS |
| 15 | Valid Success Story | HIGH | On Feedback form | 1. Check "Allow to post as success story" 2. Enter valid story (10+ letters) 3. Submit | Feedback submitted, success message shown | Success message shown | PASS |
| 16 | Form Reset After Submit | MEDIUM | On Feedback form | 1. Submit valid feedback 2. Observe form | Form resets, fields cleared | Form reset | PASS |
| 17 | API Error on Submit | MEDIUM | On Feedback form | 1. Simulate API error 2. Submit valid feedback | Error toast shown | Error toast shown | PASS |
Tester: Adeepa K
+Version: Not specified
+Browser: chrome
+Device: desktop
+Test Date: 2025-07-17
+| # | +Test Name | +Category | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|---|
| 1 | Access Meeting Dashboard - Authenticated User | ACCESS | HIGH | User has valid account and is logged in | 1. Navigate to /dashboard 2. Click on 'Meetings' tab 3. Verify meeting interface loads | Meeting dashboard displays with meeting list and controls | PASS | |
| 2 | Access Meeting Dashboard - Unauthenticated User | ACCESS | HIGH | User is not logged in | 1. Navigate to /dashboard 2. Attempt to access meetings section | User redirected to login page or shown authentication message | PASS | |
| 3 | Schedule New Meeting - Valid Data | CREATION | HIGH | User is logged in and has chat conversation with another user | 1. Open chat with another user 2. Click 'Meeting' button 3. Click 'Schedule New Meeting' 4. Fill description, future date and time 5. Click 'Schedule Meeting' | Meeting request sent successfully, notification shown | Description is required + + | PASS |
| 4 | Schedule Meeting - Empty Description | CREATION | MEDIUM | User is in meeting creation modal | 1. Leave description field empty 2. Fill date and time 3. Try to submit | Error message: 'Description is required' | Description is required + + | PASS |
| 5 | Schedule Meeting - Past Date | CREATION | MEDIUM | User is in meeting creation modal | 1. Fill description 2. Select past date 3. Fill time 4. Try to submit | Error message: 'Meeting date must be in the future' | Meeting date must be in the future | PASS |
| 6 | Schedule Meeting - Missing Time | CREATION | MEDIUM | User is in meeting creation modal | 1. Fill description 2. Select future date 3. Leave time empty 4. Try to submit | Error message: 'Time is required' | PASS | |
| 7 | Meeting Limit Validation | CREATION | HIGH | User already has 2 active meetings with another user | 1. Try to schedule a 3rd meeting with same user 2. Click 'Schedule Meeting' button | Warning message about maximum 2 active meetings limit | PASS | |
| 8 | Accept Meeting Request | MANAGEMENT | HIGH | User has received a meeting request | 1. View pending meeting requests 2. Click 'Accept' on a meeting request 3. Confirm acceptance | Meeting accepted, Daily.co room created, other user notified | PASS | |
| 9 | Reject Meeting Request | MANAGEMENT | HIGH | User has received a meeting request | 1. View pending meeting requests 2. Click 'Decline' on a meeting request 3. Confirm rejection | Meeting rejected, sender notified | PASS | |
| 10 | Cancel Scheduled Meeting | MANAGEMENT | HIGH | User has an accepted/scheduled meeting | 1. View upcoming meetings 2. Click 'Cancel' on a meeting 3. Provide cancellation reason 4. Confirm cancellation | Meeting cancelled with reason, other user notified | PASS | |
| 11 | Cancel Meeting - Empty Reason | MANAGEMENT | MEDIUM | User is in meeting cancellation modal | 1. Leave reason field empty 2. Try to cancel meeting | Error message requiring cancellation reason | Cant continue with empty reason | PASS |
| 12 | Join Meeting - Valid Time | VIDEO | HIGH | User has accepted meeting within 30 minutes of scheduled time | 1. Navigate to meeting from dashboard 2. Click 'Join Meeting' button 3. Allow camera/microphone access | Daily.co video interface loads, user enters meeting room | PASS | |
| 13 | Join Meeting - Too Early | VIDEO | MEDIUM | User tries to join meeting more than 30 minutes before scheduled time | 1. Navigate to meeting page 2. Attempt to join meeting | Message shown that meeting cannot be joined yet with countdown timer | As Expected | PASS |
| 14 | Join Meeting - Too Late | VIDEO | MEDIUM | User tries to join meeting more than 30 minutes after scheduled time | 1. Navigate to meeting page 2. Attempt to join meeting | Message shown that meeting has ended | As Expected | PASS |
| 15 | Join Meeting - Unauthorized User | VIDEO | HIGH | User who is not participant tries to access meeting | 1. Navigate to meeting URL of another user's meeting 2. Attempt to access | Access denied message, redirect to dashboard | PASS | |
| 16 | Meeting Video Controls | VIDEO | HIGH | User is in active video meeting | 1. Test mute/unmute audio 2. Test enable/disable video 3. Test leave meeting button | All controls work properly, meeting can be left successfully | 1.works +2.works +3.works | PASS |
| 17 | Create Meeting Notes | NOTES | MEDIUM | User is in completed meeting or viewing past meeting | 1. Access meeting notes section 2. Write meeting notes 3. Save notes | Notes saved successfully and visible to participants | As Expected | PASS |
| 18 | View Meeting Notes | NOTES | MEDIUM | Meeting has existing notes | 1. Navigate to past meeting 2. Click on notes icon 3. View notes content | Meeting notes displayed correctly with author and timestamp | As Expected | PASS |
| 19 | Download Meeting Notes | NOTES | LOW | Meeting has saved notes | 1. Access meeting notes 2. Click download button 3. Check downloaded file | Notes downloaded as text file with proper formatting | As Expected | PASS |
| 20 | Meeting Request Notification | NOTIFICATIONS | HIGH | User A sends meeting request to User B | 1. User A creates meeting request 2. Check User B's notifications 3. Verify notification content | User B receives notification: '[Name] sent you a meeting request' | As Expected | PASS |
| 21 | Meeting Acceptance Notification | NOTIFICATIONS | HIGH | User B accepts User A's meeting request | 1. User B accepts meeting 2. Check User A's notifications 3. Verify notification content | User A receives notification: '[Name] accepted your meeting request' | As Expected | PASS |
| 22 | Meeting Rejection Notification | NOTIFICATIONS | HIGH | User B rejects User A's meeting request | 1. User B rejects meeting 2. Check User A's notifications 3. Verify notification content | User A receives notification: '[Name] declined your meeting request' | As Expected | PASS |
| 23 | Meeting Cancellation Notification | NOTIFICATIONS | HIGH | User cancels scheduled meeting | 1. User cancels meeting with reason 2. Check other participant's notifications 3. Verify notification and reason | Other user receives cancellation notification with reason | As Expected | PASS |
| 24 | Meeting States Display | UI | MEDIUM | User has meetings in different states | 1. View meeting dashboard 2. Check meeting categorization 3. Verify state indicators | Meetings properly categorized: Pending, Upcoming, Past, Cancelled | As Expected | PASS |
| 25 | Meeting Time Display | UI | MEDIUM | User has scheduled meetings | 1. View meeting list 2. Check time formatting 3. Verify timezone handling | Meeting times displayed in user's local timezone with proper formatting | As Expected | PASS |
| 26 | Meeting Participant Information | UI | MEDIUM | User has meetings with different participants | 1. View meeting list 2. Check participant names and avatars 3. Verify correct information display | Participant names and avatars displayed correctly for each meeting | As Expecte | PASS |
| 27 | Mobile Meeting Interface | UI | HIGH | Access meeting system on mobile device | 1. Open meeting dashboard on mobile 2. Test meeting creation 3. Test meeting management 4. Test joining meeting | All meeting features work properly on mobile with responsive design | PASS | |
| 28 | Meeting Search Functionality | UI | LOW | User has multiple meetings | 1. Access meeting dashboard 2. Use search to find specific meeting 3. Test different search terms | Search returns relevant meetings based on description or participant name | PASS | |
| 29 | Meeting Filter Options | UI | LOW | User has meetings in different states | 1. Access meeting dashboard 2. Test filtering by status 3. Test filtering by date range | Filters work correctly and show appropriate meetings | PASS | |
| 30 | Meeting System Performance | UI | MEDIUM | User has many meetings in system | 1. Load meeting dashboard 2. Measure loading time 3. Test scrolling through meetings 4. Test meeting actions response time | Meeting system loads quickly and responds promptly to user actions | PASS |
Tester: Adeepa K2
+Version: Not specified
+Browser: chrome
+Device: mobile
+Test Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | View Notification Page | HIGH | User is logged in | 1. Click on notifications in the menu 2. Look at the page that opens 3. Check if your name appears 4. See if notifications are displayed | Page opens showing 'Hi [Your Name], here are your notifications' and any notifications you have | Working as Expected | PASS |
| 2 | No Notifications | MEDIUM | User has no notifications | 1. Open notification page 2. Look at what is displayed | Shows friendly message like 'You have no notifications yet' with a bell icon | Shows Correctly | PASS |
| 3 | View Notification List | HIGH | User has some notifications | 1. Open notification page 2. Look at the notifications 3. Check if unread ones look different from read ones | Unread notifications clearly stand out, read notifications look different, easy to tell them apart | Easy to Distinguish | PASS |
| 4 | Notification Details | HIGH | User has notifications | 1. Look at individual notifications 2. Check the message text 3. Look at the time when received 4. See the notification type | Each notification shows clear message, readable time, and type badge with appropriate color | All Details Visible | PASS |
| 5 | Mark as Read | HIGH | User has unread notifications | 1. Find an unread notification 2. Click 'Mark Read' button 3. See what happens | Notification moves to read section, looks different, 'Mark Read' button disappears | Moved to Read Section | PASS |
| 6 | Mark All as Read | HIGH | User has multiple unread notifications | 1. Click 'Mark all as read' button 2. Watch what happens to all notifications | All notifications move to read section, unread count disappears, button disappears | All Marked as Read | PASS |
| 7 | View Notification Link | MEDIUM | Notification has a 'View' button | 1. Find notification with 'View' button 2. Click the 'View' button 3. See where it takes you | Takes you to the related page or content, navigation works smoothly | Navigated Correctly | PASS |
| 8 | Receiving New Notifications | HIGH | User is on notification page | 1. Stay on notification page 2. Have someone trigger a notification for you 3. Watch for new notification to appear | New notification appears at top of unread list, unread count increases | New Notification Appeared | PASS |
| 9 | Default Order | MEDIUM | User has multiple notifications | 1. Open notification page 2. Look at notification order 3. Check if newest are at top | Newest notifications appear at top, sort dropdown shows 'Newest First' | Newest at Top | PASS |
| 10 | Change Sort Order | MEDIUM | User has multiple notifications | 1. Click sort dropdown 2. Select 'Oldest First' 3. Watch notifications reorder | Notifications reorder with oldest first, change is clear and immediate | Reordered Successfully | PASS |
| 11 | Mobile Phone Use | HIGH | Mobile phone | 1. Open notification page on mobile 2. Try tapping buttons 3. Check if text is readable 4. Test scrolling | Everything fits on screen, buttons easy to tap, text readable, scrolling smooth | Mobile Responsive | PASS |
| 12 | Tablet Use | MEDIUM | Tablet device | 1. Open notification page on tablet 2. Test touch interactions 3. Check layout | Layout looks good, touch interactions work well, good use of space | Tablet Compatible | PASS |
| 13 | Dark Mode | MEDIUM | Dark mode available | 1. Enable dark mode 2. Look at notification page 3. Check if everything is visible | All text and elements clearly visible in dark mode, good contrast, looks professional | Dark Mode Working | PASS |
| 14 | Page Speed | MEDIUM | User with notifications | 1. Go to notification page 2. See how long it takes to load 3. Test scrolling and clicking | Page loads quickly, scrolling is smooth, buttons respond immediately | Fast Loading | PASS |
Tester: Fathima Samha
+Version: Not specified
+Browser: Chrome
+Device: Desktop
+Test Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | Profile Loads for Authenticated User | HIGH | User is logged in | 1. Navigate to Profile Settings | Profile form loads with user data | Form loaded, data shown | PASS |
| 2 | Edit Profile Button Works | HIGH | Profile loaded | 1. Click "Edit Profile" | Fields become editable, Save/Discard buttons appear | Fields editable | PASS |
| 3 | Cancel Edit Discards Changes | HIGH | In edit mode | 1. Change a field 2. Click "Cancel" | Changes are not saved, view mode restored | Changes discarded | PASS |
| 4 | Discard Changes Button | HIGH | In edit mode | 1. Change a field 2. Click "Discard Changes" | Changes are not saved, view mode restored | Changes discarded | PASS |
| 5 | Save Changes Button | HIGH | In edit mode | 1. Change a field 2. Click "Save Changes" | Changes are saved, success message shown | Changes saved, message shown | PASS |
| 6 | First Name Required | HIGH | In edit mode | 1. Clear First Name 2. Try to save | Browser shows required field error | Error shown, cannot save | PASS |
| 7 | Last Name Required | HIGH | In edit mode | 1. Clear Last Name 2. Try to save | Browser shows required field error | Error shown, cannot save | PASS |
| 8 | Email Required | HIGH | In edit mode | 1. Clear Email 2. Try to save | Browser shows required field error | Error shown, cannot save | PASS |
| 9 | Email Format Validation | HIGH | In edit mode | 1. Enter "notanemail" in Email 2. Try to save | Browser shows invalid email error | Error shown, cannot save | PASS |
| 10 | Phone Optional | MEDIUM | In edit mode | 1. Clear Phone 2. Save | Profile saves without phone | Saved, no error | PASS |
| 11 | Title Optional | MEDIUM | In edit mode | 1. Clear Title 2. Save | Profile saves without title | Saved, no error | PASS |
| 12 | Avatar Upload Accepts Image | HIGH | In edit mode | 1. Click avatar 2. Upload valid image file | Avatar preview updates, can save | Preview updates, saved | PASS |
| 13 | Avatar Upload Rejects Non-Image | HIGH | In edit mode | 1. Try to upload .txt or .pdf file | File not accepted, no preview | File not accepted | PASS |
| 14 | Avatar Upload Cancel | MEDIUM | In edit mode | 1. Click avatar 2. Cancel file dialog | No change to avatar | No change | PASS |
| 15 | Large Image Upload | MEDIUM | In edit mode | 1. Upload very large image | Preview updates, very slow | Not tested | NOT EXECUTED |
| 16 | Save With All Fields Changed | HIGH | In edit mode | 1. Change all fields 2. Save | All changes saved, message shown | All changes saved | PASS |
| 17 | Save With No Changes | LOW | In edit mode | 1. Click Save without changing anything | No error, message shown | No error, message shown | PASS |
| 18 | Network Error on Save | MEDIUM | In edit mode | 1. Disconnect network 2. Try to save | Error message shown | Error shown | PASS |
| 20 | Profile Loads With Missing Data | LOW | User has missing fields | 1. Navigate to Profile Settings | Fields show "Not provided" | "Not provided" shown | PASS |
| 21 | Avatar Loads Default If None | LOW | User has no avatar | 1. Navigate to Profile Settings | Default avatar shown | Default shown | PASS |
Comprehensive manual testing form for Skill Swap Hub session system
-Tester: Adeepa
+Version: Not specified
+Browser: chrome
+Device: desktop
+Test Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | +Create New Session Request | +HIGH | +User logged in, has skills available, target user exists | +1. Navigate to session creation 2. Select skill to offer 3. Select skill to receive 4. Fill session details 5. Submit request |
+ Session created as 'pending', notifications sent, appears in both user lists | +As Expected | +PASS | +
| 2 | +Session Creation Validation | +HIGH | +User on session creation form | +1. Try submitting empty form 2. Enter invalid data 3. Test field validations |
+ Proper error messages, form blocks invalid submissions | +As Expected | +PASS | +
| 3 | +Session List Display | +MEDIUM | +User has existing sessions | +1. Navigate to sessions page 2. Check session grouping 3. Verify displayed information |
+ Sessions grouped by status, correct info displayed, proper buttons | +As Expected | +PASS | +
| 4 | +Accept Session Request | +HIGH | +Pending session request exists | +1. Open pending session 2. Click accept button 3. Confirm acceptance |
+ Status → 'active', progress created, notifications sent | +As Expected | +PASS | +
| 5 | +Reject Session Request | +HIGH | +Pending session request exists | +1. Open pending session 2. Click reject button 3. Provide reason 4. Confirm rejection |
+ Status → 'rejected', timestamp recorded, notifications sent | +Reject Successfully | +PASS | +
| 6 | +Edit Session Before Acceptance | +MEDIUM | +Pending session exists, user is session creator | +1. Open pending session 2. Click edit button 3. Modify details 4. Save changes |
+ Session updated, timestamp updated, User B sees changes | +Expected | +PASS | +
| 7 | +Create Counter Offer | +MEDIUM | +Pending session exists, user is recipient | +1. Open pending session 2. Click counter offer 3. Modify terms 4. Submit counter offer |
+ Counter offer created, linked to session, notifications sent | +As Expected | +PASS | +
| 8 | +Accept Counter Offer | +MEDIUM | +Counter offer exists | +1. Open counter offer 2. Review terms 3. Click accept 4. Confirm acceptance |
+ Session updated with new terms, counter offer marked accepted | +Can | +PASS | +
| 9 | +Reject Counter Offer | +MEDIUM | +Counter offer exists | +1. Open counter offer 2. Review terms 3. Click reject 4. Provide reason |
+ Counter offer rejected, original terms remain, user notified | +As Expected | +PASS | +
| 10 | +Update Session Progress | +HIGH | +Active session exists | +1. Open active session 2. Go to progress tab 3. Update progress percentage 4. Add notes 5. Save |
+ Progress saved, other user sees updates, timeline updated | +As Expected | +PASS | +
| 11 | +View Progress Timeline | +MEDIUM | +Session with progress updates exists | +1. Open session 2. View progress timeline 3. Check chronological order |
+ Chronological timeline, both users shown, clear timestamps | +Not executed | +PASS | +
| 12 | +Progress Notifications | +MEDIUM | +Active session exists | +1. Update progress 2. Check other user's notifications 3. Verify notification content |
+ Notification sent with progress percentage | +Works | +PASS | +
| 13 | +Submit Work | +HIGH | +Active session exists | +1. Go to work tab 2. Add work title/description 3. Upload files 4. Submit work |
+ Work created, files uploaded, other user notified | +As Expected | +PASS | +
| 14 | +File Upload Validation | +HIGH | +On work submission form | +1. Try uploading large files 2. Try unsupported formats 3. Upload multiple files 4. Test file limits |
+ Only allowed types accepted, size limits enforced | +100MB Max Up to 5 Files | +PASS | +
| 15 | +Review Submitted Work | +HIGH | +Work has been submitted | +1. Open submitted work 2. Download files 3. Review content 4. Accept/reject work |
+ Work displayed correctly, files download, review recorded | +Can Review | +PASS | +
| 16 | +Work Rejection Workflow | +MEDIUM | +Work submitted and reviewed | +1. Open work item 2. Click reject 3. Provide feedback 4. Submit rejection |
+ Work rejected, reason stored, submitter notified | +As Expected | +PASS | +
| 17 | +Request Session Completion | +HIGH | +Active session with sufficient progress | +1. Open session overview 2. Click request completion 3. Review work summary 4. Confirm request |
+ Completion request created, other user notified | +As Expected | +PASS | +
| 18 | +Approve Session Completion | +HIGH | +Completion request exists | +1. Open completion request 2. Review session work 3. Click approve 4. Submit review/rating |
+ Status → 'completed', notifications sent, rating available | +As Expected | +PASS | +
| 19 | +Reject Completion Request | +HIGH | +Completion request exists | +1. Open completion request 2. Click reject 3. Provide reason 4. Submit rejection |
+ Request rejected, session remains active, reason provided | +As Expected | +PASS | +
| 20 | +Post-Completion Rating | +MEDIUM | +Session completed | +1. Open completed session 2. Click review button 3. Rate experience (1-5 stars) 4. Add comments 5. Submit |
+ Rating recorded, affects user's overall rating | +As Expected | +PASS | +
| 21 | +Cancel Active Session | +HIGH | +Active session exists | +1. Open session 2. Click cancel session 3. Select reason 4. Confirm cancellation |
+ Status → 'canceled', other user notified, reason stored | +As Expected | +PASS | +
| 22 | +Cancel Request Workflow | +MEDIUM | +Active session exists | +1. Request cancellation 2. Other user responds 3. Check communication flow |
+ Request system works, both users involved, clear communication | +As Expected | +PASS | +
| 23 | +Report Session Issue | +MEDIUM | +Session exists (any status) | +1. Open session 2. Click report issue 3. Select category 4. Describe issue 5. Submit |
+ Report created, admin notified, ID generated | +As Expected | +PASS | +
| 24 | +Report Categories | +LOW | +On report form | +1. Check available categories 2. Test sub-options 3. Verify guidance text |
+ All categories selectable, sub-options available, guidance shown | +As Expected | +PASS | +
| 25 | +Session Box Component | +MEDIUM | +User has sessions | +1. Open session box 2. Test all buttons 3. Check responsiveness 4. Verify session limit display |
+ Box loads, buttons work, limit shown, responsive | +As Expected | +PASS | +
| 26 | +Session Workspace Tabs | +MEDIUM | +Active session open | +1. Navigate between tabs 2. Check content loading 3. Test tab switching |
+ All tabs work, content loads, navigation smooth | +Smooth | +PASS | +
| 27 | +Modal Components | +MEDIUM | +Various modals available | +1. Open different modals 2. Test form validation 3. Check data persistence 4. Test close/cancel |
+ Modals open/close properly, validation works, data persists | +Works | +PASS | +
| 28 | +Alert and Confirmation Dialogs | +LOW | +Actions that trigger alerts | +1. Perform actions 2. Check alert display 3. Test auto-close 4. Verify message clarity |
+ Alerts display correctly, auto-close works, clear messages | +Alerts are Working | +Pass | +
| 29 | +Network Connectivity Issues | +MEDIUM | +Stable connection initially | +1. Simulate network loss 2. Test data recovery 3. Check error handling |
+ Graceful error handling, data recovery works | +Could not try | +BLOCKED | +
| 30 | +Concurrent User Actions | +MEDIUM | +Two users in same session | +1. Both users perform same action 2. Check conflict resolution 3. Verify data integrity |
+ First action wins, clear error for second, no corruption | +Up to 2 users tried | +BLOCKED | +
| 31 | +Data Validation Edge Cases | +MEDIUM | +Forms available for testing | +1. Test input limits 2. Try special characters 3. Test security measures 4. Check date validation |
+ Limits enforced, special chars handled, security protected | +Date Validation, Backdate prevention | +PASS | +
| 32 | +Session Limit Edge Cases | +MEDIUM | +User near session limit | +1. Create sessions up to limit 2. Try creating beyond limit 3. Check error handling 4. Verify counter updates |
+ Limit enforced, clear error, counter updates correctly | +Cannot Create 4th | +PASS | +
| 33 | +User Permission Edge Cases | +HIGH | +Various user states available | +1. Test suspended user actions 2. Test deleted user handling 3. Check unauthorized access |
+ Suspended users blocked, deleted handled gracefully, unauthorized prevented | +Handled in Auth | +PASS | +
Total Test Cases: 33
+Passed: 30
+Failed: 0
+Blocked: 2
+Not Executed: 0
+Pass Rate: 91%
+Tester: Fathima Samha
+Version: Not specified
+Browser: Chrome
+Device: Desktop
+Test Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | +Dashboard Loads for Authenticated User | +HIGH | +User is logged in | +1. Navigate to /dashboard | +Dashboard greets user by name and loads content | +Loaded with "Hi Fathima Samhanpm run , Welcome back!" | +PASS | +
| 2 | +ProfileCard Component Renders | +HIGH | +User has valid userId | +1. Check right sidebar 2. Confirm profile card is visible |
+ Profile card with user data appears | +Profile shown | +PASS | +
| 3 | +SkillsRequested Section Renders | +HIGH | +User is logged in | +1. Scroll to main column 2. Confirm "Skills Requested" section shows |
+ SkillsRequested component renders with data | +Section displayed | +PASS | +
| 4 | +SkillsOffered Section Renders | +HIGH | +User is logged in | +1. Locate "Skills Offered" section | +SkillsOffered component is visible and styled | +Section rendered as expected | +PASS | +
| 5 | +UserSkills Component View More | +MEDIUM | +User on dashboard | +1. Click "View More" in UserSkills component | +`onNavigateToMySkills` handler is triggered | +Navigation triggered | +PASS | +
| 6 | +ReviewSummary Shows When User Exists | +HIGH | +User is logged in | +1. Scroll to Review section 2. Check if ReviewSummary is rendered |
+ ReviewSummary visible with review stats | +Component visible | +PASS | +
| 7 | +EarnedBadges Shows When User Exists | +MEDIUM | +User is logged in | +1. Scroll down to "Badges" | +Badges with earned info should be visible | +Badges loaded | +PASS | +
| 8 | +TimeSpentChart Component Loads | +HIGH | +User is logged in | +1. Locate "Time Spent" box 2. Confirm chart loads |
+ Chart rendered with user stats | +Chart loaded | +PASS | +
| 9 | +SkillMatchOverview Works | +MEDIUM | +User is on dashboard | +1. Scroll to Skill Matches 2. Verify component renders |
+ Component renders with "View All" hook | +Rendered with no crash | +PASS | +
| 10 | +Session Timer Hook Runs Without Crash | +MEDIUM | +User has valid _id | +1. Load dashboard 2. Open dev tools console |
+ No hook errors, timer starts silently | +No errors | +PASS | +
| 11 | +“View All Reviews” Button Appears | +MEDIUM | +User 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 shown | +PASS | +
| 12 | +Navigate to All Reviews Page | +MEDIUM | +“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 page | +Navigated to `/reviews` and saw all reviews | +PASS | +
Tester: Fathima Samha
+Version: Not specified
+Browser: Chrome
+Device: Desktop
+Test Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | +Suggestions Tab Loads | +HIGH | +User is logged in | +1. Navigate to Dashboard 2. Go to Suggestions section/tab |
+ Suggestions UI loads with "Submit Suggestion" and "Your History" tabs | +Tabs loaded as expected | +PASS | +
| 2 | +Suggestion Form Validation | +HIGH | +User is on Suggestions tab | +1. Leave all fields empty 2. Click Submit |
+ Validation errors for all fields | +All validation errors shown | +PASS | +
| 3 | +Title Validation | +HIGH | +User is on Suggestions tab | +1. 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 shown | +PASS | +
| 4 | +Description Validation | +HIGH | +User is on Suggestions tab | +1. 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 shown | +PASS | +
| 5 | +Category Validation | +HIGH | +User is on Suggestions tab | +1. Leave Category unselected 2. Fill other fields validly 3. Submit |
+ Error: "Please select a category" | +Error message shown | +PASS | +
| 6a | +All Fields Empty | +HIGH | +On Suggestions tab | +1. Leave all fields empty 2. Click Submit |
+ Errors for Title, Description, Category | +All validation errors shown | +PASS | +
| 6b | +Title Too Short | +HIGH | +On Suggestions tab | +1. Enter "Hi" in Title 2. Fill other fields validly 3. Submit |
+ Error: "Title must be at least 3 characters after trimming" | +Error message shown | +PASS | +
| 6c | +Title Not Enough Letters | +HIGH | +On Suggestions tab | +1. Enter "12@" in Title 2. Fill other fields validly 3. Submit |
+ Error: "Title must contain at least 3 letters" | +Error message shown | +PASS | +
| 6d | +Description Too Short | +HIGH | +On Suggestions tab | +1. Enter "Short" in Description 2. Fill other fields validly 3. Submit |
+ Error: "Description must be at least 10 characters after trimming" | +Error message shown | +PASS | +
| 6e | +Description Not Enough Letters | +HIGH | +On Suggestions tab | +1. Enter "1234567890" in Description 2. Fill other fields validly 3. Submit |
+ Error: "Description must contain at least 10 letters" | +Error message shown | +PASS | +
| 6f | +Category Not Selected | +HIGH | +On Suggestions tab | +1. Fill Title and Description validly 2. Leave Category blank 3. Submit |
+ Error: "Please select a category" | +Error message shown | +PASS | +
| 6g | +Valid Input - Issue | +HIGH | +On Suggestions tab | +1. Enter valid Title and Description 2. Select "Issue" as Category 3. Submit |
+ Suggestion submitted, form clears, no errors | +Suggestion submitted, form cleared | +PASS | +
| 6h | +Valid Input - Suggestion | +HIGH | +On Suggestions tab | +1. Enter valid Title and Description 2. Select "Suggestion" as Category 3. Submit |
+ Suggestion submitted, form clears, no errors | +Suggestion submitted, form cleared | +PASS | +
| 6i | +Valid Input - Feature Request | +HIGH | +On Suggestions tab | +1. Enter valid Title and Description 2. Select "Feature Request" as Category 3. Submit |
+ Suggestion submitted, form clears, no errors | +Suggestion submitted, form cleared | +PASS | +
| 6j | +Valid Input - Other | +HIGH | +On Suggestions tab | +1. Enter valid Title and Description 2. Select "Other" as Category 3. Submit |
+ Suggestion submitted, form clears, no errors | +Suggestion submitted, form cleared | +PASS | +
| 6k | +Leading/Trailing Spaces | +MEDIUM | +On Suggestions tab | +1. Enter " Valid Title " and " Valid Description " 2. Select any Category 3. Submit |
+ Suggestion submitted, form clears, no errors | +Suggestion submitted, form cleared | +PASS | +
| 6l | +Special Characters in Title | +MEDIUM | +On Suggestions tab | +1. Enter "Hello!@#" in Title 2. Valid Description and Category 3. Submit |
+ Suggestion submitted if at least 3 letters | +Suggestion submitted | +PASS | +
| 6m | +Special Characters in Description | +MEDIUM | +On Suggestions tab | +1. Enter valid Title 2. Enter "This is a test!@#" in Description 3. Valid Category 4. Submit |
+ Suggestion submitted if at least 10 letters | +Suggestion submitted | +PASS | +
| 6n | +Title: 123@gh (Not Enough Letters) | +HIGH | +On Suggestions tab | +1. Enter "123@gh" in Title 2. Valid Description and Category 3. Submit |
+ Error: "Title must contain at least 3 letters" | +Error message shown | +PASS | +
| 6o | +Title: 123@bug (Enough Letters) | +HIGH | +On Suggestions tab | +1. Enter "123@bug" in Title 2. Valid Description and Category 3. Submit |
+ No error, suggestion submitted | +Suggestion submitted | +PASS | +
| 6p | +Description: 1234567@gh (Not Enough Letters) | +HIGH | +On Suggestions tab | +1. Enter valid Title 2. Enter "1234567@gh" in Description 3. Valid Category 4. Submit |
+ Error: "Description must contain at least 10 letters" | +Error message shown | +PASS | +
| 6q | +Description: 1234567@ghijklmnopqrst (Enough Letters) | +HIGH | +On Suggestions tab | +1. Enter valid Title 2. Enter "1234567@ghijkl" in Description 3. Valid Category 4. Submit |
+ No error, suggestion submitted | +Suggestion submitted | +PASS | +
| 7 | +Submit Valid Suggestion | +HIGH | +User is on Suggestions tab | +1. Fill all fields validly 2. Submit |
+ Suggestion is submitted, form clears, history tab updates | +Suggestion submitted, history updated | +PASS | +
| 8 | +Suggestion Appears in History | +HIGH | +User has submitted a suggestion | +1. Switch to "Your History" tab | +Submitted suggestion appears as a card with correct title, description, category, and status | +Card shown with correct info | +PASS | +
| 9 | +Category & Status Badges Render | +MEDIUM | +User has suggestions in history | +1. View suggestion cards in history | +Each card shows colored badges for category and status | +Badges rendered as expected | +PASS | +
| 10 | +Filter Suggestions by Status | +MEDIUM | +User has multiple suggestions with different statuses | +1. Use status filter dropdown 2. Select "Pending", "Approved", "Rejected" |
+ Only suggestions with selected status are shown | +Filter works for all statuses | +PASS | +
| 11 | +Filter Suggestions by Category | +MEDIUM | +User has suggestions in multiple categories | +1. Use category filter dropdown 2. Select a category |
+ Only suggestions in selected category are shown | +Category filter works | +PASS | +
| 12 | +Feedback Prompt Appears | +LOW | +User is on Suggestions tab | +1. Observe top of Suggestions section | +Feedback prompt with "Give Feedback" button is visible | +Prompt shown | +PASS | +
| 13 | +Feedback Prompt Dismiss | +LOW | +Feedback prompt is visible | +1. Click "×" on feedback prompt | +Prompt disappears | +Prompt dismissed | +PASS | +
Tester: Adeepa
+Version: Not specified
+Browser: chrome
+Device: desktop
+Test Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | +Create New Session Request | +HIGH | +User logged in, has skills available, target user exists | +1. Navigate to session creation 2. Select skill to offer 3. Select skill to receive 4. Fill session details 5. Submit request |
+ Session created as 'pending', notifications sent, appears in both user lists | +As Expected | +PASS | +
| 2 | +Session Creation Validation | +HIGH | +User on session creation form | +1. Try submitting empty form 2. Enter invalid data 3. Test field validations |
+ Proper error messages, form blocks invalid submissions | +As Expected | +PASS | +
| 3 | +Session List Display | +MEDIUM | +User has existing sessions | +1. Navigate to sessions page 2. Check session grouping 3. Verify displayed information |
+ Sessions grouped by status, correct info displayed, proper buttons | +As Expected | +PASS | +
| 4 | +Accept Session Request | +HIGH | +Pending session request exists | +1. Open pending session 2. Click accept button 3. Confirm acceptance |
+ Status → 'active', progress created, notifications sent | +As Expected | +PASS | +
| 5 | +Reject Session Request | +HIGH | +Pending session request exists | +1. Open pending session 2. Click reject button 3. Provide reason 4. Confirm rejection |
+ Status → 'rejected', timestamp recorded, notifications sent | +Reject Successfully | +PASS | +
| 6 | +Edit Session Before Acceptance | +MEDIUM | +Pending session exists, user is session creator | +1. Open pending session 2. Click edit button 3. Modify details 4. Save changes |
+ Session updated, timestamp updated, User B sees changes | +Expected | +PASS | +
| 7 | +Create Counter Offer | +MEDIUM | +Pending session exists, user is recipient | +1. Open pending session 2. Click counter offer 3. Modify terms 4. Submit counter offer |
+ Counter offer created, linked to session, notifications sent | +As Expected | +PASS | +
| 8 | +Accept Counter Offer | +MEDIUM | +Counter offer exists | +1. Open counter offer 2. Review terms 3. Click accept 4. Confirm acceptance |
+ Session updated with new terms, counter offer marked accepted | +Can | +PASS | +
| 9 | +Reject Counter Offer | +MEDIUM | +Counter offer exists | +1. Open counter offer 2. Review terms 3. Click reject 4. Provide reason |
+ Counter offer rejected, original terms remain, user notified | +As Expected | +PASS | +
| 10 | +Update Session Progress | +HIGH | +Active session exists | +1. Open active session 2. Go to progress tab 3. Update progress percentage 4. Add notes 5. Save |
+ Progress saved, other user sees updates, timeline updated | +As Expected | +PASS | +
| 11 | +View Progress Timeline | +MEDIUM | +Session with progress updates exists | +1. Open session 2. View progress timeline 3. Check chronological order |
+ Chronological timeline, both users shown, clear timestamps | +Not executed | +PASS | +
| 12 | +Progress Notifications | +MEDIUM | +Active session exists | +1. Update progress 2. Check other user's notifications 3. Verify notification content |
+ Notification sent with progress percentage | +Works | +PASS | +
| 13 | +Submit Work | +HIGH | +Active session exists | +1. Go to work tab 2. Add work title/description 3. Upload files 4. Submit work |
+ Work created, files uploaded, other user notified | +As Expected | +PASS | +
| 14 | +File Upload Validation | +HIGH | +On work submission form | +1. Try uploading large files 2. Try unsupported formats 3. Upload multiple files 4. Test file limits |
+ Only allowed types accepted, size limits enforced | +100MB Max Up to 5 Files | +PASS | +
| 15 | +Review Submitted Work | +HIGH | +Work has been submitted | +1. Open submitted work 2. Download files 3. Review content 4. Accept/reject work |
+ Work displayed correctly, files download, review recorded | +Can Review | +PASS | +
| 16 | +Work Rejection Workflow | +MEDIUM | +Work submitted and reviewed | +1. Open work item 2. Click reject 3. Provide feedback 4. Submit rejection |
+ Work rejected, reason stored, submitter notified | +As Expected | +PASS | +
| 17 | +Request Session Completion | +HIGH | +Active session with sufficient progress | +1. Open session overview 2. Click request completion 3. Review work summary 4. Confirm request |
+ Completion request created, other user notified | +As Expected | +PASS | +
| 18 | +Approve Session Completion | +HIGH | +Completion request exists | +1. Open completion request 2. Review session work 3. Click approve 4. Submit review/rating |
+ Status → 'completed', notifications sent, rating available | +As Expected | +PASS | +
| 19 | +Reject Completion Request | +HIGH | +Completion request exists | +1. Open completion request 2. Click reject 3. Provide reason 4. Submit rejection |
+ Request rejected, session remains active, reason provided | +As Expected | +PASS | +
| 20 | +Post-Completion Rating | +MEDIUM | +Session completed | +1. Open completed session 2. Click review button 3. Rate experience (1-5 stars) 4. Add comments 5. Submit |
+ Rating recorded, affects user's overall rating | +As Expected | +PASS | +
| 21 | +Cancel Active Session | +HIGH | +Active session exists | +1. Open session 2. Click cancel session 3. Select reason 4. Confirm cancellation |
+ Status → 'canceled', other user notified, reason stored | +As Expected | +PASS | +
| 22 | +Cancel Request Workflow | +MEDIUM | +Active session exists | +1. Request cancellation 2. Other user responds 3. Check communication flow |
+ Request system works, both users involved, clear communication | +As Expected | +PASS | +
| 23 | +Report Session Issue | +MEDIUM | +Session exists (any status) | +1. Open session 2. Click report issue 3. Select category 4. Describe issue 5. Submit |
+ Report created, admin notified, ID generated | +As Expected | +PASS | +
| 24 | +Report Categories | +LOW | +On report form | +1. Check available categories 2. Test sub-options 3. Verify guidance text |
+ All categories selectable, sub-options available, guidance shown | +As Expected | +PASS | +
| 25 | +Session Box Component | +MEDIUM | +User has sessions | +1. Open session box 2. Test all buttons 3. Check responsiveness 4. Verify session limit display |
+ Box loads, buttons work, limit shown, responsive | +As Expected | +PASS | +
| 26 | +Session Workspace Tabs | +MEDIUM | +Active session open | +1. Navigate between tabs 2. Check content loading 3. Test tab switching |
+ All tabs work, content loads, navigation smooth | +Smooth | +PASS | +
| 27 | +Modal Components | +MEDIUM | +Various modals available | +1. Open different modals 2. Test form validation 3. Check data persistence 4. Test close/cancel |
+ Modals open/close properly, validation works, data persists | +Works | +PASS | +
| 28 | +Alert and Confirmation Dialogs | +LOW | +Actions that trigger alerts | +1. Perform actions 2. Check alert display 3. Test auto-close 4. Verify message clarity |
+ Alerts display correctly, auto-close works, clear messages | +Alerts are Working | +Pass | +
| 29 | +Network Connectivity Issues | +MEDIUM | +Stable connection initially | +1. Simulate network loss 2. Test data recovery 3. Check error handling |
+ Graceful error handling, data recovery works | +Could not try | +BLOCKED | +
| 30 | +Concurrent User Actions | +MEDIUM | +Two users in same session | +1. Both users perform same action 2. Check conflict resolution 3. Verify data integrity |
+ First action wins, clear error for second, no corruption | +Up to 2 users tried | +BLOCKED | +
| 31 | +Data Validation Edge Cases | +MEDIUM | +Forms available for testing | +1. Test input limits 2. Try special characters 3. Test security measures 4. Check date validation |
+ Limits enforced, special chars handled, security protected | +Date Validation, Backdate prevention | +PASS | +
| 32 | +Session Limit Edge Cases | +MEDIUM | +User near session limit | +1. Create sessions up to limit 2. Try creating beyond limit 3. Check error handling 4. Verify counter updates |
+ Limit enforced, clear error, counter updates correctly | +Cannot Create 4th | +PASS | +
| 33 | +User Permission Edge Cases | +HIGH | +Various user states available | +1. Test suspended user actions 2. Test deleted user handling 3. Check unauthorized access |
+ Suspended users blocked, deleted handled gracefully, unauthorized prevented | +Handled in Auth | +PASS | +
Total Test Cases: 33
+Passed: 30
+Failed: 0
+Blocked: 2
+Not Executed: 0
+Pass Rate: 91%
+Meeting Link:
+ https://code102.site/meeting/${meetingId} +Get ready for your skill swap session
++ Hi ${userFirstName} ${userLastName}, +
+ ++ This is a friendly reminder that your meeting with ${otherUserFirstName} ${otherUserLastName} is starting soon! +
+ +Time: ${formattedTime}
+With: ${otherUserFirstName} ${otherUserLastName}
+Description: ${description}
+
+ This is an automated reminder from SkillSwap Hub.
+ We hope you have a productive and enjoyable meeting! 🚀
+
+ © 2024 SkillSwap Hub. All rights reserved.
+ If you have any questions, please contact our support team.
+
{joinError}
+ +Initializing meeting...
++ {!callObject ? 'Initializing meeting...' : 'Connecting to meeting...'} +
++ Make sure no other tabs are using your camera or microphone +
+ Only one browser tab can access your camera and microphone at the same time. + This is a security feature built into web browsers. +
+Close any other tabs that might be using your camera (video calls, other meetings)
+Close apps like Zoom, Teams, Skype, or any camera software
+Make sure you've allowed camera and microphone access for this website
+If issues persist, try opening the meeting in a different browser or incognito mode
+No meetings scheduled
- + {showCreateMeetingButton && ( + + )} + {!showCreateMeetingButton && ( ++ Meetings can be scheduled through skill matches in the chat system +
+ )}+ {line || '\u00A0'} {/* Non-breaking space for empty lines */} +
+ )); + }; + + return ( +No content available
+ )} +Loading saved notes...
+No saved meeting notes found
++ Notes will appear here after you save them from past meetings +
++ Meeting notes saved - Click to view or download +
+ + {/* Tags */} + {note.tags && note.tags.length > 0 && ( +Loading meetings...
-
+
+
Failed to load user information
+Failed to load user