Test Cases

Comprehensive test cases for the Next.js Authentication Template. Use this document to verify all features and functionality.

Authentication Flows

Login

Test IDTest CaseStepsExpected ResultStatus
TC-AUTH-001Login with valid credentials1. Navigate to /login
2. Enter valid email and password
3. Click Sign In
User is redirected to /dashboard, session is created
TC-AUTH-002Login with invalid email format1. Navigate to /login
2. Enter invalid email format
3. Click Sign In
Validation error message displayed, form not submitted
TC-AUTH-003Login with invalid password1. Navigate to /login
2. Enter valid email, invalid password
3. Click Sign In
Error message: "Invalid email or password"
TC-AUTH-004Login with empty fields1. Navigate to /login
2. Leave fields empty
3. Click Sign In
Validation errors for required fields displayed
TC-AUTH-005Loading state during login1. Navigate to /login
2. Enter credentials
3. Click Sign In
Button shows "Signing in..." and is disabled during request

Register

Test IDTest CaseStepsExpected ResultStatus
TC-REG-001Register with valid data1. Navigate to /register
2. Enter name, email, password, confirm password
3. Click Create Account
Account created, success message shown, redirect to dashboard
TC-REG-002Register with existing email1. Navigate to /register
2. Enter email that already exists
3. Submit form
Error message: "This email is already registered"
TC-REG-003Password mismatch1. Navigate to /register
2. Enter different passwords in password and confirm fields
3. Submit form
Validation error: "Passwords do not match"
TC-REG-004Weak password validation1. Navigate to /register
2. Enter password without uppercase/number
3. Submit form
Validation error: "Password must contain at least one uppercase letter and one number"
TC-REG-005Required field validation1. Navigate to /register
2. Leave one or more fields empty
3. Submit form
Validation errors for empty required fields displayed

Forgot Password

Test IDTest CaseStepsExpected ResultStatus
TC-FP-001Request password reset with valid email1. Navigate to /forgot-password
2. Enter registered email
3. Click Send Reset Link
Success message displayed, email sent (if account exists)
TC-FP-002Request with invalid email format1. Navigate to /forgot-password
2. Enter invalid email format
3. Submit form
Validation error: "Please enter a valid email address"
TC-FP-003Request with non-existent email1. Navigate to /forgot-password
2. Enter email that doesn't exist
3. Submit form
Same success message (security: don't reveal if email exists)

Reset Password

Test IDTest CaseStepsExpected ResultStatus
TC-RP-001Reset password with valid token1. Click reset link from email
2. Enter new password and confirm
3. Submit form
Password reset successfully, redirect to login
TC-RP-002Reset with expired token1. Use expired reset token
2. Try to reset password
Error message: "Invalid or expired reset link"
TC-RP-003Password mismatch in reset1. Click reset link
2. Enter different passwords
3. Submit form
Validation error: "Passwords do not match"

OTP Verification

Test IDTest CaseStepsExpected ResultStatus
TC-OTP-001Verify with correct OTP1. Navigate to /otp
2. Enter 6-digit code from email
3. Click Verify
Verification successful, redirect to dashboard
TC-OTP-002Verify with incorrect OTP1. Navigate to /otp
2. Enter wrong 6-digit code
3. Click Verify
Error message displayed, verification fails
TC-OTP-003OTP countdown timer1. Navigate to /otp
2. Observe resend button
Resend button disabled, shows countdown (60s), then enables
TC-OTP-004Resend OTP code1. Navigate to /otp
2. Wait for countdown
3. Click Resend code
New OTP sent, countdown resets to 60s
TC-OTP-005Invalid OTP length1. Navigate to /otp
2. Enter less than 6 digits
3. Try to submit
Validation error: "Code must be 6 digits"

Social Login

Google Login

Test IDTest CaseStepsExpected ResultStatus
TC-SOC-001Login with Google (new user)1. Navigate to /login
2. Click "Continue with Google"
3. Complete Google OAuth flow
Account created, user logged in, redirected to dashboard
TC-SOC-002Login with Google (existing user)1. Navigate to /login
2. Click "Continue with Google"
3. Use existing Google account
User logged in, redirected to dashboard
TC-SOC-003Cancel Google OAuth1. Navigate to /login
2. Click "Continue with Google"
3. Cancel OAuth flow
User remains on login page, no error

Facebook Login

Test IDTest CaseStepsExpected ResultStatus
TC-SOC-004Login with Facebook1. Navigate to /login
2. Click "Continue with Facebook"
3. Complete Facebook OAuth flow
User logged in, redirected to dashboard

Instagram Login

Test IDTest CaseStepsExpected ResultStatus
TC-SOC-005Login with Instagram1. Navigate to /login
2. Click "Continue with Instagram"
3. Complete Instagram OAuth flow
User logged in, redirected to dashboard

LINE Login

Test IDTest CaseStepsExpected ResultStatus
TC-SOC-006Login with LINE1. Navigate to /login
2. Click "Continue with LINE"
3. Complete LINE OAuth flow
User logged in, redirected to dashboard

Protected Routes

Test IDTest CaseStepsExpected ResultStatus
TC-PROT-001Access dashboard when authenticated1. Login successfully
2. Navigate to /dashboard
Dashboard page loads, user info displayed
TC-PROT-002Access dashboard when not authenticated1. Logout or clear session
2. Navigate to /dashboard
Redirected to /login page
TC-PROT-003Access auth pages when authenticated1. Login successfully
2. Navigate to /login or /register
Redirected to /dashboard

Logout

Test IDTest CaseStepsExpected ResultStatus
TC-LOGOUT-001Logout successfully1. Login to account
2. Click Logout button
3. Confirm logout
Session cleared, redirected to login page
TC-LOGOUT-002Logout loading state1. Login to account
2. Click Logout button
Button shows "Signing out..." and is disabled during logout

Internationalization (i18n)

Test IDTest CaseStepsExpected ResultStatus
TC-I18N-001Switch to English1. Navigate to any page
2. Switch language to English
All text displays in English, URL updates to /en
TC-I18N-002Switch to Japanese1. Navigate to any page
2. Switch language to Japanese
All text displays in Japanese, URL updates to /ja
TC-I18N-003Language persistence1. Switch language
2. Navigate to different pages
3. Refresh page
Selected language persists across navigation and page refresh

UI/UX

Test IDTest CaseStepsExpected ResultStatus
TC-UI-001Responsive design - Mobile1. Open app on mobile device
2. Navigate through pages
All pages display correctly, forms are usable, buttons accessible
TC-UI-002Responsive design - Tablet1. Open app on tablet device
2. Navigate through pages
All pages display correctly, layout adapts to tablet size
TC-UI-003Dark mode toggle1. Navigate to any page
2. Toggle dark mode
Theme switches between light and dark, preference persists
TC-UI-004Form validation messages1. Navigate to any form
2. Submit with invalid data
Clear, helpful error messages displayed below each field
TC-UI-005Loading states1. Perform any action (login, register, etc.)
2. Observe loading state
Buttons show loading text, disabled during request, no double submission

Form Validation & Regex

Email Validation

Test IDTest CaseRegexExpected ResultStatus
TC-VAL-001Valid email format/^[^\s@]+@[^\s@]+\.[^\s@]+$/Email accepted, no validation error
TC-VAL-002Email without @ symbol/^[^\s@]+@[^\s@]+\.[^\s@]+$/
userexample.com
Validation error: "Email không hợp lệ"
TC-VAL-003Email without domain/^[^\s@]+@[^\s@]+\.[^\s@]+$/
user@
Validation error: "Email không hợp lệ"
TC-VAL-004Email without TLD/^[^\s@]+@[^\s@]+\.[^\s@]+$/
user@example
Validation error: "Email không hợp lệ"
TC-VAL-005Empty email fieldRequired fieldValidation error displayed for required field

Password Validation (Regex)

Test IDTest CaseStepsExpected ResultStatus
TC-VAL-006Valid password (all requirements)1. Navigate to /register or /reset-password
2. Enter password: Password123
3. Submit form
Password accepted, no validation error
TC-VAL-007Password without uppercase (regex: /[A-Z]/)1. Navigate to /register
2. Enter password: password123
3. Submit form
Validation error: "Cần ít nhất 1 chữ hoa"
TC-VAL-008Password without lowercase (regex: /[a-z]/)1. Navigate to /register
2. Enter password: PASSWORD123
3. Submit form
Validation error: "Cần ít nhất 1 chữ thường"
TC-VAL-009Password without number (regex: /[0-9]/)1. Navigate to /register
2. Enter password: Password
3. Submit form
Validation error: "Cần ít nhất 1 số"
TC-VAL-010Password less than 8 characters1. Navigate to /register
2. Enter password: Pass123
3. Submit form
Validation error: "Mật khẩu tối thiểu 8 ký tự"
TC-VAL-011Password with only uppercase1. Navigate to /register
2. Enter password: PASSWORD123
3. Submit form
Validation error: "Cần ít nhất 1 chữ thường"
TC-VAL-012Password with only lowercase1. Navigate to /register
2. Enter password: password123
3. Submit form
Validation error: "Cần ít nhất 1 chữ hoa"
TC-VAL-013Password with only numbers1. Navigate to /register
2. Enter password: 12345678
3. Submit form
Validation error: "Cần ít nhất 1 chữ hoa" and "Cần ít nhất 1 chữ thường"
TC-VAL-014Empty password field1. Navigate to /register
2. Leave password field empty
3. Submit form
Validation error: "Mật khẩu tối thiểu 8 ký tự"

Name Validation

Test IDTest CaseStepsExpected ResultStatus
TC-VAL-015Valid name (2+ characters)1. Navigate to /register
2. Enter name: John Doe
3. Submit form
Name accepted, no validation error
TC-VAL-016Name less than 2 characters1. Navigate to /register
2. Enter name: J
3. Submit form
Validation error: "Tên tối thiểu 2 ký tự"
TC-VAL-017Empty name field1. Navigate to /register
2. Leave name field empty
3. Submit form
Validation error: "Tên tối thiểu 2 ký tự"

Error Handling

Test IDTest CaseStepsExpected ResultStatus
TC-ERR-001Network error handling1. Disable network
2. Try to login or register
Error message: "Network error. Please try again."
TC-ERR-002Server error handling1. Simulate server error (500)
2. Try to perform action
Error message: "An error occurred. Please try again."
TC-ERR-003Timeout handling1. Simulate slow network
2. Wait for timeout
Appropriate timeout error message displayed
Test IDTest CaseStepsExpected ResultStatus
TC-SEARCH-001Open search with button1. Navigate to any docs page
2. Click search icon in header
Search input opens, auto-focused, placeholder shows "Search documentation..."
TC-SEARCH-002Open search with keyboard shortcut1. Navigate to any docs page
2. Press Cmd+K (Mac) or Ctrl+K (Windows/Linux)
Search input opens, auto-focused
TC-SEARCH-003Search with valid query1. Open search
2. Type "login" (2+ characters)
3. Observe results
Dropdown shows matching results with title and section, results are clickable
TC-SEARCH-004Search with no results1. Open search
2. Type "xyz123nonexistent"
3. Observe results
Shows "No results found for..." message
TC-SEARCH-005Search with less than 2 characters1. Open search
2. Type "l" (1 character)
No results dropdown shown (minMatchCharLength: 2)
TC-SEARCH-006Keyboard navigation - Arrow Down1. Open search
2. Type query with results
3. Press Arrow Down key
Selected result moves down, highlighted, scrolls into view if needed
TC-SEARCH-007Keyboard navigation - Arrow Up1. Open search
2. Type query with results
3. Press Arrow Up key
Selected result moves up, highlighted, scrolls into view if needed
TC-SEARCH-008Keyboard navigation - Enter1. Open search
2. Type query with results
3. Navigate to a result
4. Press Enter
Navigates to selected result page, search closes
TC-SEARCH-009Close search with Escape1. Open search
2. Press Escape key
Search closes, query cleared
TC-SEARCH-010Close search with X button1. Open search
2. Click X button
Search closes, query cleared
TC-SEARCH-011Click result navigates1. Open search
2. Type query
3. Click on a result
Navigates to selected page, search closes
TC-SEARCH-012Fuzzy search matching1. Open search
2. Type "instal" (typo of "installation")
Still shows "Installation" result (fuzzy matching with threshold 0.3)
TC-SEARCH-013Search results show section1. Open search
2. Type query
3. Observe results
Each result shows title (bold) and section name (smaller, muted)
TC-SEARCH-014Search results scrollable1. Open search
2. Type query with many results
3. Scroll dropdown
Results dropdown is scrollable (max-height: 96), all results accessible

Notes

All test cases are marked as checked by default. The checkboxes are disabled and cannot be modified. Use this document as a reference for test case coverage.