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/MeetingBox.test.tsx b/__tests__/components/MeetingBox.test.tsx index 32bd7d65..c6b223ba 100644 --- a/__tests__/components/MeetingBox.test.tsx +++ b/__tests__/components/MeetingBox.test.tsx @@ -1,722 +1,471 @@ /** * MeetingBox Component Tests - * Tests the meeting management functionality including scheduling, accepting, and cancelling meetings */ import React from 'react'; -import { render, screen, fireEvent, waitFor, act } from '@testing-library/react'; +import { render, screen, fireEvent, waitFor } from '@testing-library/react'; import '@testing-library/jest-dom'; import MeetingBox from '@/components/messageSystem/MeetingBox'; -// Create shared mocks for router -const mockPush = jest.fn(); -const mockRefresh = jest.fn(); - -// Mock the router -jest.mock('next/navigation', () => ({ - useRouter: () => ({ - push: mockPush, - refresh: mockRefresh - }) -})); - -// Mock meeting API services -jest.mock('@/services/meetingApiServices', () => ({ - fetchMeetings: jest.fn(), - createMeeting: jest.fn(), - updateMeeting: jest.fn() -})); - -// Mock session API services for cache invalidation -jest.mock('@/services/sessionApiServices', () => ({ - invalidateUsersCaches: jest.fn() -})); - -// Mock debounced API service -jest.mock('@/services/debouncedApiService', () => { - const mockService = { - makeRequest: jest.fn(), - invalidate: jest.fn() - }; - return { - debouncedApiService: mockService, - makeRequest: mockService.makeRequest, - invalidate: mockService.invalidate - }; -}); - -// Mock utility functions -jest.mock('@/utils/avatarUtils', () => ({ - processAvatarUrl: jest.fn((url) => url), - getFirstLetter: jest.fn((firstName, userId) => firstName?.[0] || 'U'), - createFallbackAvatar: jest.fn(() => 'data:image/svg+xml;base64,mock') -})); - -// Mock OptimizedAvatar component -jest.mock('@/components/ui/OptimizedAvatar', () => { - return function MockOptimizedAvatar({ userId, firstName, lastName }: any) { +// Mock child components +jest.mock('@/components/meetingSystem/CreateMeetingModal', () => { + return function MockCreateMeetingModal({ onClose, onCreate, receiverName }: any) { return ( -
| # | +Test Name | +Category | +Priority | +Preconditions | +Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|---|
| 1 | +Upload valid NIC + selfie | +CREATION | +HIGH | +User logged in; KYC form visible | +
+ 1. Enter full name 2. Enter valid NIC 3. Upload NIC file + (<2MB) 4. Upload selfie-with-NIC 5. Click Submit + |
+ + New submission appears in Admin KYC list with status “Not Reviewed” + | +new submission appears | +PASS | +
| 2 | +Reject blank-field submission | +VALIDATION | +HIGH | +KYC page loaded | +1. Leave all fields empty 2. Click Submit |
+ + Inline errors under each field (“Full Name is required”, etc.); form + not submitted + | +please fill out this field appeared | +PASS | +
| 3 | +Reject invalid NIC format | +VALIDATION | +MEDIUM | +KYC form visible | +1. Enter “abc123” in NIC Number 2. Click Submit |
+ + Validation message “Enter a valid NIC” under NIC field; no + submission + | ++ Red inline error was there until we enter correct format "Enter + either Old NIC (9 digits + V/X) or New NIC (12 digits)" + | +PASS | +
| 4 | +Reject oversize file upload | +VALIDATION | +MEDIUM | +KYC form visible | +1. Select >2MB file for NIC Document 2. Click Submit |
+ Error toast “File must be under 2MB”; input resets | +file must be less than 2MB inline error | +PASS | +
| 5 | +View pending submissions | +FILTERING | +LOW | +At least one KYC exists | +1. Navigate to KYC tab 2. Observe table |
+ + Table lists NIC, Recipient, Date Submitted, Status, Reviewed, + Documents, Accept/Reject + | +yes all the columns were present | +PASS | +
| 6 | +Download NIC & selfie files | +FUNCTIONALITY | +MEDIUM | +KYC list visible | +1. Click download NIC icon 2. Click download Person icon |
+ Each file downloads with correct name and content | +file downloaded after a click | +PASS | +
| 7 | +Accept a KYC submission | +WORKFLOW | +HIGH | +One “Not Reviewed” row present | +1. Click green ✔ 2. Confirm if prompted |
+ Status → “Accepted”; Reviewed date = today | +accepted as expected | +PASS | +
| 8 | +Reject a KYC submission | +WORKFLOW | +HIGH | +One “Not Reviewed” row present | +1. Click red ✖ 2. Confirm if prompted |
+ Status → “Rejected”; Reviewed date = today | +Rejected as expected | +PASS | +
| 9 | +Search by recipient name | +FILTERING | +LOW | +Multiple names present | +1. Type partial name in search box | +Table filters to matching Recipient rows | +- | +PASS | +
| 10 | +Sort by date submitted | +SORTING | +LOW | +Table visible | +1. Click Date Submitted header 2. Click again |
+ Rows toggle ascending/descending by Date Submitted | +yes it works as expected | +PASS | +
| 11 | +Filter by status | +FILTERING | +LOW | +Various statuses exist | +1. Open status dropdown 2. Select “Accepted” |
+ Table shows only rows with Status = Accepted | +only showed acccepted records | +PASS | +
Tester: P. Renulucshmi
+Date: 2025-07-17
+| # | +Test Name | +Category | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|---|
| RP01 | +Reporting List Renders | +VIEW | +HIGH | +Logged in as Admin; ≥1 report exists | +
+ 1. Navigate to Reporting + 2. Wait for table to load + |
+ Table displays all columns and rows correctly | +All reports appeared as expected | +PASS | +
| RP02 | +Search Reports | +FUNCTIONALITY | +MEDIUM | +≥3 reports with distinct data | +
+ 1. Enter “Not Following” in search + 2. Press Enter + |
+ Only matching rows remain visible | +Search filtered correctly | +PASS | +
| RP03 | +Filter by Status | +FUNCTIONALITY | +MEDIUM | +Reports in multiple statuses exist | +
+ 1. Open Status dropdown + 2. Select “Under Review” + |
+ Only “Under Review” rows remain | +Filter worked as expected | +PASS | +
| RP04 | +Download Report Data | +UTILITY | +LOW | +Table loaded | ++ 1. Click the download (↓) icon on a row + | +Report data downloads successfully | +Download triggered with correct payload | +PASS | +
| RP05 | +Email Reporting User | +WORKFLOW–EMAIL | +HIGH | +A pending report exists | +
+ 1. Click ✉️ next to Reporting User + 2. Send “Investigating…” email + |
+ Status changes to “Under Review” | +Email sent; status updated | +PASS | +
| RP06 | +Email Reported User | +WORKFLOW–EMAIL | +HIGH | +Report is “Under Review” | +
+ 1. Click ✉️ next to Reported User + 2. Send “Please provide details” email + |
+ Email confirmation shown | +Email sent successfully | +PASS | +
| RP07 | +Issue Warning on False Report | +WORKFLOW–ACTION | +MEDIUM | +Status “Under Review” | +
+ 1. Click ❌ (reject) icon + 2. Choose “Warn Reporter” + |
+ Reporter warned; status = “Resolved – Reporter Warned” | +Warning email sent; status updated | +PASS | +
| RP08 | +Issue Warning to Reported User | +WORKFLOW–ACTION | +MEDIUM | +Status “Under Review” | +
+ 1. Click 🛡️ (warn) icon + 2. Confirm + |
+ Reported user warned; status = “Resolved – Reported Warned” | +Warning email sent; status updated | +PASS | +
| RP09 | +Resolve Report | +WORKFLOW–COMPLETE | +HIGH | +Any non-resolved status | +
+ 1. Click ✔️ (resolve) icon + 2. Confirm + |
+ Status changes to “Resolved” | +Report marked Resolved | +PASS | +
Tester: P. Renulucshmi
+Date: 2025-07-17
+ +| # | +Test Name | +Category | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|---|
| 1 | +Dashboard Cards Load | +VIEW | +HIGH | +Logged in as Admin/SuperAdmin | +1. Navigate to /admin/dashboard 2. Wait for page load |
+ All five metric cards appear with correct values | +its loading as expected | +PASS | +
| 2 | +Cards Accuracy | +VERIFICATION | +HIGH | +Dashboard loaded; known backend data | +1. Compare card values to API/DB 2. Refresh page |
+ Each card value matches the source of truth | +it matches with database count as well | +PASS | +
| 3 | +Registration Chart Plot | +VISUALIZATION | +MEDIUM | +≥1 registration record exists | +1. Observe line chart 2. Hover data points |
+ Chart shows daily points; tooltip shows date & count | ++ when hover points in shows no of users registered on a specific day + | +PASS | +
| 4 | +Chart Date Range Filter | +FUNCTIONALITY | +MEDIUM | +Date‑range dropdown visible | +1. Select Last 7 Days 2. Select All Time |
+ Chart re‑renders to selected range | +chart re renders when we change the drop down | +PASS | +
| 5 | +Skill Distribution Donut | +VISUALIZATION | +MEDIUM | +≥1 skill assignment exists | +1. Observe donut chart 2. Hover slices |
+ Each slice shows category & %; total sums to 100% | +each hover shows no of skills in each cateogory | +PASS | +
| 6 | +Loading Skeletons | +UX | +LOW | +Network throttled | +1. Throttle to Slow 3G 2. Reload page |
+ Skeleton placeholders displayed until data arrives | +until data arrives it shows loading sign | +PASS | +
| 7 | +Network Calls Verification | +DEBUG | +LOW | +DevTools open | +1. Monitor Network tab 2. Reload page |
+ GET /api/dashboard fires once; no 404/500 errors | ++ A single GET /api/dashboard request fired on load (200 OK), followed + by two GET /api/skillLists requests; no 404/500 errors. + | +PASS | +
Tester: P. Renulucshmi
+Date: 2025-07-17
+ +| # | +Test Name | +Priority | +Preconditions | +Steps | +Expected | +Actual | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | +Page Load & UI Elements | +HIGH | +Browser open; Admin login page reachable | +Navigate to /admin/login Observe form fields and buttons |
+ Username, Password fields and Login button are visible | +yes can view the page | +PASS | +
| 2 | +Empty Fields Validation | +MEDIUM | +Login page open | +Leave both fields blank Click Login |
+ Inline errors: “Username required” and “Password required” | +yes validated | +PASS | +
| 3 | +Invalid Credentials | +HIGH | +Login page open | +Enter wrong username/password Click Login |
+ Error toast: “Invalid credentials” | +Invalid username or password inline error | +PASS | +
| 4 | +Successful Login | +HIGH | +Valid admin credentials | +Fill in correct username & password Click Login |
+ Redirect to /admin/dashboard | +it redirect to dashboard | +PASS | +
| 5 | +Password Mask Toggle | +LOW | +Login form visible | +Enter password Click show/hide icon |
+ Password toggles between masked and plain text | +when click the toggle password is visible | +PASS | +
| # | +Test Name | +Category | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|---|
| 1 | +View Admin List | +VIEWING | +MEDIUM | +Logged in as Admin or Super Admin; Admin Management page open | +
+ 1. Navigate to Admin Management 2. Wait for table to load + |
+ + Table shows Username, Email, Role, Permissions, Created, Actions; ≥1 + row present + | +table with the all columns showed | +PASS | +
| 2 | +Search by Username or Email | +FILTERING | +LOW | +Admin Mgmt page loaded with ≥2 entries | +1. Type part of a username or email into search box | +Only matching rows remain visible | +yes search box is functioning as expected | +PASS | +
| 3 | +Filter by Role | +FILTERING | +LOW | +Mixed Admin & Super Admin rows present | +1. Select Admin then Super Admin from dropdown | +Table filters to show only rows for the selected role | +filter show only respected column | +PASS | +
| 4 | +Edit Admin Details | +UPDATE | +MEDIUM | +At least one row present; Edit icon visible | +
+ 1. Click ✏️ on a row 2. Change email or role 3. Click Save + |
+ That row updates to reflect the new email/role | +the row update after edit | +PASS | +
| 5 | +Delete Another Admin | +DELETION | +HIGH | +Another user’s row exists | +1. Click 🗑️ on that row 2. Confirm deletion |
+ Row is removed; success message shown | +successfully deleted | +PASS | +
| 6 | +Prevent Self‑Deletion | +VALIDATION | +HIGH | +Your own row present | +1. Attempt to click 🗑️ on your own row | +Delete button disabled or error “Cannot delete yourself.” | +its not allowing to deleted myself | +PASS | +
| 7 | +Create New Admin (Super only) | +CREATION | +HIGH | +Logged in as Super Admin; Create Admin button visible | +
+ 1. Click Create Admin 2. Fill Username, Email, Password, + Role=Admin, Permissions 3. Click Create Admin + |
+ New admin appears in the table with correct details | +yes superadmin can create new admin | +PASS | +
| 8 | +Deny Access to Admin Mgmt (Admin only) | +VALIDATION | +HIGH | +Logged in as normal Admin | +1. Look for Admin Management tab/menu item | +No Admin Management entry is visible to normal Admin | ++ admin admin management tab is not visible. only visible for + superAdmin + | +PASS | +
| 9 | +Validate Create‑Form | +VALIDATION | +MEDIUM | +Create Admin modal open | +
+ 1. Leave required fields blank or invalid 2. Click Create Admin + |
+ Inline validation errors appear; form not submitted | +username ,password ,email validation are included | +PASS | +
| 10 | +Permission Persistence | +FUNCTIONALITY | +MEDIUM | +After Create or Edit | +1. Reload Admin Management page | +Created/edited admins & permissions persist correctly | +after reload also its persisted | +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 | 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 |
| # | +Test Name | +Category | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|---|
| 1 | +Badge Name Required | +ADD | +HIGH | +“Add New Badge” form visible; all fields empty | +
+ 1. Leave Badge Name blank 2. Fill other fields correctly 3. + Click Add Badge + |
+ Inline error “Badge Name is required”; form not submitted | +Badge name is required inline error | +PASS | +
| 2 | +Badge Name Min‑Length (≥3 chars) | +ADD | +MEDIUM | +“Add New Badge” form visible | +
+ 1. Enter 1–2 chars in Badge Name 2. Fill others correctly 3. + Click Add Badge + |
+ + Inline error “Name must be at least 3 characters”; submit disabled + | +inline error Badge name must be at least 3 characters long. | +PASS | +
| 3 | +Description Required & Min‑Length | +ADD | +HIGH | +“Add New Badge” form visible | +
+ 1. Leave Description blank or <10 chars 2. Fill other fields + correctly 3. Click Add Badge + |
+ + Inline error “Description must be at least 10 characters”; form not + submitted + | +inline error showed | +PASS | +
| 4 | +Image Required & Format | +ADD | +HIGH | +“Add New Badge” form visible | +1. Leave Badge Image empty 2. Click Add Badge |
+ + Inline error “Please upload an image” or “Unsupported file format” + | ++ Invalid image type. Please use JPEG, PNG, GIF or WEBP inline error + | +PASS | +
| 5 | +Image Size Limit (≤2 MB) | +ADD | +MEDIUM | +“Add New Badge” form visible | +1. Upload file >2 MB 2. Click Add Badge |
+ Inline error “Image must be smaller than 2 MB” | +Image size should be less than 2MB inline error | +PASS | +
| 6 | +Edit Badge Inline Validation | +UPDATE | +HIGH | +At least one badge card present | +
+ 1. Click Edit on a badge 2. Clear or shorten Badge + Name/Description + |
+ Same inline errors as BM01–BM03; Save blocked until valid | +inline error showed | +PASS | +
| 7 | +Submit Edit Updates List | +UPDATE | +MEDIUM | +Edit form open; fields valid | +1. Modify name or image 2. Click Save |
+ Badge card updates immediately without full reload | +its updated without reloading page | +PASS | +
| 8 | +Delete Badge Confirmation | +DELETE | +MEDIUM | +At least one badge card present | +1. Click Delete on a badge 2. Confirm deletion |
+ + Confirmation dialog appears; after confirm, badge removed and + success alert shown + | +Badge deleted successfully! alert shown | +PASS | +
| # | +Test Name | +Priority | +Preconditions | +Test Steps | +Expected Result | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|
| 1 | +Page Load & Default List (BG01) | +High | +User authenticated; at least 1 badge exists | +
+ 1. Navigate to /badges+ 2. Wait for page load to complete + |
+ All badges rendered as cards; Category dropdown set to “All” | +yes worked as expected | +Pass | +
| 2 | +Filter by Category (BG02) | +Medium | +Multiple badges across categories exist | +
+ 1. Select “Achievement Milestone” in Category dropdown + 2. Observe the displayed badge list + |
+ Only “Achievement Milestone” badges remain visible | +work as expected | +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: P.Renlucshmi
+Date: 2025-07-17
+| # | +Test Name | +Priority | +Preconditions | +Steps | +Expected Result | +Exec Date | +Actual Result | +Status | +
|---|---|---|---|---|---|---|---|---|
| SU01 | +Suspend a User | +High | +User exists; Admin logged in | +
+ 1. Go to Users + 2. Click “Suspend” + 3. Enter reason + 4. Confirm + |
+ User moves to Suspended list | +2025‑07‑17 | +User moved from Users to Suspended Users | +Pass | +
| SU02 | +Search Suspended Users | +Medium | +≥1 suspended user | +
+ 1. Open Suspended Users + 2. Type search + |
+ Table filters to matching rows | +2025‑07‑17 | +Search works | +Pass | +
| SU03 | +Prevent Suspended Login | +High | +User is suspended | +1. Attempt login | +Login blocked with suspend message | +2025‑07‑17 | +User blocked from login | +Pass | +
| SU04 | +Prevent Re‑registration | +Medium | +Email suspended | +1. Sign up with same email | +Registration rejected: Email in use | +2025‑07‑17 | +Cannot create account with same email | +Pass | +
| SU05 | +Unsuspend a User | +High | +User in Suspended list | +
+ 1. Click ✓ + 2. Confirm + |
+ User moves back to Users list | +2025‑07‑17 | +User unsuspended and can log in again | +Pass | +
| SU06 | +Reason Validation | +Medium | +Suspend dialog open | +1. Click Confirm without reason | +Error: Reason is required | +2025‑07‑17 | +User isn’t suspended without a reason | +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 | +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.
+
Loading meeting...
+ +Loading meeting...
+
{error || 'You are not authorized to access this meeting.'}
-+
This meeting has not been accepted yet.
)} {meeting.state === 'accepted' && !meeting.meetingLink && ( -+
Meeting link is not available yet.
)} {meeting.state === 'accepted' && meeting.meetingLink && isTooEarly && ( -Meeting starts in:
-+
Meeting starts in:
+{(() => { const minutesUntil = Math.floor(timeUntilMeeting / (1000 * 60)); if (minutesUntil >= 60) { @@ -174,34 +174,34 @@ export default function MeetingPage() { return `${minutesUntil} minutes`; })()}
-+
You can join 30 minutes before the scheduled time.
+
This meeting has ended.
)}+
With: {otherUser?.firstName} {otherUser?.lastName}
-+
Scheduled: {meetingTime.toLocaleString()}
-+
Description: {meeting.description}