Cruise Offer Management - Test Cases¶
1. Introduction¶
1.1 Purpose¶
This document defines the test cases for the Cruise Offer Management module. It provides comprehensive test scenarios covering functional, integration, and UI testing to ensure the module meets all requirements.
1.2 Scope¶
This document covers test cases for: - Dimension data management (companies, areas, ships, cabin types, charge types, ports) - Ship cabin management - Itinerary management and templates - Cruise instance management - Pricing management (cabin charges, other charges, pricing templates) - Search and booking APIs - Pre-booking management - Booking management (booking CRUD, passengers, booked cabins, add-ons, status lifecycle) - User interface functionality (dashboard, itinerary management, agent booking pages)
1.3 References¶
- Use Cases: Cruise-Offer-Management-UseCases.md
- Functional Requirements: Cruise-Offer-Management-Requirements.md
- UI Requirements: Cruise-Offer-UI-Requirements.md
1.4 Test Environment Requirements¶
- TQPro application server running
- PostgreSQL database with cruise schema deployed
- Test user accounts with appropriate roles (Administrator, Cruise Manager, Booking Agent)
- Web browser (Chrome, Firefox, or Edge)
- API testing tool (Postman or similar) for API tests
2. Test Case Summary¶
2.1 Test Case Categories¶
| Category | ID Range | Count | Description |
|---|---|---|---|
| Dimension Data | TC-DIM-001 to TC-DIM-050 | 50 | Company, area, ship, cabin type, charge type, port management |
| Ship Cabin | TC-CAB-001 to TC-CAB-020 | 20 | Ship cabin assignment and management |
| Itinerary | TC-ITN-001 to TC-ITN-040 | 40 | Itinerary CRUD and template management |
| Cruise Instance | TC-CRU-001 to TC-CRU-045 | 45 | Cruise creation, points, status management |
| Pricing | TC-PRC-001 to TC-PRC-035 | 35 | Cabin charges and other charges |
| Search & Booking | TC-BKG-001 to TC-BKG-040 | 40 | Search APIs and booking interface |
| Pre-Booking | TC-PRE-001 to TC-PRE-010 | 10 | Pre-booking management and inventory |
| Booking Management | TC-BKM-001 to TC-BKM-032 | 32 | Booking CRUD, passengers, cabins, add-ons, status, capacity validation, adult-only filtering |
| UI - Dashboard | TC-UID-001 to TC-UID-012 | 12 | Dashboard page functionality, KPI cards, print, redirect, port count, copy dialog |
| UI - Itinerary | TC-UII-001 to TC-UII-012 | 12 | Itinerary management page |
| UI - Agent Booking | TC-UIB-001 to TC-UIB-019 | 19 | Agent booking page functionality, customer name, pax count, independent scrolling |
| UI & Integration | TC-UI-001 to TC-UI-040 | 40 | Legacy UI and integration tests |
| Negative & Edge | TC-NEG-001 to TC-NEG-010 | 10 | Negative and edge case tests |
2.2 Priority Definitions¶
| Priority | Description | Execution |
|---|---|---|
| P1 - Critical | Core functionality, blocking issues | Every build |
| P2 - High | Important features, major workflows | Every release |
| P3 - Medium | Secondary features, edge cases | Weekly regression |
| P4 - Low | Minor features, cosmetic issues | Monthly regression |
3. Dimension Data Test Cases¶
3.1 Cruise Company Tests¶
TC-DIM-001: Create Cruise Company - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-001 |
| Title | Create Cruise Company with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-01 |
| Related Requirement | REQ-DIM-001, REQ-DIM-005 |
Entry Criteria: - User is logged in with Administrator role - Cruise Management page is accessible
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Navigate to Cruise Management page | Page loads successfully | | 2 | Click "Add Company" button | Company dialog opens | | 3 | Enter code: "RCCL" | Code field accepts input | | 4 | Enter name: "Royal Caribbean" | Name field accepts input | | 5 | Click Save | Dialog closes, success notification shown | | 6 | Verify company appears in tree | Company "Royal Caribbean" visible in tree |
Exit Criteria: - Company record created in database - Company visible in UI tree - Success notification displayed
Test Data:
TC-DIM-002: Create Cruise Company - Duplicate Code¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-002 |
| Title | Create Cruise Company with Duplicate Code |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-01 |
| Related Requirement | REQ-DIM-005 |
Entry Criteria: - Company with code "RCCL" already exists - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add Company" button | Company dialog opens | | 2 | Enter code: "RCCL" | Code field accepts input | | 3 | Enter name: "Another Company" | Name field accepts input | | 4 | Click Save | Error displayed: "Company code must be unique" | | 5 | Verify dialog remains open | Dialog stays open for correction |
Exit Criteria: - No duplicate record created - Appropriate error message displayed - User can correct and retry
TC-DIM-003: Create Cruise Company - Missing Required Fields¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-003 |
| Title | Create Cruise Company with Missing Required Fields |
| Priority | P2 - High |
| Related Use Case | UC-DIM-01 |
| Related Requirement | REQ-DIM-001 |
Entry Criteria: - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add Company" button | Company dialog opens | | 2 | Leave code empty | - | | 3 | Enter name: "Test Company" | Name field accepts input | | 4 | Click Save | Validation error: "Code is required" | | 5 | Enter code: "TEST" | - | | 6 | Clear name field | - | | 7 | Click Save | Validation error: "Name is required" |
Exit Criteria: - Validation prevents submission - Clear error messages displayed - Form highlights invalid fields
TC-DIM-004: Create Cruise Company - Code Length Validation¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-004 |
| Title | Create Cruise Company - Code Maximum Length |
| Priority | P2 - High |
| Related Use Case | UC-DIM-01 |
| Related Requirement | REQ-DAT-021 |
Entry Criteria: - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add Company" button | Company dialog opens | | 2 | Enter code: "ABCDEFGHIJK" (11 chars) | Input truncated or rejected | | 3 | Enter code: "ABCDEFGHIJ" (10 chars) | Code accepted | | 4 | Enter name: "Test Company" | Name field accepts input | | 5 | Click Save | Company created successfully |
Exit Criteria: - Code field enforces 10 character maximum - Valid 10-character code is accepted
TC-DIM-005: Edit Cruise Company¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-005 |
| Title | Edit Existing Cruise Company |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-01 |
| Related Requirement | REQ-DIM-003 |
Entry Criteria: - Company "RCCL - Royal Caribbean" exists - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Locate company in tree | Company visible | | 2 | Click edit button on company | Company dialog opens with existing data | | 3 | Verify code field shows "RCCL" | Code pre-populated | | 4 | Verify name field shows "Royal Caribbean" | Name pre-populated | | 5 | Change name to "Royal Caribbean International" | Name field updated | | 6 | Click Save | Dialog closes, success notification | | 7 | Verify tree shows updated name | Name updated in tree |
Exit Criteria: - Company record updated in database - UI reflects changes - Success notification displayed
TC-DIM-006: Delete Cruise Company - No Dependencies¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-006 |
| Title | Delete Cruise Company Without Dependencies |
| Priority | P2 - High |
| Related Use Case | UC-DIM-01 |
| Related Requirement | REQ-DIM-004 |
Entry Criteria: - Company exists with no associated ships - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Locate company without ships in tree | Company visible | | 2 | Click delete button on company | Confirmation dialog appears | | 3 | Verify confirmation message | "Delete company [name]?" displayed | | 4 | Click Confirm | Company deleted, removed from tree | | 5 | Verify company no longer in database | Record deleted |
Exit Criteria: - Company record deleted - Company removed from UI - Success notification displayed
TC-DIM-007: Delete Cruise Company - With Dependencies¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-007 |
| Title | Delete Cruise Company With Associated Ships |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-01 |
| Related Requirement | REQ-DIM-004 |
Entry Criteria: - Company exists with at least one associated ship - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Locate company with ships in tree | Company visible with ships | | 2 | Click delete button on company | Error displayed | | 3 | Verify error message | "Cannot delete company with associated ships" | | 4 | Verify company still exists | Company remains in tree |
Exit Criteria: - Delete prevented - Company record intact - Clear error message displayed
TC-DIM-008: List Cruise Companies API¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-008 |
| Title | List Cruise Companies API Endpoint |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-API (Section 6.3) |
Entry Criteria: - API server running - At least 2 companies exist in database
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/company/list with {"session":""} | Response status 200 |
| 2 | Verify response structure | {"status":"OK","data":[...]} |
| 3 | Verify data contains company objects | Array of CCruiseCompany |
| 4 | Verify each object has companyId, code, name | All fields present |
Exit Criteria: - API returns valid response - All companies returned - Response structure correct
Expected Response:
{
"status": "OK",
"errorCode": null,
"errorMessage": null,
"data": [
{"companyId": 1, "code": "RCCL", "name": "Royal Caribbean"},
{"companyId": 2, "code": "NCL", "name": "Norwegian Cruise Line"}
]
}
3.2 Cruise Area Tests¶
TC-DIM-010: Create Cruise Area - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-010 |
| Title | Create Cruise Area with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-02 |
| Related Requirement | REQ-DIM-010 |
Entry Criteria: - User is logged in with Administrator role - Settings dialog is accessible
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open Settings dialog | Dialog opens | | 2 | Select "Cruise Areas" tab | Areas table displayed | | 3 | Click "Add Area" button | Area dialog opens | | 4 | Enter code: "CARIB" | Code field accepts input | | 5 | Enter description: "Caribbean" | Description field accepts input | | 6 | Click Save | Dialog closes, success notification | | 7 | Verify area appears in table | Area visible in list |
Exit Criteria: - Area record created - Area visible in settings table - Success notification displayed
TC-DIM-011: Create Cruise Area - Duplicate Code¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-011 |
| Title | Create Cruise Area with Duplicate Code |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-02 |
| Related Requirement | REQ-DIM-014 |
Entry Criteria: - Area with code "CARIB" already exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add Area" button | Area dialog opens | | 2 | Enter code: "CARIB" | Code field accepts input | | 3 | Enter description: "Another Caribbean" | Description accepts input | | 4 | Click Save | Error: "Area code must be unique" |
Exit Criteria: - Duplicate prevented - Error message displayed
TC-DIM-012: Delete Cruise Area - With Itineraries¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-012 |
| Title | Delete Cruise Area with Associated Itineraries |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-02 |
| Related Requirement | REQ-DIM-013 |
Entry Criteria: - Area exists with at least one associated itinerary
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open Settings > Cruise Areas | Areas table displayed | | 2 | Click delete on area with itineraries | Error displayed | | 3 | Verify error message | "Cannot delete area with associated itineraries" |
Exit Criteria: - Delete prevented - Area record intact
3.3 Cruise Ship Tests¶
TC-DIM-020: Create Cruise Ship - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-020 |
| Title | Create Cruise Ship with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-03 |
| Related Requirement | REQ-DIM-020 |
Entry Criteria: - At least one company exists - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open Settings > Ships | Ships table displayed | | 2 | Click "Add Ship" button | Ship dialog opens | | 3 | Enter code: "OASIS" | Code accepted | | 4 | Enter name: "Oasis of the Seas" | Name accepted | | 5 | Enter description: "World's largest cruise ship" | Description accepted | | 6 | Select company: "Royal Caribbean" | Company selected | | 7 | Enter doc URL: "https://example.com/oasis.pdf" | URL accepted | | 8 | Click Save | Ship created successfully |
Exit Criteria: - Ship record created with all fields - Ship visible in settings table - Company association correct
TC-DIM-021: Create Cruise Ship - Company Required¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-021 |
| Title | Create Cruise Ship Without Company |
| Priority | P2 - High |
| Related Use Case | UC-DIM-03 |
| Related Requirement | REQ-DIM-020 |
Entry Criteria: - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open Ship dialog | Dialog opens | | 2 | Enter code and name | Fields populated | | 3 | Leave company unselected | Dropdown shows placeholder | | 4 | Click Save | Validation error: "Company is required" |
Exit Criteria: - Validation prevents submission - Error message displayed
3.4 Cabin Type Tests¶
TC-DIM-030: Create Cabin Type - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-030 |
| Title | Create Cabin Type with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-04 |
| Related Requirement | REQ-DIM-030 |
Entry Criteria: - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open Settings > Cabin Types | Cabin types table displayed | | 2 | Click "Add Cabin Type" | Dialog opens | | 3 | Enter code: "BALC" | Code accepted | | 4 | Enter name: "Balcony Cabin" | Name accepted | | 5 | Click Save | Cabin type created |
Exit Criteria: - Cabin type record created - Visible in settings table
TC-DIM-031: Delete Cabin Type - Assigned to Ship¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-031 |
| Title | Delete Cabin Type Assigned to Ship |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-04 |
| Related Requirement | REQ-DIM-033 |
Entry Criteria: - Cabin type is assigned to at least one ship
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open Settings > Cabin Types | Table displayed | | 2 | Click delete on assigned cabin type | Error displayed | | 3 | Verify error | "Cannot delete cabin type assigned to ships" |
Exit Criteria: - Delete prevented - Cabin type intact
3.5 Charge Type Tests¶
TC-DIM-040: Create Charge Type - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-040 |
| Title | Create Charge Type with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-05 |
| Related Requirement | REQ-DIM-050 |
Entry Criteria: - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open Settings > Charge Types | Table displayed | | 2 | Click "Add Charge Type" | Dialog opens | | 3 | Enter code: "PORTTAX" | Code accepted | | 4 | Enter name: "Port Taxes" | Name accepted | | 5 | Click Save | Charge type created |
Exit Criteria: - Charge type record created - Visible in settings table
3.6 Cruise Port Tests¶
TC-DIM-050: Create Cruise Port - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-DIM-050 |
| Title | Create Cruise Port with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-DIM-06 |
| Related Requirement | REQ-DIM-060 |
Entry Criteria: - User is logged in with Administrator role
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open Settings > Cruise Ports | Table displayed | | 2 | Click "Add Port" | Dialog opens | | 3 | Enter code: "DXB" | Code accepted | | 4 | Enter name: "Dubai" | Name accepted | | 5 | Click Save | Port created |
Exit Criteria: - Port record created - Visible in settings table
4. Ship Cabin Management Test Cases¶
TC-CAB-001: Assign Single Cabin Type to Ship¶
| Attribute | Value |
|---|---|
| ID | TC-CAB-001 |
| Title | Assign Single Cabin Type to Ship |
| Priority | P1 - Critical |
| Related Use Case | UC-CAB-01 |
| Related Requirement | REQ-DIM-040 |
Entry Criteria: - Ship exists - Cabin type exists - No prior cabin assignments for this ship
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Navigate to Ship management | Ships list displayed | | 2 | Click "Assign Cabins" on ship | Assignment dialog opens | | 3 | Check "Balcony Cabin" checkbox | Checkbox selected | | 4 | Enter max passengers: 4 | Value accepted | | 5 | Click Save | Assignment created | | 6 | Verify ship cabin record | Record exists with maxPax=4 |
Exit Criteria: - Ship cabin record created - Max passenger capacity set correctly
TC-CAB-002: Assign Multiple Cabin Types to Ship¶
| Attribute | Value |
|---|---|
| ID | TC-CAB-002 |
| Title | Bulk Assign Multiple Cabin Types |
| Priority | P2 - High |
| Related Use Case | UC-CAB-04 |
| Related Requirement | REQ-DIM-045 |
Entry Criteria: - Ship exists - Multiple cabin types exist
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open cabin assignment dialog for ship | Dialog shows all cabin types | | 2 | Check 3 cabin types: Inside, Outside, Balcony | Checkboxes selected | | 3 | Enter max pax for each: 2, 3, 4 | Values accepted | | 4 | Click Save | All assignments created | | 5 | Verify 3 ship cabin records created | Records exist |
Exit Criteria: - All selected cabin types assigned - Each has correct max passenger value
TC-CAB-003: Update Ship Cabin Capacity¶
| Attribute | Value |
|---|---|
| ID | TC-CAB-003 |
| Title | Update Maximum Passenger Capacity |
| Priority | P2 - High |
| Related Use Case | UC-CAB-02 |
| Related Requirement | REQ-DIM-042 |
Entry Criteria: - Ship cabin assignment exists with maxPax=4
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open cabin assignment dialog | Existing assignments shown | | 2 | Verify Balcony cabin shows maxPax=4 | Value displayed | | 3 | Change maxPax to 6 | Value updated | | 4 | Click Save | Assignment updated | | 5 | Verify database shows maxPax=6 | Value persisted |
Exit Criteria: - Max passenger capacity updated - Change persisted to database
TC-CAB-004: Remove Cabin Type - No Charges¶
| Attribute | Value |
|---|---|
| ID | TC-CAB-004 |
| Title | Remove Cabin Type Assignment Without Charges |
| Priority | P2 - High |
| Related Use Case | UC-CAB-03 |
| Related Requirement | REQ-DIM-043 |
Entry Criteria: - Ship cabin assignment exists - No cabin charges reference this ship cabin
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open cabin assignment dialog | Assignments shown | | 2 | Uncheck previously assigned cabin type | Checkbox cleared | | 3 | Click Save | Assignment removed | | 4 | Verify ship cabin record deleted | Record no longer exists |
Exit Criteria: - Ship cabin assignment deleted - No orphan records
TC-CAB-005: Remove Cabin Type - With Charges (Cascade)¶
| Attribute | Value |
|---|---|
| ID | TC-CAB-005 |
| Title | Remove Cabin Type Assignment with Cascade Delete |
| Priority | P1 - Critical |
| Related Use Case | UC-CAB-03 |
| Related Requirement | REQ-DIM-044 |
Entry Criteria: - Ship cabin assignment exists - Cabin charges exist for this ship cabin
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open cabin assignment dialog | Assignments shown | | 2 | Uncheck cabin type with charges | Checkbox cleared | | 3 | Click Save | Warning dialog appears | | 4 | Verify warning message | "Removing will delete X cabin charges" | | 5 | Click Confirm | Cascade delete executed | | 6 | Verify cabin charges deleted | Charges removed | | 7 | Verify ship cabin deleted | Assignment removed |
Exit Criteria: - Warning displayed before cascade - All related records deleted on confirm
5. Itinerary Management Test Cases¶
TC-ITN-001: Create Itinerary - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-001 |
| Title | Create Itinerary with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-ITN-01 |
| Related Requirement | REQ-ITN-001 |
Entry Criteria: - Company with ship exists - Cruise area exists - User logged in as Cruise Manager
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select company in tree | Company highlighted | | 2 | Click "Add Itinerary" | Itinerary dialog opens | | 3 | Enter code: "7N-CARIB-EAST" | Code accepted | | 4 | Enter duration: 7 | Duration accepted | | 5 | Select ship: "Oasis of the Seas" | Ship selected | | 6 | Select area: "Caribbean" | Area selected | | 7 | Enter image URL (optional) | URL accepted | | 8 | Click Save | Itinerary created | | 9 | Verify itinerary in tree | Appears under company |
Exit Criteria: - Itinerary record created with Active status - Itinerary visible in company tree
Test Data:
{
"code": "7N-CARIB-EAST",
"duration": 7,
"shipId": 1,
"areaId": 1,
"imageUrl": "https://example.com/itinerary.jpg"
}
TC-ITN-002: Create Itinerary - Invalid Duration¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-002 |
| Title | Create Itinerary with Invalid Duration |
| Priority | P2 - High |
| Related Use Case | UC-ITN-01 |
| Related Requirement | REQ-DAT-027 |
Entry Criteria: - User logged in as Cruise Manager
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open itinerary dialog | Dialog opens | | 2 | Enter duration: 0 | Value entered | | 3 | Click Save | Error: "Duration must be positive" | | 4 | Enter duration: -5 | Value entered | | 5 | Click Save | Error: "Duration must be positive" | | 6 | Enter duration: 7 | Value accepted | | 7 | Complete form and Save | Itinerary created |
Exit Criteria: - Invalid durations rejected - Valid positive integer accepted
TC-ITN-003: Edit Itinerary¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-003 |
| Title | Edit Existing Itinerary |
| Priority | P1 - Critical |
| Related Use Case | UC-ITN-02 |
| Related Requirement | REQ-ITN-003 |
Entry Criteria: - Itinerary exists - User logged in as Cruise Manager
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select itinerary in tree | Itinerary details shown | | 2 | Modify duration from 7 to 10 | Field updated | | 3 | Click Save | Changes saved | | 4 | Verify duration updated | Database shows 10 | | 5 | Refresh page | Duration still shows 10 |
Exit Criteria: - Itinerary updated - Changes persisted
TC-ITN-004: Delete Itinerary - No Cruises¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-004 |
| Title | Delete Itinerary Without Cruises |
| Priority | P2 - High |
| Related Use Case | UC-ITN-03 |
| Related Requirement | REQ-ITN-004 |
Entry Criteria: - Itinerary exists with no cruises - May have template entries
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select itinerary | Itinerary details shown | | 2 | Click Delete | Confirmation dialog | | 3 | Confirm deletion | Itinerary deleted | | 4 | Verify template entries deleted | No orphan templates | | 5 | Verify itinerary removed from tree | Not visible |
Exit Criteria: - Itinerary and templates deleted - Removed from UI
TC-ITN-005: Delete Itinerary - With Cruises¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-005 |
| Title | Delete Itinerary with Existing Cruises |
| Priority | P1 - Critical |
| Related Use Case | UC-ITN-03 |
| Related Requirement | REQ-ITN-004 |
Entry Criteria: - Itinerary exists with at least one cruise
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select itinerary with cruises | Details shown | | 2 | Click Delete | Error displayed | | 3 | Verify error message | "Cannot delete itinerary with existing cruises" | | 4 | Verify itinerary intact | Still in tree |
Exit Criteria: - Delete prevented - Itinerary unchanged
TC-ITN-006: Toggle Itinerary Status - Active to Inactive¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-006 |
| Title | Deactivate Active Itinerary |
| Priority | P2 - High |
| Related Use Case | UC-ITN-04 |
| Related Requirement | REQ-ITN-005 |
Entry Criteria: - Active itinerary exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select active itinerary | Status shows "Active" | | 2 | Click "Deactivate" button | Status changes to "Inactive" | | 3 | Verify status badge updated | Shows "Inactive" | | 4 | Enable "Show Inactive" filter | Itinerary visible | | 5 | Disable filter | Itinerary hidden |
Exit Criteria: - Status changed to Inactive - Filter controls visibility
TC-ITN-010: Add Template Entry - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-010 |
| Title | Add Template Entry with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-ITN-05 |
| Related Requirement | REQ-ITN-010 |
Entry Criteria: - Itinerary exists - Cruise port exists - User logged in as Cruise Manager
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select itinerary | Details shown | | 2 | Click "Manage Template" | Template view opens | | 3 | Click "Add Stop" | Template entry dialog opens | | 4 | Enter stop sequence: 1 | Value accepted | | 5 | Enter day offset arrival: 0 | Value accepted | | 6 | Enter day offset departure: 0 | Value accepted | | 7 | Enter arrival time: 08:00 | Time accepted | | 8 | Enter departure time: 23:00 | Time accepted | | 9 | Select port: Dubai | Port selected | | 10 | Enter description: "Embarkation" | Description accepted | | 11 | Click Save | Entry created |
Exit Criteria: - Template entry created - Entry visible in template list
Test Data:
{
"stopSeq": 1,
"dayOffsetArr": 0,
"dayOffsetDep": 0,
"arriveTime": "08:00",
"departTime": "23:00",
"cruisePortId": 1,
"description": "Embarkation"
}
TC-ITN-011: Add Template Entry - Invalid Time Format¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-011 |
| Title | Add Template Entry with Invalid Time |
| Priority | P2 - High |
| Related Use Case | UC-ITN-05 |
| Related Requirement | REQ-DAT-030 |
Entry Criteria: - Itinerary exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open template entry dialog | Dialog opens | | 2 | Enter arrival time: "8am" | - | | 3 | Click Save | Error: "Enter time in HH:mm format" | | 4 | Enter arrival time: "25:00" | - | | 5 | Click Save | Error: "Invalid time value" | | 6 | Enter arrival time: "08:00" | Valid format | | 7 | Complete and Save | Entry created |
Exit Criteria: - Invalid formats rejected - Valid HH:mm format accepted
TC-ITN-012: Add Template Entry - Day Offset Exceeds Duration¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-012 |
| Title | Template Day Offset Validation |
| Priority | P2 - High |
| Related Use Case | UC-ITN-05 |
| Related Requirement | REQ-DAT-029 |
Entry Criteria: - Itinerary exists with duration = 7 nights
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open template entry dialog | Dialog opens | | 2 | Enter day offset arrival: 8 | Value entered | | 3 | Click Save | Error: "Day offset cannot exceed duration" | | 4 | Enter day offset arrival: 7 | Value accepted | | 5 | Complete and Save | Entry created |
Exit Criteria: - Offsets exceeding duration rejected - Valid offsets (0 to duration) accepted
TC-ITN-013: Edit Template Entry¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-013 |
| Title | Edit Existing Template Entry |
| Priority | P2 - High |
| Related Use Case | UC-ITN-05 |
| Related Requirement | REQ-ITN-012 |
Entry Criteria: - Template entry exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View template entries | List displayed | | 2 | Click edit on entry | Dialog with existing data | | 3 | Change port to "Abu Dhabi" | Port updated | | 4 | Change departure time to "18:00" | Time updated | | 5 | Click Save | Entry updated | | 6 | Verify changes | New values displayed |
Exit Criteria: - Template entry updated - Changes persisted
TC-ITN-014: Delete Template Entry¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-014 |
| Title | Delete Template Entry |
| Priority | P2 - High |
| Related Use Case | UC-ITN-05 |
| Related Requirement | REQ-ITN-013 |
Entry Criteria: - Template entry exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View template entries | List displayed | | 2 | Click delete on entry | Confirmation dialog | | 3 | Confirm deletion | Entry deleted | | 4 | Verify entry removed | Not in list |
Exit Criteria: - Template entry deleted - No orphan records
TC-ITN-020: View Itinerary Tree - Hierarchical Display¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-020 |
| Title | View Company-Itinerary Hierarchy |
| Priority | P1 - Critical |
| Related Use Case | UC-ITN-06 |
| Related Requirement | REQ-ITN-002 |
Entry Criteria: - Multiple companies exist - Each company has itineraries
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Navigate to Cruise Management | Tree panel visible | | 2 | Verify companies shown | All companies listed | | 3 | Click company to expand | Itineraries shown below | | 4 | Verify itinerary details | Duration badge visible | | 5 | Click another company | First collapses, second expands |
Exit Criteria: - Hierarchical structure displayed - Expand/collapse works
TC-ITN-021: Filter Inactive Itineraries¶
| Attribute | Value |
|---|---|
| ID | TC-ITN-021 |
| Title | Toggle Inactive Itinerary Filter |
| Priority | P2 - High |
| Related Use Case | UC-ITN-06 |
| Related Requirement | REQ-ITN-006 |
Entry Criteria: - Both active and inactive itineraries exist
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View tree with filter off | Only active itineraries shown | | 2 | Count visible itineraries | N active shown | | 3 | Click filter toggle button | Filter enabled | | 4 | Verify inactive now visible | N + M itineraries shown | | 5 | Verify inactive styling | Muted/italic appearance | | 6 | Toggle filter off | Back to active only |
Exit Criteria: - Filter controls itinerary visibility - Inactive items have distinct styling
6. Cruise Instance Test Cases¶
TC-CRU-001: Create Cruise - Auto-Generate Points¶
| Attribute | Value |
|---|---|
| ID | TC-CRU-001 |
| Title | Create Cruise with Point Generation |
| Priority | P1 - Critical |
| Related Use Case | UC-CRU-01 |
| Related Requirement | REQ-CRU-001, REQ-CRU-010 |
Entry Criteria: - Itinerary exists with 3 template entries - User logged in as Cruise Manager
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select itinerary | Itinerary details shown | | 2 | Click "Add Cruise" | Cruise dialog opens | | 3 | Enter start date: 2025-12-01 | Date accepted | | 4 | Click Save | Cruise created | | 5 | Verify cruise button appears | Button shows "01 Dec" | | 6 | Verify cruise status | "Available" | | 7 | Verify 3 cruise points generated | Points table shows 3 rows | | 8 | Verify point dates calculated | Based on template offsets |
Exit Criteria: - Cruise record created - Cruise points auto-generated from template - Dates correctly calculated
Test Data:
Template:
Entry 1: Day 0, Dubai, 08:00-23:00
Entry 2: Day 1, Abu Dhabi, 08:00-18:00
Entry 3: Day 2, Dubai, 08:00-null
Cruise Start: 2025-12-01
Expected Points:
Point 1: 2025-12-01 08:00 - 2025-12-01 23:00, Dubai
Point 2: 2025-12-02 08:00 - 2025-12-02 18:00, Abu Dhabi
Point 3: 2025-12-03 08:00 - null, Dubai
TC-CRU-002: Create Cruise - No Template¶
| Attribute | Value |
|---|---|
| ID | TC-CRU-002 |
| Title | Create Cruise Without Template |
| Priority | P1 - Critical |
| Related Use Case | UC-CRU-01 |
| Related Requirement | REQ-CRU-015 |
Entry Criteria: - Itinerary exists with NO template entries
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select itinerary without template | Details shown | | 2 | Click "Add Cruise" | Error or warning displayed | | 3 | Verify message | "Cannot create cruise. Define template first." |
Exit Criteria: - Cruise creation prevented - User directed to create template
TC-CRU-003: View Cruise Details¶
| Attribute | Value |
|---|---|
| ID | TC-CRU-003 |
| Title | View Cruise Details and Points |
| Priority | P1 - Critical |
| Related Use Case | UC-CRU-02 |
| Related Requirement | REQ-CRU-014 |
Entry Criteria: - Cruise exists with cruise points
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select itinerary | Cruises shown in bar | | 2 | Click cruise date button | Cruise selected | | 3 | Verify cruise points displayed | Table shows all points | | 4 | Verify point columns | Day, Port, Arrival, Departure, Description | | 5 | Verify chronological order | Points sorted by date |
Exit Criteria: - Cruise details displayed - Points in correct order
TC-CRU-004: Edit Cruise Point¶
| Attribute | Value |
|---|---|
| ID | TC-CRU-004 |
| Title | Edit Cruise Point Details |
| Priority | P2 - High |
| Related Use Case | UC-CRU-03 |
| Related Requirement | REQ-CRU-020 to REQ-CRU-022 |
Entry Criteria: - Cruise exists with cruise points
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View cruise points | Points table displayed | | 2 | Click edit on point | Edit dialog opens | | 3 | Change port to "Muscat" | Port updated | | 4 | Change arrival time to "09:00" | Time updated | | 5 | Click Save | Point updated | | 6 | Verify changes in table | New values shown |
Exit Criteria: - Cruise point updated - Changes reflected in UI
TC-CRU-005: Regenerate Cruise Points¶
| Attribute | Value |
|---|---|
| ID | TC-CRU-005 |
| Title | Regenerate Cruise Points from Template |
| Priority | P3 - Medium |
| Related Use Case | UC-CRU-04 |
| Related Requirement | REQ-CRU-016 |
Entry Criteria: - Cruise exists with modified points - Template has been updated
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View cruise with modified points | Points shown | | 2 | Note current point data | Record for comparison | | 3 | Click "Regenerate Points" | Warning dialog | | 4 | Verify warning message | "Manual changes will be lost" | | 5 | Confirm regeneration | Points regenerated | | 6 | Verify points match template | New data from template |
Exit Criteria: - Existing points deleted - New points generated from template - Manual changes lost
TC-CRU-006: Change Cruise Status - Available to Cancelled¶
| Attribute | Value |
|---|---|
| ID | TC-CRU-006 |
| Title | Cancel Cruise |
| Priority | P1 - Critical |
| Related Use Case | UC-CRU-05 |
| Related Requirement | REQ-CRU-005 |
Entry Criteria: - Cruise exists with status "Available"
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select cruise | Cruise selected | | 2 | Click status change | Options shown | | 3 | Select "Cancelled" | Status changed | | 4 | Verify badge updated | Shows "Cancelled" red badge | | 5 | Verify button indicator | Red dot on cruise button |
Exit Criteria: - Cruise status changed to Cancelled - Visual indicators updated
TC-CRU-007: Change Cruise Status - Available to Sold-Out¶
| Attribute | Value |
|---|---|
| ID | TC-CRU-007 |
| Title | Mark Cruise Sold Out |
| Priority | P1 - Critical |
| Related Use Case | UC-CRU-05 |
| Related Requirement | REQ-CRU-005 |
Entry Criteria: - Cruise exists with status "Available"
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select cruise | Cruise selected | | 2 | Click status change | Options shown | | 3 | Select "Sold-out" | Status changed | | 4 | Verify badge updated | Shows "Sold-out" gray badge |
Exit Criteria: - Status changed to Sold-out - Visual indicators updated
TC-CRU-008: Delete Cruise - Cascade Delete¶
| Attribute | Value |
|---|---|
| ID | TC-CRU-008 |
| Title | Delete Cruise with Cascade |
| Priority | P1 - Critical |
| Related Use Case | UC-CRU-06 |
| Related Requirement | REQ-CRU-004 |
Entry Criteria: - Cruise exists with points, cabin charges, other charges
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select cruise | Cruise selected | | 2 | Click Delete | Confirmation dialog | | 3 | Verify message lists related data | "Will delete X points, Y charges" | | 4 | Confirm deletion | Cascade delete executed | | 5 | Verify cruise removed | Not in selection bar | | 6 | Verify points deleted | No orphan points | | 7 | Verify charges deleted | No orphan charges |
Exit Criteria: - Cruise and all related data deleted - No orphan records
TC-CRU-010: Create Multiple Cruises for Itinerary¶
| Attribute | Value |
|---|---|
| ID | TC-CRU-010 |
| Title | Create Multiple Cruises |
| Priority | P2 - High |
| Related Use Case | UC-CRU-01 |
| Related Requirement | REQ-CRU-002 |
Entry Criteria: - Itinerary exists with template
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Create cruise for 2025-12-01 | Cruise created | | 2 | Create cruise for 2025-12-08 | Cruise created | | 3 | Create cruise for 2025-12-15 | Cruise created | | 4 | Verify selection bar | 3 cruise buttons shown | | 5 | Verify order | Sorted by date ascending |
Exit Criteria: - Multiple cruises created - Displayed in date order
7. Pricing Management Test Cases¶
TC-PRC-001: Configure Cabin Charge - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-001 |
| Title | Set Cabin Charge with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-PRC-01 |
| Related Requirement | REQ-PRC-001, REQ-PRC-002 |
Entry Criteria: - Cruise exists - Ship has cabin types assigned
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select cruise | Cruise selected | | 2 | Click "Configure Pricing" | Pricing page opens | | 3 | Verify cabin types listed | All ship cabins shown | | 4 | Enter amount: 500.00 | Value accepted | | 5 | Select currency: USD | Currency selected | | 6 | Enter exchange rate: 1.00 | Rate accepted | | 7 | Click Save | Charge saved | | 8 | Verify database record | cabincharge record exists |
Exit Criteria: - Cabin charge record created - Values correctly persisted
Test Data:
{
"cruiseId": 1,
"shipCabinId": 1,
"amount": 500.00,
"currency": "USD",
"exrate": 1.00,
"available": true
}
TC-PRC-002: Configure Cabin Charge - Invalid Amount¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-002 |
| Title | Set Cabin Charge with Invalid Amount |
| Priority | P2 - High |
| Related Use Case | UC-PRC-01 |
| Related Requirement | REQ-DAT-024 |
Entry Criteria: - Cruise exists on pricing page
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Enter amount: -100 | Value entered | | 2 | Click Save | Error: "Amount must be positive" | | 3 | Enter amount: 0 | Value entered | | 4 | Click Save | Error or accepted (based on requirement) | | 5 | Enter amount: 500.00 | Valid value | | 6 | Click Save | Charge saved |
Exit Criteria: - Negative amounts rejected - Valid amounts accepted
TC-PRC-003: Configure Cabin Charge - Invalid Currency¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-003 |
| Title | Set Cabin Charge with Invalid Currency |
| Priority | P2 - High |
| Related Use Case | UC-PRC-01 |
| Related Requirement | REQ-DAT-023 |
Entry Criteria: - Cruise exists on pricing page
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Enter currency: "US" (2 chars) | - | | 2 | Click Save | Error: "Currency must be 3 characters" | | 3 | Enter currency: "USDD" (4 chars) | - | | 4 | Click Save | Error: "Currency must be 3 characters" | | 5 | Enter currency: "USD" | Valid value | | 6 | Click Save | Charge saved |
Exit Criteria: - Invalid currency codes rejected - Valid 3-char codes accepted
TC-PRC-004: Set Cabin Availability - Mark Sold Out¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-004 |
| Title | Mark Cabin as Sold Out |
| Priority | P1 - Critical |
| Related Use Case | UC-PRC-02 |
| Related Requirement | REQ-PRC-003 |
Entry Criteria: - Cabin charge exists with available=true
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View pricing page | Cabin shows available | | 2 | Toggle availability switch off | Switch changes state | | 3 | Verify visual update | Row styling indicates sold-out | | 4 | Verify database | available=false |
Exit Criteria: - Cabin availability changed - Visual feedback immediate
TC-PRC-005: Set Cabin Availability - Mark Available¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-005 |
| Title | Mark Cabin as Available |
| Priority | P2 - High |
| Related Use Case | UC-PRC-02 |
| Related Requirement | REQ-PRC-003 |
Entry Criteria: - Cabin charge exists with available=false
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View pricing page | Cabin shows sold-out | | 2 | Toggle availability switch on | Switch changes state | | 3 | Verify visual update | Row styling indicates available | | 4 | Verify database | available=true |
Exit Criteria: - Cabin availability restored - Visual feedback updated
TC-PRC-010: Add Other Charge - Valid Data¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-010 |
| Title | Add Other Charge with Valid Data |
| Priority | P1 - Critical |
| Related Use Case | UC-PRC-03 |
| Related Requirement | REQ-PRC-020, REQ-PRC-021 |
Entry Criteria: - Cruise exists - Charge type exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View pricing page | Other charges section visible | | 2 | Click "Add Charge" | Dialog opens | | 3 | Select charge type: "Port Taxes" | Type selected | | 4 | Enter amount: 75.00 | Value accepted | | 5 | Select currency: USD | Currency selected | | 6 | Enter exchange rate: 1.00 | Rate accepted | | 7 | Check "Mandatory" | Checkbox checked | | 8 | Click Save | Charge added | | 9 | Verify in table | Shows with mandatory indicator |
Exit Criteria: - Other charge created - Mandatory flag set correctly
TC-PRC-011: Add Other Charge - Duplicate Type¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-011 |
| Title | Add Duplicate Charge Type |
| Priority | P1 - Critical |
| Related Use Case | UC-PRC-03 |
| Related Requirement | REQ-PRC-026 |
Entry Criteria: - Other charge of type "Port Taxes" already exists for cruise
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add Charge" | Dialog opens | | 2 | Select charge type: "Port Taxes" | Type selected | | 3 | Enter amount and currency | Values entered | | 4 | Click Save | Error: "Charge type already added" |
Exit Criteria: - Duplicate prevented - Error message displayed
TC-PRC-012: Edit Other Charge¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-012 |
| Title | Edit Existing Other Charge |
| Priority | P2 - High |
| Related Use Case | UC-PRC-04 |
| Related Requirement | REQ-PRC-023 |
Entry Criteria: - Other charge exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View other charges | Charges listed | | 2 | Click edit on charge | Dialog with existing data | | 3 | Change amount from 75.00 to 85.00 | Value updated | | 4 | Uncheck "Mandatory" | Flag changed | | 5 | Click Save | Charge updated | | 6 | Verify changes | New values displayed |
Exit Criteria: - Other charge updated - Changes persisted
TC-PRC-013: Delete Other Charge¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-013 |
| Title | Remove Other Charge |
| Priority | P2 - High |
| Related Use Case | UC-PRC-05 |
| Related Requirement | REQ-PRC-024 |
Entry Criteria: - Other charge exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View other charges | Charges listed | | 2 | Click delete on charge | Confirmation dialog | | 3 | Confirm deletion | Charge removed | | 4 | Verify removed from table | Not displayed | | 5 | Verify database | Record deleted |
Exit Criteria: - Other charge deleted - Removed from UI
TC-PRC-020: Initialize Pricing for Cruise¶
| Attribute | Value |
|---|---|
| ID | TC-PRC-020 |
| Title | Initialize Cabin Charges for New Cruise |
| Priority | P2 - High |
| Related Use Case | UC-PRC-06 |
| Related Requirement | REQ-PRC-007 |
Entry Criteria: - Cruise exists with no cabin charges - Ship has 3 cabin types assigned
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Navigate to pricing page | Page opens | | 2 | Verify no charges exist | Empty or prompt shown | | 3 | Click "Initialize Pricing" | Charges created | | 4 | Verify 3 cabin charge rows | One per ship cabin | | 5 | Verify default values | Amount=0, available=true |
Exit Criteria: - Cabin charges initialized for all ship cabins - Default values set
8. Search and Booking Test Cases¶
TC-BKG-001: Search Cruises by Area¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-001 |
| Title | Search Cruises by Area |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-01 |
| Related Requirement | REQ-SRC-001 |
Entry Criteria: - Cruises exist in "Caribbean" area - API server running
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/searchCruises | - |
| 2 | Include {"session":"", "areaId": 1} | Request sent |
| 3 | Verify response status | 200 OK |
| 4 | Verify data contains cruises | Array returned |
| 5 | Verify all cruises in area | areaId matches filter |
Exit Criteria: - Search returns correct results - Only cruises in specified area
Expected Request:
TC-BKG-002: Search Cruises by Date Range¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-002 |
| Title | Search Cruises by Date Range |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-01 |
| Related Requirement | REQ-SRC-002 |
Entry Criteria: - Cruises exist with various start dates
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | POST to search with date range | Request sent | | 2 | Set dateRangeStart: "2025-12-01" | - | | 3 | Set dateRangeEnd: "2025-12-31" | - | | 4 | Verify response | Cruises in range returned | | 5 | Verify no cruises outside range | Dates within bounds |
Exit Criteria: - Only cruises within date range returned
Expected Request:
TC-BKG-003: Search Cruises - Multiple Filters¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-003 |
| Title | Search with Multiple Filter Criteria |
| Priority | P2 - High |
| Type | API Test |
| Related Use Case | UC-BKG-01 |
| Related Requirement | REQ-SRC-001 to REQ-SRC-008 |
Entry Criteria: - Various cruises exist with different attributes
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Search with area + date range + status | Request sent | | 2 | Set areaId: 1 | - | | 3 | Set dateRangeStart/End | - | | 4 | Set status: "available" | - | | 5 | Verify results match ALL criteria | Intersection of filters |
Exit Criteria: - All filter criteria applied - Results satisfy all conditions
TC-BKG-004: Search Cruises - No Results¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-004 |
| Title | Search with No Matching Results |
| Priority | P2 - High |
| Type | API Test |
| Related Use Case | UC-BKG-01 |
Entry Criteria: - No cruises match search criteria
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Search with impossible criteria | Request sent | | 2 | Set dateRangeStart: "2099-01-01" | - | | 3 | Verify response | Empty array returned | | 4 | Verify status is OK | Not an error |
Exit Criteria: - Empty array returned - No error thrown
TC-BKG-010: View Cruise Availability¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-010 |
| Title | View Cruise Availability and Pricing |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-02 |
| Related Requirement | REQ-SRC-023, REQ-SRC-024 |
Entry Criteria: - Cruise exists with pricing configured
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/booking/getAvailability | - |
| 2 | Include cruiseId | Request sent |
| 3 | Verify response contains cabin availability | Cabins listed |
| 4 | Verify each cabin has price, currency, available flag | All fields present |
| 5 | Verify mandatory charges included | Charges listed |
| 6 | Verify optional charges included | Separate list |
Exit Criteria: - Complete availability data returned - Cabins and charges included
TC-BKG-011: View Cruise Availability - Sold Out Cabins¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-011 |
| Title | View Availability with Sold Out Cabins |
| Priority | P2 - High |
| Type | API Test |
| Related Use Case | UC-BKG-02 |
Entry Criteria: - Cruise has some cabins marked sold-out
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Request availability | Response received | | 2 | Verify sold-out cabins included | Listed with available=false | | 3 | Verify available cabins | Listed with available=true |
Exit Criteria: - Both available and sold-out cabins returned - Availability flag correct
TC-BKG-020: Get Itineraries by Area¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-020 |
| Title | Get Itineraries for Booking by Area |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-03 |
| Related Requirement | REQ-SRC-020 |
Entry Criteria: - Itineraries exist in area with future cruises
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/booking/getItineraries | - |
| 2 | Include areaId | Request sent |
| 3 | Verify itineraries returned | Array of itineraries |
| 4 | Verify includes lowest price | Price field populated |
| 5 | Verify only active itineraries | No inactive included |
Exit Criteria: - Active itineraries for area returned - Lowest price calculated
TC-BKG-030: Calculate Cruise Price¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-030 |
| Title | Calculate Total Cruise Price |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-04 |
| Related Requirement | REQ-SRC-026 |
Entry Criteria: - Cruise with cabin charges and other charges configured
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/booking/calculatePrice | - |
| 2 | Include cruiseId, shipCabinId | - |
| 3 | Include adults: 2, children: 1 | - |
| 4 | Include optional charge IDs | - |
| 5 | Verify response contains breakdown | Price components listed |
| 6 | Verify cabin charge | Base cabin price |
| 7 | Verify mandatory charges × pax | Per-person calculation |
| 8 | Verify optional charges × pax | Selected optionals only |
| 9 | Verify total | Sum of all components |
Exit Criteria: - Price calculation correct - All components included
Test Data:
{
"session": "",
"cruiseId": 1,
"shipCabinId": 1,
"adults": 2,
"children": 1,
"optionalChargeIds": [3, 4]
}
Expected Calculation:
Cabin Charge: $500.00
Port Taxes (mandatory): $75.00 × 3 pax = $225.00
Gratuities (optional): $50.00 × 3 pax = $150.00
Beverage Package (optional): $100.00 × 3 pax = $300.00
-----------------------------------------
Total: $1,175.00
TC-BKG-031: Calculate Price - Cabin Not Available¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-031 |
| Title | Calculate Price for Sold Out Cabin |
| Priority | P2 - High |
| Type | API Test |
| Related Use Case | UC-BKG-04 |
Entry Criteria: - Cabin is marked as sold-out
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Request price calculation | - | | 2 | Specify sold-out cabin ID | - | | 3 | Verify error response | Error returned | | 4 | Verify error message | "Selected cabin is not available" |
Exit Criteria: - Error returned for unavailable cabin - Clear error message
TC-BKG-040: View Cruise Route¶
| Attribute | Value |
|---|---|
| ID | TC-BKG-040 |
| Title | View Cruise Route Details |
| Priority | P2 - High |
| Type | API Test |
| Related Use Case | UC-BKG-05 |
Entry Criteria: - Cruise exists with cruise points
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Request cruise with points | - | | 2 | Set withPoints: true | - | | 3 | Verify points array | Points included | | 4 | Verify point details | Port, dates, times, description | | 5 | Verify chronological order | Sorted by date/time |
Exit Criteria: - Route details returned - Points in correct order
8.5 Pre-Booking Management Test Cases¶
TC-PRE-001: Create Pre-Bookings via managePrebookings¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-001 |
| Title | Create Pre-Bookings via managePrebookings |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-PRE-01 |
| Related Requirement | REQ-PRE-001, REQ-PRE-003 |
Entry Criteria: - Active sailing exists with cabin types configured - No pre-bookings exist for the cabin type
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/prebooking/manage | - |
| 2 | Include cruiseId, shipCabinId, targetCount=5, costPerCabin=500, pricePerCabin=800, commission=15 | Request sent |
| 3 | Verify response status | 200 OK |
| 4 | Verify 5 pre-booking records returned | Array of 5 CCabinPreBooking objects |
| 5 | Verify each record has status "Available" | All statuses = "Available" |
| 6 | Verify cost/price/commission values | Match input values |
Exit Criteria: - 5 Available pre-booking records created - All with correct financial values
TC-PRE-002: Increase Pre-Booking Count¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-002 |
| Title | Increase Pre-Booking Count |
| Priority | P2 - High |
| Type | API Test |
| Related Requirement | REQ-PRE-003 |
Entry Criteria: - 5 Available pre-bookings exist (from TC-PRE-001)
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call managePrebookings with targetCount=8 | Request sent | | 2 | Verify response has 8 records | 8 CCabinPreBooking objects returned | | 3 | Verify 3 new records added | 3 new records with status "Available" | | 4 | Verify original 5 records unchanged | Original IDs preserved |
Exit Criteria: - Total 8 Available pre-bookings exist
TC-PRE-003: Reduce Pre-Booking Count¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-003 |
| Title | Reduce Pre-Booking Count (Available Only) |
| Priority | P2 - High |
| Type | API Test |
| Related Requirement | REQ-PRE-003 |
Entry Criteria: - 8 Available pre-bookings exist (from TC-PRE-002)
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call managePrebookings with targetCount=3 | Request sent | | 2 | Verify response has 3 records | 3 CCabinPreBooking objects returned | | 3 | Verify 5 Available records deleted | Only 3 remain | | 4 | Verify remaining records have status "Available" | All statuses = "Available" |
Exit Criteria: - Total 3 Available pre-bookings remain
TC-PRE-004: Cannot Reduce Below Booked/Reserved Count¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-004 |
| Title | Cannot Reduce Below Non-Available Count |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-PRE-004 |
Entry Criteria: - 5 pre-bookings exist: 3 Available, 1 Reserved, 1 Booked
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call managePrebookings with targetCount=1 | Request sent | | 2 | Verify error response | Error returned | | 3 | Verify error message contains minimum count | "Cannot reduce below 2 non-available pre-bookings" | | 4 | Verify no records deleted | All 5 records still exist |
Exit Criteria: - Error returned for invalid reduction - No data modified
TC-PRE-005: Apply Price to All Pre-Bookings¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-005 |
| Title | Apply Updated Price to All Existing Pre-Bookings |
| Priority | P2 - High |
| Type | API Test |
| Related Requirement | REQ-PRE-005 |
Entry Criteria: - Multiple pre-bookings exist with varying prices
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call managePrebookings with targetCount=(same), costPerCabin=600, pricePerCabin=900, commission=20, applyToAll=true | Request sent | | 2 | Verify all records returned | All pre-bookings returned | | 3 | Verify cost updated on all | costPerCabin=600 on all | | 4 | Verify price updated on all | pricePerCabin=900 on all | | 5 | Verify commission updated on all | commission=20 on all |
Exit Criteria: - All pre-bookings have updated financial values
TC-PRE-006: Pre-Booking Status Lifecycle¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-006 |
| Title | Pre-Booking Status Lifecycle |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-PRE-006 |
Entry Criteria: - Available pre-booking exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Verify initial status | Status = "Available" | | 2 | Create booking that assigns this pre-booking | Pre-booking status changes to "Reserved" | | 3 | Verify pre-booking status via list | Status = "Reserved" | | 4 | Complete booking (status to Vouchered) | Pre-booking status changes to "Booked" |
Exit Criteria: - Pre-booking transitions: Available → Reserved → Booked
TC-PRE-007: List Pre-Bookings by Cruise and Cabin Type¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-007 |
| Title | List Pre-Bookings Filtered by Cruise and Cabin |
| Priority | P2 - High |
| Type | API Test |
Entry Criteria: - Pre-bookings exist for multiple cabin types on a cruise
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/prebooking/list with cruiseId and shipCabinId | Request sent |
| 2 | Verify response contains only matching records | Filtered results |
| 3 | Verify all returned records match cruiseId | All cruiseId values match |
| 4 | Verify all returned records match shipCabinId | All shipCabinId values match |
Exit Criteria: - Correctly filtered list returned
TC-PRE-008: Delete Individual Pre-Booking¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-008 |
| Title | Delete Individual Pre-Booking Record |
| Priority | P2 - High |
| Type | API Test |
Entry Criteria: - Available pre-booking exists
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/prebooking/delete with preBookingId | Request sent |
| 2 | Verify success response | 200 OK |
| 3 | Verify record no longer in list | Not found in subsequent list |
Exit Criteria: - Pre-booking record deleted
TC-PRE-009: Quick Add Pre-Booking via UI¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-009 |
| Title | Quick Add Pre-Booking via + Button |
| Priority | P3 - Medium |
| Type | UI Test |
| Related Use Case | UC-PRE-02 |
Entry Criteria: - Agent booking page loaded with sailing selected - Cabin availability table visible
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Note current Prebk count for a cabin type | Count noted (e.g., 3) | | 2 | Click "+" button next to prebook count | Button click registered | | 3 | Verify Prebk column increments | Count = 4 | | 4 | Verify Avail column increments | Available count updates |
Exit Criteria: - One new Available pre-booking created - Display updated immediately
TC-PRE-010: Pre-Booking Column Display¶
| Attribute | Value |
|---|---|
| ID | TC-PRE-010 |
| Title | Pre-Booking Columns in Cabin Charges Table |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Sailing selected with cabin charges and some pre-bookings
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View cabin charges table on itinerary page | Table visible | | 2 | Verify Prebk column shows total pre-bookings per cabin type | Count matches database | | 3 | Verify Avail column shows (prebk - booked/reserved) | Avail = Prebk - non-Available | | 4 | Verify Avail minimum is 0 | No negative values |
Exit Criteria: - Prebk and Avail columns display correctly
8.6 Booking Management Test Cases¶
TC-BKM-001: Create New Booking with Generated Number¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-001 |
| Title | Create New Booking with System-Generated Number |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-06 |
| Related Requirement | REQ-BKG-001 |
Entry Criteria: - Active sailing exists - Cabin types with pricing configured
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/booking/write with cruiseId, leadPassengerName, totalAdults=2, totalChildren=0, totalInfants=0 | Request sent |
| 2 | Verify response status | 200 OK |
| 3 | Verify bookingNumber format | Matches PT-DDMM-XXXXXXXX pattern |
| 4 | Verify initial status | status = "Documents pending" |
| 5 | Verify totalPax = totalAdults + totalChildren + totalInfants | totalPax = 2 |
Exit Criteria: - Booking created with valid number and initial status
TC-BKM-002: Create Booking with Lead Passenger¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-002 |
| Title | Create Booking with Lead Passenger Auto-Creation |
| Priority | P1 - Critical |
| Type | Integration Test |
| Related Use Case | UC-BKG-06 |
Entry Criteria: - Active sailing exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Create booking via agent booking page new booking dialog | Dialog opens | | 2 | Enter adults=2, children=1, cabin type, lead passenger name, nationality | Fields filled | | 3 | Click Create | Booking created | | 4 | List passengers for new booking | One passenger returned | | 5 | Verify lead passenger has isLeadPassenger=true | Lead flag set | | 6 | Verify booking leadPassengerName matches | Name matches |
Exit Criteria: - Booking and lead passenger created together
TC-BKM-003: Booking Status - Documents to Availability¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-003 |
| Title | Status Transition: Documents pending → Availability pending |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-10 |
| Related Requirement | REQ-BKG-003 |
Entry Criteria: - Booking exists with status "Documents pending"
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/booking/changeStatus with bookingId and newStatus="Availability pending" | Request sent |
| 2 | Verify response status | 200 OK |
| 3 | Verify booking status updated | status = "Availability pending" |
Exit Criteria: - Status successfully transitioned
TC-BKM-004: Booking Status - Availability to Payment¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-004 |
| Title | Status Transition: Availability pending → Payment pending |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-BKG-003 |
Entry Criteria: - Booking with status "Availability pending"
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call changeStatus with newStatus="Payment pending" | Request sent | | 2 | Verify status updated | status = "Payment pending" |
Exit Criteria: - Status transitioned to Payment pending
TC-BKM-005: Booking Status - Payment to Voucher¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-005 |
| Title | Status Transition: Payment pending → Voucher pending |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-BKG-003 |
Entry Criteria: - Booking with status "Payment pending"
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call changeStatus with newStatus="Voucher pending" | Request sent | | 2 | Verify status updated | status = "Voucher pending" |
Exit Criteria: - Status transitioned to Voucher pending
TC-BKM-006: Booking Status - Voucher to Vouchered¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-006 |
| Title | Status Transition: Voucher pending → Vouchered |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-BKG-003 |
Entry Criteria: - Booking with status "Voucher pending"
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call changeStatus with newStatus="Vouchered" | Request sent | | 2 | Verify status updated | status = "Vouchered" |
Exit Criteria: - Booking fully vouchered
TC-BKM-007: Booking Cancellation - NonRefundable¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-007 |
| Title | Cancellation: Documents pending → Cancelled-NonRefundable |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-BKG-004 |
Entry Criteria: - Booking with status "Documents pending"
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call changeStatus with newStatus="Cancelled-NonRefundable" | Request sent | | 2 | Verify status updated | status = "Cancelled-NonRefundable" |
Exit Criteria: - Booking cancelled as non-refundable
TC-BKM-008: Booking Cancellation - RefundPending¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-008 |
| Title | Cancellation: Payment pending → Cancelled-RefundPending |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-BKG-004 |
Entry Criteria: - Booking with status "Payment pending"
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call changeStatus with newStatus="Cancelled-RefundPending" | Request sent | | 2 | Verify status updated | status = "Cancelled-RefundPending" |
Exit Criteria: - Booking cancelled with refund pending
TC-BKM-009: Refund Completion¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-009 |
| Title | Refund: Cancelled-RefundPending → Cancelled-Refunded |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-BKG-004 |
Entry Criteria: - Booking with status "Cancelled-RefundPending"
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call changeStatus with newStatus="Cancelled-Refunded" | Request sent | | 2 | Verify status updated | status = "Cancelled-Refunded" |
Exit Criteria: - Booking fully refunded
TC-BKM-010: Invalid Status Transition Rejection¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-010 |
| Title | Invalid Status Transition Rejected |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-BKG-003 |
Entry Criteria: - Booking with status "Documents pending"
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Call changeStatus with newStatus="Vouchered" | Request sent | | 2 | Verify error response | Error code CRU0028 | | 3 | Verify booking status unchanged | Still "Documents pending" |
Exit Criteria: - Invalid transition rejected with error
TC-BKM-011: Add Passenger to Booking¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-011 |
| Title | Add Passenger to Existing Booking |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-07 |
| Related Requirement | REQ-BKG-010 |
Entry Criteria: - Booking exists with lead passenger
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/passenger/write with bookingId, firstName, lastName, nationality, dateOfBirth, passportNumber, passportExpiry | Request sent |
| 2 | Verify response | CCruisePassenger object returned |
| 3 | Verify passengerId assigned | Non-null ID |
| 4 | Verify isLeadPassenger=false | Not lead passenger |
| 5 | List passengers for booking | 2 passengers returned |
Exit Criteria: - Passenger added to booking
TC-BKM-012: Edit Passenger Details¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-012 |
| Title | Edit Passenger Details |
| Priority | P2 - High |
| Type | API Test |
Entry Criteria: - Passenger exists on booking
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/passenger/write with existing passengerId and updated fields | Request sent |
| 2 | Verify updated fields saved | Modified values persisted |
| 3 | Read passenger | Updated values returned |
Exit Criteria: - Passenger details updated
TC-BKM-013: Delete Passenger¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-013 |
| Title | Delete Passenger from Booking |
| Priority | P2 - High |
| Type | API Test |
Entry Criteria: - Non-lead passenger exists on booking
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/passenger/delete with passengerId | Request sent |
| 2 | Verify success response | 200 OK |
| 3 | List passengers for booking | Deleted passenger not in list |
Exit Criteria: - Passenger removed from booking
TC-BKM-014: Age Category Computation¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-014 |
| Title | Age Category Computation from DOB |
| Priority | P2 - High |
| Type | UI Test |
| Related Requirement | REQ-BKG-011 |
Entry Criteria: - Booking exists on a sailing starting 2025-12-01
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Add passenger with DOB=2005-06-15 (age 20) | Passenger saved | | 2 | Verify age badge shows "Adult" | Adult badge (age >= 12) | | 3 | Add passenger with DOB=2018-03-20 (age 7) | Passenger saved | | 4 | Verify age badge shows "Child" | Child badge (age 2-11) | | 5 | Add passenger with DOB=2024-06-01 (age 1) | Passenger saved | | 6 | Verify age badge shows "Infant" | Infant badge (age < 2) |
Exit Criteria: - Correct age categories computed and displayed
TC-BKM-015: Visa Requirement Check¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-015 |
| Title | Visa Requirement Check Against Destination Ports |
| Priority | P2 - High |
| Type | Integration Test |
| Related Requirement | REQ-BKG-013 |
Entry Criteria: - Booking on sailing with known cruise ports - Passenger with nationality that requires visa for some ports
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Add passenger with nationality requiring visa | Passenger saved | | 2 | Verify visa badges appear | Badge for each destination port | | 3 | Verify badge shows requirement type | "visa required", "visa free", or "visa on arrival" |
Exit Criteria: - Visa requirements checked and displayed for all destination ports
TC-BKM-016: Add Booked Cabin with Pre-Booking Priority¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-016 |
| Title | Add Cabin with Pre-Booking Priority (Own Cabin) |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-08 |
| Related Requirement | REQ-BKG-021 |
Entry Criteria: - Booking exists - Available pre-bookings exist for the cabin type
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/bookedcabin/write with bookingId, shipCabinId, numPax=2, price=800 | Request sent |
| 2 | Verify isOwn=true in response | Cabin marked as own |
| 3 | Verify preBookingId is set | References the pre-booking |
| 4 | Verify pre-booking status changed | Pre-booking now "Reserved" |
Exit Criteria: - Cabin assigned as own with pre-booking reference
TC-BKM-017: Add Booked Cabin Without Pre-Booking¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-017 |
| Title | Add Cabin Without Pre-Booking (Non-Own) |
| Priority | P1 - Critical |
| Type | API Test |
| Related Requirement | REQ-BKG-022 |
Entry Criteria: - Booking exists - No Available pre-bookings for the cabin type
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/bookedcabin/write with bookingId, shipCabinId, numPax=2, price=800 | Request sent |
| 2 | Verify isOwn=false in response | Cabin marked as non-own |
| 3 | Verify preBookingId is null | No pre-booking reference |
Exit Criteria: - Cabin assigned as non-own
TC-BKM-018: Delete Booked Cabin¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-018 |
| Title | Delete Booked Cabin from Booking |
| Priority | P2 - High |
| Type | API Test |
Entry Criteria: - Booked cabin exists on booking
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/bookedcabin/delete with bookedCabinId | Request sent |
| 2 | Verify success response | 200 OK |
| 3 | List booked cabins for booking | Deleted cabin not in list |
Exit Criteria: - Booked cabin removed
TC-BKM-019: Own/Non-Own Badge Display¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-019 |
| Title | Own/Non-Own Cabin Badge Display |
| Priority | P3 - Medium |
| Type | UI Test |
| Related Requirement | REQ-BKG-023 |
Entry Criteria: - Booking has both own and non-own cabins
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View booked cabins table in agent booking page | Table visible | | 2 | Verify own cabin shows green "Own" badge | Badge displayed | | 3 | Verify non-own cabin shows no "Own" badge or shows "No" | Distinction visible |
Exit Criteria: - Own/non-own status clearly visible
TC-BKM-020: Add Booking Add-On¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-020 |
| Title | Add Booking Add-On |
| Priority | P2 - High |
| Type | API Test |
| Related Use Case | UC-BKG-09 |
| Related Requirement | REQ-BKG-030 |
Entry Criteria: - Booking exists - Sailing has non-mandatory other charges
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/addon/write with bookingId, chargeTypeId, amount, currency | Request sent |
| 2 | Verify response | CBookingAddon object returned |
| 3 | Verify addonId assigned | Non-null ID |
| 4 | List add-ons for booking | New add-on in list |
Exit Criteria: - Add-on attached to booking
TC-BKM-021: Add-On Linked to Specific Passenger¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-021 |
| Title | Add-On Linked to Specific Passenger |
| Priority | P2 - High |
| Type | API Test |
| Related Requirement | REQ-BKG-030 |
Entry Criteria: - Booking with passengers exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | POST addon/write with bookingId, passengerId, chargeTypeId, amount, currency | Request sent | | 2 | Verify passengerId in response | Matches input passengerId | | 3 | List add-ons | Add-on shows passenger association |
Exit Criteria: - Add-on linked to specific passenger
TC-BKM-022: Add-On Amount Pre-Fill¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-022 |
| Title | Add-On Amount Pre-Fill from Sailing Other Charge |
| Priority | P3 - Medium |
| Type | UI Test |
| Related Requirement | REQ-BKG-032 |
Entry Criteria: - Agent booking page with booking selected - Sailing has other charges with known amounts
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add Add-on" button | Dialog opens | | 2 | Select a charge type from dropdown | Charge type selected | | 3 | Verify amount field auto-filled | Amount matches sailing's other charge amount | | 4 | Verify currency field auto-filled | Currency matches |
Exit Criteria: - Amount and currency pre-filled from sailing configuration
TC-BKM-023: Delete Add-On¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-023 |
| Title | Delete Booking Add-On |
| Priority | P2 - High |
| Type | API Test |
Entry Criteria: - Add-on exists on booking
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/addon/delete with addonId | Request sent |
| 2 | Verify success response | 200 OK |
| 3 | List add-ons for booking | Deleted add-on not in list |
Exit Criteria: - Add-on removed from booking
TC-BKM-024: Booking Total Auto-Recalculation¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-024 |
| Title | Booking Total Auto-Recalculation |
| Priority | P1 - Critical |
| Type | Integration Test |
| Related Requirement | REQ-BKG-005 |
Entry Criteria: - Booking with cabins (prices: 800, 600) and add-ons (amounts: 50, 75)
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Read booking details | totalAmount = 1525 (800+600+50+75) | | 2 | Add another cabin with price 500 | Cabin added | | 3 | Read booking details | totalAmount = 2025 | | 4 | Delete an add-on (amount 50) | Add-on removed | | 5 | Read booking details | totalAmount = 1975 |
Exit Criteria: - Total automatically reflects all cabins + add-ons
TC-BKM-025: Delete Booking with Cascading Cleanup¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-025 |
| Title | Delete Booking with Cascading Sub-Entity Deletion |
| Priority | P1 - Critical |
| Type | API Test |
| Related Use Case | UC-BKG-11 |
| Related Requirement | REQ-BKG-006 |
Entry Criteria: - Booking with passengers, cabins, and add-ons
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | Note bookingId, passenger IDs, cabin IDs, addon IDs | IDs recorded |
| 2 | POST to /tlinq-api/cruise/booking/delete with bookingId | Request sent |
| 3 | Verify success response | 200 OK |
| 4 | List passengers for bookingId | Empty array |
| 5 | List booked cabins for bookingId | Empty array |
| 6 | List add-ons for bookingId | Empty array |
Exit Criteria: - Booking and all sub-entities deleted
TC-BKM-026: List Bookings for Sailing¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-026 |
| Title | List Bookings for a Sailing |
| Priority | P2 - High |
| Type | API Test |
Entry Criteria: - Multiple bookings exist for a sailing
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/booking/list with cruiseId | Request sent |
| 2 | Verify response contains all bookings for the sailing | Array of CCruiseBooking objects |
| 3 | Verify each booking has cruiseId matching filter | All cruiseId values match |
Exit Criteria: - All bookings for the sailing returned
TC-BKM-027: Read Single Booking with Details¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-027 |
| Title | Read Single Booking |
| Priority | P2 - High |
| Type | API Test |
Entry Criteria: - Booking exists with known data
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | POST to /tlinq-api/cruise/booking/read with bookingId | Request sent |
| 2 | Verify response is CCruiseBooking object | Complete object returned |
| 3 | Verify all fields populated | bookingNumber, cruiseId, leadPassengerName, totalPax, totalAmount, status |
Exit Criteria: - Complete booking data returned
TC-BKM-028: Booking Number Uniqueness¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-028 |
| Title | Booking Number Uniqueness |
| Priority | P2 - High |
| Type | API Test |
Entry Criteria: - System operational
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Create 10 bookings in rapid succession | All created | | 2 | Collect all booking numbers | 10 numbers | | 3 | Verify all booking numbers are unique | No duplicates | | 4 | Verify all match PT-DDMM-XXXXXXXX format | Pattern matches |
Exit Criteria: - All booking numbers unique and correctly formatted
TC-BKM-029: Nationality Autocomplete¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-029 |
| Title | Nationality Autocomplete from Country API |
| Priority | P3 - Medium |
| Type | UI Test |
| Related Requirement | REQ-BKG-012 |
Entry Criteria: - Agent booking page with passenger dialog open
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Type "United" in nationality field | Autocomplete dropdown appears | | 2 | Verify suggestions include "United States", "United Kingdom", "United Arab Emirates" | Multiple matches shown | | 3 | Select "United Arab Emirates" | Field populated with country name | | 4 | Verify hidden alpha2 field set to "AE" | ISO code stored |
Exit Criteria: - Country autocomplete works with correct ISO codes
TC-BKM-030: Cabin Capacity Validation (maxPax)¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-030 |
| Title | Cabin numPax Cannot Exceed maxPax |
| Priority | P1 - Critical |
| Type | API + UI Test |
| Related Requirement | REQ-BKG-024 |
Entry Criteria: - Booking exists with a sailing that has cabin types with maxPax defined
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | Open add cabin dialog, select a cabin type with maxPax=4 | NumPax input max attribute set to 4 |
| 2 | Try to set numPax to 5 via the input | Input enforces max=4 on client side |
| 3 | Attempt API call: POST /tlinq-api/cruise/bookedcabin/write with numPax=5 | Server returns error CRU0207 |
| 4 | Set numPax to 4 and save | Cabin created successfully |
Exit Criteria: - Both client-side and server-side validation prevent numPax > maxPax - Error CRU0207 returned from backend when exceeded
TC-BKM-031: Passenger Capacity Warning¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-031 |
| Title | Red Warning When Total Passengers Exceed Cabin Capacity |
| Priority | P2 - High |
| Type | UI Test |
| Related Requirement | REQ-BKG-025 |
Entry Criteria: - Booking with 2 cabins (maxPax=2 each, total capacity=4)
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Add 4 passengers to the booking | No warning shown (4 <= 4) | | 2 | Add a 5th passenger | Red capacity warning alert appears below passengers section | | 3 | Delete one passenger (back to 4) | Warning disappears |
Exit Criteria: - Red warning dynamically shown/hidden based on passenger count vs. total cabin capacity
TC-BKM-032: Adult-Only Add-On Restriction¶
| Attribute | Value |
|---|---|
| ID | TC-BKM-032 |
| Title | Adult-Only Add-On Filters Child Passengers |
| Priority | P2 - High |
| Type | UI Test |
| Related Requirement | REQ-BKG-033 |
Entry Criteria: - Booking with adult and child passengers - Charge types with different paxType values (adult, child, all, per_cabin)
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Open add add-on dialog | Dialog opens | | 2 | Select charge type with paxType="adult" | Passenger dropdown shows only adult passengers (age >= 12) | | 3 | Select charge type with paxType="child" | Passenger dropdown shows only child passengers (age < 12) | | 4 | Select charge type with paxType="per_cabin" | Passenger dropdown is disabled | | 5 | Select charge type with paxType="all" | Passenger dropdown shows all passengers |
Exit Criteria: - Passenger dropdown correctly filtered by charge type paxType attribute
8.7 Dashboard UI Test Cases¶
TC-UID-001: Dashboard Company Accordion Rendering¶
| Attribute | Value |
|---|---|
| ID | TC-UID-001 |
| Title | Dashboard Company Accordion with Company Colors |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Dashboard page loaded - Companies exist with color values
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Navigate to cruise-dash.html | Page loads | | 2 | Verify left pane shows company accordion | Accordion visible | | 3 | Verify each company header uses company color | Colors match database | | 4 | Click a company header | Section expands showing ships | | 5 | Verify ships listed under company | Ship names visible |
Exit Criteria: - Company accordion renders with correct colors and ships
TC-UID-002: Dashboard KPI Cards¶
| Attribute | Value |
|---|---|
| ID | TC-UID-002 |
| Title | Dashboard KPI Summary Cards |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Dashboard loaded with data
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View KPI cards in right pane | 5 cards visible | | 2 | Verify Sailing Areas count | Matches database area count | | 3 | Verify Ships count | Matches database count | | 4 | Verify Itineraries count | Matches database count | | 5 | Verify Sailings count | Matches active cruise count | | 6 | Verify Bookings count | Matches total booking count across all sailings |
Exit Criteria: - All 5 KPI counts accurate
TC-UID-003: Dashboard Itinerary Cards with Filter¶
| Attribute | Value |
|---|---|
| ID | TC-UID-003 |
| Title | Itinerary Card Grid with Filter Bar |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Dashboard loaded with multiple itineraries
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View itinerary card grid | Cards displayed grouped by company | | 2 | Type search term in filter bar | Cards filtered by name | | 3 | Select area from area dropdown | Cards filtered by area | | 4 | Select status from status dropdown | Cards filtered by status | | 5 | Clear filters | All cards shown again |
Exit Criteria: - Filter bar filters itinerary cards correctly
TC-UID-004: Dashboard Manage Link Navigation¶
| Attribute | Value |
|---|---|
| ID | TC-UID-004 |
| Title | Navigate from Dashboard to Itinerary Page |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Dashboard loaded with itinerary cards
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Manage" link on an itinerary card | Navigation occurs | | 2 | Verify URL | cruise-itin.html?itineraryId=N | | 3 | Verify itinerary page loads with correct data | Itinerary info matches |
Exit Criteria: - Navigation from dashboard to itinerary page works
TC-UID-005: Dashboard Add Company¶
| Attribute | Value |
|---|---|
| ID | TC-UID-005 |
| Title | Add Company from Dashboard |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Dashboard loaded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add Company" button | Company dialog opens | | 2 | Enter code, name, and color | Fields filled | | 3 | Click Save | Dialog closes | | 4 | Verify company appears in accordion | New company visible with color |
Exit Criteria: - Company created and visible in accordion
TC-UID-006: Dashboard Add Ship¶
| Attribute | Value |
|---|---|
| ID | TC-UID-006 |
| Title | Add Ship to Company from Dashboard |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Dashboard loaded, company expanded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add Ship" button under a company | Ship dialog opens | | 2 | Enter ship name | Field filled | | 3 | Click Save | Dialog closes | | 4 | Verify ship appears under company | Ship listed |
Exit Criteria: - Ship created under correct company
TC-UID-007: Dashboard Settings Dialog¶
| Attribute | Value |
|---|---|
| ID | TC-UID-007 |
| Title | Settings Dialog for Dimension Data |
| Priority | P3 - Medium |
| Type | UI Test |
Entry Criteria: - Dashboard loaded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click Settings button | Settings dialog opens | | 2 | Verify tabs for Areas, Ports, Cabin Types, Charge Types | 4 tabs visible | | 3 | Add a new area | Area created | | 4 | Add a new port | Port created |
Exit Criteria: - Dimension data manageable via settings dialog
TC-UID-008: Dashboard Breadcrumb¶
| Attribute | Value |
|---|---|
| ID | TC-UID-008 |
| Title | Dashboard Breadcrumb Navigation |
| Priority | P3 - Medium |
| Type | UI Test |
Entry Criteria: - Dashboard loaded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Verify breadcrumb shows "Dashboard > Sailings" | Breadcrumb visible with "Sailings" vocabulary |
Exit Criteria: - Breadcrumb displays correctly with "Sailings" (not "Cruises")
TC-UID-009: Print Button on Itinerary Card¶
| Attribute | Value |
|---|---|
| ID | TC-UID-009 |
| Title | Print Button Opens Itinerary Page with Auto-Print |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Dashboard loaded with at least one itinerary card
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | Locate an itinerary card footer | Print button (bi-printer) visible |
| 2 | Click Print button | New tab opens with cruise-itin.html?itineraryId=N&print=true |
| 3 | Verify print dialog appears | window.print() triggered automatically after page load |
Exit Criteria: - Print button opens itinerary page in new tab with auto-print
TC-UID-010: New Itinerary Redirect¶
| Attribute | Value |
|---|---|
| ID | TC-UID-010 |
| Title | New Itinerary Creation Redirects to Itinerary Page |
| Priority | P2 - High |
| Type | UI Test |
| Related Requirement | UI-DASH-043 |
Entry Criteria: - Dashboard loaded
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | Click "New Itinerary" button in filter bar | Itinerary dialog opens |
| 2 | Fill in required fields (code, name, area, ship) | Fields populated |
| 3 | Click Save | Browser redirects to cruise-itin.html?itineraryId=<newId> |
| 4 | Verify itinerary page loads with new data | Page shows newly created itinerary |
Exit Criteria: - Browser is on itinerary page with the newly created itinerary
TC-UID-011: Port Count on Itinerary Cards¶
| Attribute | Value |
|---|---|
| ID | TC-UID-011 |
| Title | Itinerary Cards Display Port Count |
| Priority | P3 - Medium |
| Type | UI Test |
Entry Criteria: - Dashboard loaded with itineraries that have templates
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Observe an itinerary card | Port count shown (e.g., "3 Ports") | | 2 | Verify count matches the number of template entries | Port count equals template count for the itinerary | | 3 | Observe an itinerary with no templates | Port count shows "0 Ports" |
Exit Criteria: - Port counts displayed correctly on all itinerary cards
TC-UID-012: Copy Itinerary Dialog and Redirect¶
| Attribute | Value |
|---|---|
| ID | TC-UID-012 |
| Title | Copy Itinerary Opens Dialog with Pre-Populated Data |
| Priority | P2 - High |
| Type | UI Test |
| Related Requirement | REQ-ITN-017 |
Entry Criteria: - Dashboard loaded with at least one itinerary
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | Click Copy button on an itinerary card | Itinerary dialog opens |
| 2 | Verify name field is pre-populated with source name + " (Copy)" | Name shows "(Copy)" suffix |
| 3 | Verify code field has "-COPY" suffix | Code shows "-COPY" suffix |
| 4 | Modify name if desired and click Save | New itinerary created |
| 5 | Verify templates are deep-copied | New itinerary has same templates as source |
| 6 | Verify browser redirects to new itinerary page | Browser on cruise-itin.html?itineraryId=<newId> |
Exit Criteria: - Copy creates new itinerary with pre-populated dialog, deep copies templates, and redirects
8.8 Itinerary Page UI Test Cases¶
TC-UII-001: Itinerary Page Sailing Bar¶
| Attribute | Value |
|---|---|
| ID | TC-UII-001 |
| Title | Sailing Bar with Pill Buttons |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Itinerary page loaded with sailings
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View sailing bar in right pane | Pill-shaped buttons visible | | 2 | Verify each pill shows date and status | Date + status badge on each | | 3 | Click a sailing pill | Sailing details load in right pane |
Exit Criteria: - Sailing bar renders and is interactive
TC-UII-002: Itinerary Page Prebook Columns¶
| Attribute | Value |
|---|---|
| ID | TC-UII-002 |
| Title | Cabin Charges with Prebk and Avail Columns |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Sailing selected with cabin charges and pre-bookings
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View cabin charges table | Table visible | | 2 | Verify Prebk column shows count | Count per cabin type | | 3 | Verify Avail column shows available count | Prebk - booked/reserved | | 4 | Click Prebook button | Prebook dialog opens |
Exit Criteria: - Prebook columns display correctly
TC-UII-003: Itinerary Page Indicator Badges¶
| Attribute | Value |
|---|---|
| ID | TC-UII-003 |
| Title | Indicator Badges on Other Charges |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Sailing selected with other charges, some having indicator values
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View other charges table | Table visible | | 2 | Verify charges with indicator show badge | Small letter badge visible | | 3 | Verify badge contains the indicator character | Single letter displayed |
Exit Criteria: - Indicator badges display correctly
TC-UII-004: Exchange Rate Auto-Fill¶
| Attribute | Value |
|---|---|
| ID | TC-UII-004 |
| Title | Exchange Rate Auto-Fill on Currency Change |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Cabin charge or other charge dialog open
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select local currency | Exchange rate = 1.0 | | 2 | Select foreign currency (e.g., USD) | Exchange rate auto-filled from service | | 3 | Verify rate field is editable | Can change the value | | 4 | Modify rate manually | Custom rate accepted |
Exit Criteria: - Exchange rate auto-fills but remains editable
TC-UII-005: Itinerary Page Bookings Table¶
| Attribute | Value |
|---|---|
| ID | TC-UII-005 |
| Title | Bookings Table for Selected Sailing |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Sailing selected with bookings
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View bookings table in right pane | Table visible | | 2 | Verify columns: Customer, Cabin/Add-ons, #Pax, Amount, Status | All columns present | | 3 | Click a booking row | Navigates to cruise-agt-book.html?bookingId=N |
Exit Criteria: - Bookings table renders and rows are clickable
TC-UII-006: Create New Sailing¶
| Attribute | Value |
|---|---|
| ID | TC-UII-006 |
| Title | Create New Sailing from Itinerary Page |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Itinerary page loaded with template entries
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add New" in sailing bar | Sailing dialog opens | | 2 | Enter start date | Date entered | | 3 | Click Save | Sailing created | | 4 | Verify new pill appears in sailing bar | New pill with date + Draft status | | 5 | Click new pill | Cruise points generated from template |
Exit Criteria: - New sailing created with points from template
TC-UII-007: Itinerary Info Save¶
| Attribute | Value |
|---|---|
| ID | TC-UII-007 |
| Title | Save Itinerary Information |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Itinerary page loaded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Modify itinerary name | Name changed | | 2 | Click Save | Success notification | | 3 | Reload page | Modified name persisted |
Exit Criteria: - Itinerary changes saved
TC-UII-008: Init Cabins Function¶
| Attribute | Value |
|---|---|
| ID | TC-UII-008 |
| Title | Init Cabins Creates Pricing Templates |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Itinerary with ship assigned, no cabin price templates
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Init Cabins" button in cabin price templates section | Confirmation shown | | 2 | Confirm | Templates created | | 3 | Verify one template per ship cabin type | Count matches ship cabin count |
Exit Criteria: - Cabin price templates auto-created from ship cabins
TC-UII-009: Prebook Dialog Validation¶
| Attribute | Value |
|---|---|
| ID | TC-UII-009 |
| Title | Pre-Booking Dialog with Validation |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Itinerary page, sailing selected
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click Prebook button | Prebook dialog opens | | 2 | Select cabin type | Current and booked counts shown | | 3 | Enter target count, cost, price, commission | Fields filled | | 4 | Try to set target below booked count | Validation error shown | | 5 | Set valid target and click Save | Pre-bookings updated |
Exit Criteria: - Prebook dialog validates and saves correctly
TC-UII-010: Template Table CRUD¶
| Attribute | Value |
|---|---|
| ID | TC-UII-010 |
| Title | Itinerary Template Table Add/Edit/Delete |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Itinerary page loaded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click Add in template section | Template entry dialog opens | | 2 | Enter port, day offset, arrival time, departure time, sequence | Fields filled | | 3 | Click Save | Entry added to table | | 4 | Click Edit on the entry | Dialog opens with existing data | | 5 | Modify and save | Entry updated | | 6 | Click Delete | Confirmation shown, entry removed |
Exit Criteria: - Template table CRUD operations work
TC-UII-011: Sailing Status Change¶
| Attribute | Value |
|---|---|
| ID | TC-UII-011 |
| Title | Change Sailing Status |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Sailing selected with Draft status
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select "Active" from status dropdown | Selection made | | 2 | Confirm status change | Status updated | | 3 | Verify pill shows updated status | Status badge changes |
Exit Criteria: - Sailing status changes reflected in UI
TC-UII-012: Breadcrumb Navigation from Itinerary¶
| Attribute | Value |
|---|---|
| ID | TC-UII-012 |
| Title | Breadcrumb Navigation from Itinerary Page |
| Priority | P3 - Medium |
| Type | UI Test |
Entry Criteria: - Itinerary page loaded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Verify breadcrumb shows "Dashboard > Cruises > [Itinerary Name]" | Correct breadcrumb | | 2 | Click "Dashboard" link | Navigates to cruise-dash.html |
Exit Criteria: - Breadcrumb navigation works
8.9 Agent Booking Page UI Test Cases¶
TC-UIB-001: Sailing Strip Rendering¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-001 |
| Title | Sailing Strip with Company-Colored Borders |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Agent booking page loaded - Multiple sailings exist across companies
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Navigate to cruise-agt-book.html | Page loads | | 2 | Verify sailing strip full-width at top | Strip visible | | 3 | Verify pills show date and itinerary code | Content correct | | 4 | Verify pill borders use company color | Colors match companies | | 5 | Scroll horizontally | More pills visible |
Exit Criteria: - Sailing strip renders with company-colored pills
TC-UIB-002: Sailing Selection and Data Load¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-002 |
| Title | Select Sailing Loads Cabin and Booking Data |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Agent booking page loaded with sailing strip
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click a sailing pill | Pill highlighted | | 2 | Verify cabin availability table loads | Table shows cabin types | | 3 | Verify bookings list loads | Bookings for this sailing shown |
Exit Criteria: - Sailing selection loads related data
TC-UIB-003: URL Parameter Entry¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-003 |
| Title | URL Parameter cruiseId Opens Sailing |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Known cruiseId exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Navigate to cruise-agt-book.html?cruiseId=5 | Page loads | | 2 | Verify sailing 5 is auto-selected in strip | Pill highlighted | | 3 | Verify cabin data and bookings loaded | Data for cruise 5 shown |
Exit Criteria: - URL parameter auto-selects sailing
TC-UIB-004: Cabin Availability Table¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-004 |
| Title | Cabin Availability Table Display |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Sailing selected with cabin types
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View cabin availability table | Table visible | | 2 | Verify columns: Cabin Type, Max Pax, Charge, Prebk, Avail | All columns present | | 3 | Verify prebook +/- buttons visible | Buttons present |
Exit Criteria: - Cabin availability table renders correctly
TC-UIB-005: New Booking Dialog¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-005 |
| Title | New Booking Dialog with Pax Auto-Calc |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Sailing selected
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "New Booking" button | Dialog opens | | 2 | Enter adults=3, children=1, infants=0 | Fields filled | | 3 | Verify total auto-calculated | Total = 4 | | 4 | Select cabin type | Cabin selector works | | 5 | Enter lead passenger name, nationality | Fields accept input | | 6 | Verify nationality autocomplete | Dropdown suggestions appear |
Exit Criteria: - New booking dialog works with auto-calculation
TC-UIB-006: Passenger Visa Badges¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-006 |
| Title | Visa Requirement Badges on Passengers |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Booking selected with passengers having various nationalities
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View passengers table | Table visible | | 2 | Verify visa badges appear per destination port | Badges shown | | 3 | Verify badge types: visa required (red), visa free (green), visa on arrival (yellow) | Colors correct |
Exit Criteria: - Visa badges display correctly for each passenger
TC-UIB-007: Passenger Age Badges¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-007 |
| Title | Age Category Badges on Passengers |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Booking with passengers of different ages
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View passengers table | Table visible | | 2 | Verify Adult badge for passenger age >= 12 | Blue/default badge | | 3 | Verify Child badge for passenger age 2-11 | Yellow/warning badge | | 4 | Verify Infant badge for passenger age < 2 | Red/danger badge |
Exit Criteria: - Age badges correctly computed and displayed
TC-UIB-008: Booked Cabins with Own Badges¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-008 |
| Title | Booked Cabins Table with Own/Non-Own Badges |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Booking with both own and non-own cabins
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View booked cabins table | Table visible | | 2 | Verify own cabin shows "Own" badge | Green badge | | 3 | Verify non-own cabin has no "Own" badge | No badge or different indicator | | 4 | Verify total price shown in footer | Sum of all cabin prices |
Exit Criteria: - Cabin ownership badges and totals display correctly
TC-UIB-009: Add-Ons Table with Totals¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-009 |
| Title | Add-Ons Table Display with Totals |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Booking with add-ons
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View add-ons table | Table visible | | 2 | Verify columns: Charge Type, Passenger, Amount, Currency, Actions | All columns present | | 3 | Verify total amount in footer | Sum of all add-on amounts |
Exit Criteria: - Add-ons table renders with totals
TC-UIB-010: Booking Status Dropdown¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-010 |
| Title | Booking Status Dropdown Transitions |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Booking selected with "Documents pending" status
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View status dropdown in booking header | Current status shown | | 2 | Select "Availability pending" | Confirmation dialog appears | | 3 | Confirm | Status updated, badge changes | | 4 | Select an invalid transition | Error notification shown |
Exit Criteria: - Status transitions work via UI dropdown
TC-UIB-011: Delete Booking via UI¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-011 |
| Title | Delete Booking from Agent Booking Page |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Booking selected
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click Delete button in booking header | Confirmation dialog | | 2 | Confirm deletion | Booking removed | | 3 | Verify booking detail view cleared | Right pane empty | | 4 | Verify booking removed from bookings list | Not in list |
Exit Criteria: - Booking deleted via UI with cascading cleanup
TC-UIB-012: Booking Totals Display¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-012 |
| Title | Booking Grand Total Display |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Booking with cabins and add-ons
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View booking detail | Total amount visible | | 2 | Add a cabin | Total increases | | 3 | Add an add-on | Total increases | | 4 | Delete a cabin | Total decreases |
Exit Criteria: - Grand total updates in real-time
TC-UIB-013: Quick Prebook from Cabin Availability¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-013 |
| Title | Quick Pre-Booking +/- from Availability Table |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Sailing selected, cabin availability table visible
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "+" next to a cabin type prebook count | Count increments | | 2 | Verify Avail column updates | Available count increases | | 3 | Click "-" next to the same cabin type | Count decrements | | 4 | Verify Avail column updates | Available count decreases |
Exit Criteria: - Quick prebook buttons work correctly
TC-UIB-014: BookingId URL Parameter¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-014 |
| Title | URL Parameter bookingId Opens Specific Booking |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Known bookingId exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Navigate to cruise-agt-book.html?bookingId=10 | Page loads | | 2 | Verify correct sailing auto-selected | Sailing for this booking highlighted | | 3 | Verify booking auto-selected and details shown | Booking 10 details in right pane |
Exit Criteria: - bookingId URL parameter auto-selects sailing and booking
TC-UIB-015: Cross-Page Data Consistency¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-015 |
| Title | Data Consistency Across Dashboard, Itinerary, and Booking Pages |
| Priority | P2 - High |
| Type | Integration Test |
Entry Criteria: - Data exists in the system
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View sailing count on dashboard KPI card | Count noted | | 2 | Navigate to itinerary page, count sailings in bar | Count matches dashboard | | 3 | View booking count on itinerary page bookings table | Count noted | | 4 | Navigate to agent booking page, count bookings in list | Count matches itinerary page |
Exit Criteria: - Data consistent across all three pages
TC-UIB-016: Customer Name Column in Booking List¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-016 |
| Title | Booking List Shows Customer Name Column |
| Priority | P2 - High |
| Type | UI Test |
| Related Requirement | UI-AGT-021 |
Entry Criteria: - Agent booking page loaded with bookings that have lead passenger names
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select a sailing with bookings | Booking list loads | | 2 | Verify table has "Customer" column | Column header visible | | 3 | Verify customer name matches lead passenger name | Names are correct | | 4 | Verify booking without lead passenger shows "-" | Dash shown for missing name |
Exit Criteria: - Customer name column displays correctly with lead passenger names
TC-UIB-017: Passenger Count "X of Y" Header¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-017 |
| Title | Passenger Section Shows "X of Y" Count |
| Priority | P3 - Medium |
| Type | UI Test |
| Related Requirement | UI-AGT-040 |
Entry Criteria: - Booking selected with expected pax count (e.g., 3 adults, 1 child = 4 total)
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Select a booking with 2 of 4 passengers added | Header shows "(2 of 4)" | | 2 | Add a passenger | Header updates to "(3 of 4)" | | 3 | Add the last passenger | Header updates to "(4 of 4)" |
Exit Criteria: - Passenger count header reflects current vs. expected passenger count
TC-UIB-018: New Booking Button in Right Pane¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-018 |
| Title | New Button in Right Pane Opens Booking Dialog |
| Priority | P3 - Medium |
| Type | UI Test |
| Related Requirement | UI-AGT-032 |
Entry Criteria: - Agent booking page loaded with a sailing selected
Test Steps:
| Step | Action | Expected Result |
|------|--------|-----------------|
| 1 | Locate "New" button in the right pane booking header area | Button visible (btn-success, bi-plus-lg) |
| 2 | Click "New" button | New booking dialog opens |
| 3 | Fill in booking details and save | New booking created |
Exit Criteria: - New button in right pane provides shortcut to create booking
TC-UIB-019: Independent Pane Scrolling¶
| Attribute | Value |
|---|---|
| ID | TC-UIB-019 |
| Title | Left and Right Panes Scroll Independently |
| Priority | P3 - Medium |
| Type | UI Test |
Entry Criteria: - Agent booking page loaded with enough content to require scrolling in both panes
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Scroll the left pane down | Left pane scrolls; right pane stays at its position | | 2 | Scroll the right pane down | Right pane scrolls; left pane stays at its position | | 3 | Verify both panes have scrollbars | Scrollbars visible when content overflows |
Exit Criteria: - Left and right panes scroll independently without affecting each other
9. UI and Integration Test Cases¶
TC-UI-001: Page Load - Initial State¶
| Attribute | Value |
|---|---|
| ID | TC-UI-001 |
| Title | Cruise Management Page Initial Load |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - User logged in - Companies and itineraries exist
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Navigate to /cruises.html | Page loads | | 2 | Verify tree panel visible | Left panel shows tree | | 3 | Verify companies loaded | Companies in tree | | 4 | Verify workspace panel | Right panel visible | | 5 | Verify empty state message | "Select an itinerary" shown | | 6 | Verify toolbar buttons disabled | Most buttons disabled |
Exit Criteria: - Page fully loaded - Initial state correct
TC-UI-002: Tree Navigation - Select Company¶
| Attribute | Value |
|---|---|
| ID | TC-UI-002 |
| Title | Select Company in Tree |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Companies with itineraries exist
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click on company node | Company expands | | 2 | Verify itineraries shown | Nested under company | | 3 | Verify expand icon changes | Arrow rotates down | | 4 | Click company again | Company collapses |
Exit Criteria: - Expand/collapse works - Visual feedback correct
TC-UI-003: Tree Navigation - Select Itinerary¶
| Attribute | Value |
|---|---|
| ID | TC-UI-003 |
| Title | Select Itinerary in Tree |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Itinerary with cruises exists
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click on itinerary node | Itinerary selected | | 2 | Verify highlight applied | Selection styling visible | | 3 | Verify itinerary details shown | Form populated | | 4 | Verify cruises loaded | Cruise buttons appear | | 5 | Verify first cruise selected | First cruise highlighted | | 6 | Verify cruise points shown | Points table populated |
Exit Criteria: - Itinerary selected - Related data loaded
TC-UI-004: Cruise Selection Bar¶
| Attribute | Value |
|---|---|
| ID | TC-UI-004 |
| Title | Cruise Selection Bar Interaction |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Itinerary with multiple cruises
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View cruise buttons | Buttons shown in date order | | 2 | Verify date format | "DD MMM" format | | 3 | Click different cruise | Selection changes | | 4 | Verify points update | New cruise points shown | | 5 | Verify status indicators | Colored dots visible |
Exit Criteria: - Cruise selection works - Visual feedback correct
TC-UI-005: Dialog Open and Close¶
| Attribute | Value |
|---|---|
| ID | TC-UI-005 |
| Title | Dialog Open/Close Behavior |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Page loaded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Add Company" | Dialog opens | | 2 | Verify dialog structure | Header, body, footer | | 3 | Click Cancel | Dialog closes | | 4 | Open dialog again | Dialog opens fresh | | 5 | Click X button | Dialog closes | | 6 | Open dialog again | - | | 7 | Press Escape key | Dialog closes |
Exit Criteria: - All close methods work - Dialog state resets
TC-UI-006: Form Validation Display¶
| Attribute | Value |
|---|---|
| ID | TC-UI-006 |
| Title | Form Validation Error Display |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Dialog open
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Leave required field empty | - | | 2 | Click Save | Validation triggers | | 3 | Verify field highlight | Red border on field | | 4 | Verify error message | Error text below field | | 5 | Fill in required field | - | | 6 | Verify error clears | Red border and message removed |
Exit Criteria: - Validation errors displayed correctly - Errors clear when fixed
TC-UI-007: Notification Display¶
| Attribute | Value |
|---|---|
| ID | TC-UI-007 |
| Title | Success/Error Notification Display |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Page loaded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Create a company successfully | Success notification | | 2 | Verify notification color | Green | | 3 | Verify auto-dismiss | Disappears after 3 seconds | | 4 | Trigger an error | Error notification | | 5 | Verify error color | Red | | 6 | Verify longer display | Stays 5 seconds |
Exit Criteria: - Notifications display correctly - Auto-dismiss works
TC-UI-010: Pricing Page Navigation¶
| Attribute | Value |
|---|---|
| ID | TC-UI-010 |
| Title | Navigate to Pricing Page |
| Priority | P1 - Critical |
| Type | UI Test |
Entry Criteria: - Cruise selected
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click "Configure Pricing" | Navigation occurs | | 2 | Verify pricing page loads | New page displayed | | 3 | Verify cruise info header | Ship, date, status shown | | 4 | Verify cabin charges section | Cabins listed | | 5 | Verify other charges section | Charges shown | | 6 | Click "Back" | Returns to cruise management |
Exit Criteria: - Navigation works both ways - Correct cruise context maintained
TC-UI-011: Pricing Page - Inline Editing¶
| Attribute | Value |
|---|---|
| ID | TC-UI-011 |
| Title | Inline Edit Cabin Charges |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Pricing page with cabin charges
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Click amount field | Field editable | | 2 | Change value | New value entered | | 3 | Tab to next field | Focus moves | | 4 | Change currency | Dropdown works | | 5 | Click Save All | All changes saved | | 6 | Refresh page | Values persisted |
Exit Criteria: - Inline editing works - Changes saved correctly
TC-UI-020: Settings Dialog - Tab Navigation¶
| Attribute | Value |
|---|---|
| ID | TC-UI-020 |
| Title | Settings Dialog Tab Navigation |
| Priority | P2 - High |
| Type | UI Test |
Entry Criteria: - Settings dialog open
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Verify tabs visible | All dimension tabs shown | | 2 | Click "Cruise Areas" tab | Tab activates, content loads | | 3 | Click "Cruise Ports" tab | Tab activates, content loads | | 4 | Click "Cabin Types" tab | Tab activates, content loads | | 5 | Click "Charge Types" tab | Tab activates, content loads | | 6 | Click "Ships" tab | Tab activates, content loads |
Exit Criteria: - All tabs accessible - Correct content per tab
TC-UI-030: Empty State Display¶
| Attribute | Value |
|---|---|
| ID | TC-UI-030 |
| Title | Empty State Messages |
| Priority | P3 - Medium |
| Type | UI Test |
Entry Criteria: - Clean database state
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Load page with no companies | "No cruise companies" message | | 2 | Create company, no itineraries | "No itineraries" when expanded | | 3 | Create itinerary, no cruises | "No cruises" in selection bar | | 4 | Create cruise, no points | "No route defined" message |
Exit Criteria: - All empty states display correctly - Appropriate guidance provided
TC-UI-040: Responsive Layout¶
| Attribute | Value |
|---|---|
| ID | TC-UI-040 |
| Title | Responsive Layout Behavior |
| Priority | P3 - Medium |
| Type | UI Test |
Entry Criteria: - Page loaded
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | View at 1400px width | Full layout visible | | 2 | Resize to 1000px | Panels adjust proportions | | 3 | Resize to 768px | Panels stack or collapse | | 4 | Verify all functionality | Still usable at smaller size |
Exit Criteria: - Layout adapts to screen size - Functionality preserved
10. Negative and Edge Case Tests¶
TC-NEG-001: API Session Validation¶
| Attribute | Value |
|---|---|
| ID | TC-NEG-001 |
| Title | API Call Without Valid Session |
| Priority | P1 - Critical |
| Type | Security Test |
Entry Criteria: - API server running
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | POST to API without session | Request sent | | 2 | Verify response | Authentication error | | 3 | POST with invalid session | Request sent | | 4 | Verify response | Session invalid error |
Exit Criteria: - Unauthenticated requests rejected - Proper error returned
TC-NEG-002: Concurrent Modification¶
| Attribute | Value |
|---|---|
| ID | TC-NEG-002 |
| Title | Concurrent Edit of Same Record |
| Priority | P2 - High |
| Type | Integration Test |
Entry Criteria: - Two browser sessions logged in
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | User A opens company edit | Dialog opens | | 2 | User B opens same company | Dialog opens | | 3 | User A saves change | Save succeeds | | 4 | User B saves different change | Depends on implementation | | 5 | Verify final state | Last write wins or conflict |
Exit Criteria: - No data corruption - Predictable behavior
TC-NEG-003: Large Data Set Performance¶
| Attribute | Value |
|---|---|
| ID | TC-NEG-003 |
| Title | Performance with Large Data Set |
| Priority | P3 - Medium |
| Type | Performance Test |
Entry Criteria: - 50 companies, 500 itineraries, 5000 cruises
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Load cruise management page | Page loads within 3 seconds | | 2 | Expand company with 100 itineraries | Expands within 1 second | | 3 | Search cruises with broad criteria | Results within 3 seconds |
Exit Criteria: - Performance within acceptable limits - No timeouts
TC-NEG-004: Special Characters in Input¶
| Attribute | Value |
|---|---|
| ID | TC-NEG-004 |
| Title | Special Characters Handling |
| Priority | P2 - High |
| Type | Security Test |
Entry Criteria: - Create/edit dialogs accessible
Test Steps: | Step | Action | Expected Result | |------|--------|-----------------| | 1 | Enter company name with quotes | "Test's Company" | | 2 | Save and verify | Saved correctly | | 3 | Enter with HTML | "" | | 4 | Verify display | HTML escaped, not executed | | 5 | Enter with SQL | "'; DROP TABLE --" | | 6 | Verify no injection | Data saved as text |
Exit Criteria: - Special characters handled safely - No XSS or SQL injection
11. Test Execution Summary Template¶
11.1 Test Run Summary¶
| Metric | Value |
|---|---|
| Total Test Cases | 354 |
| Executed | - |
| Passed | - |
| Failed | - |
| Blocked | - |
| Not Executed | - |
| Pass Rate | - |
11.2 Test Results by Category¶
| Category | Total | Passed | Failed | Blocked |
|---|---|---|---|---|
| Dimension Data | 50 | - | - | - |
| Ship Cabin | 20 | - | - | - |
| Itinerary | 40 | - | - | - |
| Cruise Instance | 45 | - | - | - |
| Pricing | 35 | - | - | - |
| Search & Booking | 40 | - | - | - |
| Pre-Booking | 10 | - | - | - |
| Booking Management | 29 | - | - | - |
| UI - Dashboard | 8 | - | - | - |
| UI - Itinerary | 12 | - | - | - |
| UI - Agent Booking | 15 | - | - | - |
| UI & Integration (Legacy) | 40 | - | - | - |
| Negative & Edge | 10 | - | - | - |
11.3 Defects Found¶
| Defect ID | Test Case | Severity | Description | Status |
|---|---|---|---|---|
| - | - | - | - | - |
12. Appendix¶
12.1 Test Data Requirements¶
| Entity | Minimum Records | Description |
|---|---|---|
| Cruise Company | 3 | Different names, codes, and colors |
| Cruise Area | 3 | Caribbean, Mediterranean, Alaska |
| Cruise Ship | 5 | Across different companies |
| Cabin Type | 4 | Inside, Outside, Balcony, Suite |
| Charge Type | 3 | Port Taxes, Gratuities, Packages |
| Cruise Port | 10 | Various Caribbean and other ports |
| Itinerary | 5 | Different durations and areas |
| Cruise Template | 15 | 3 entries per itinerary |
| Cabin Price Template | 10 | Default prices per itinerary |
| Other Charge Template | 10 | Default charges with indicators |
| Cruise | 10 | Various dates and statuses |
| Cruise Point | 30 | Generated from templates |
| Cabin Charge | 40 | Multiple cruises, all cabin types |
| Other Charge | 20 | Mix of mandatory and optional, with indicators |
| Cabin Pre-Booking | 15 | Mix of Available, Reserved, Booked statuses |
| Cruise Booking | 8 | Various statuses across the lifecycle |
| Cruise Passenger | 16 | 2 per booking, mix of nationalities and ages |
| Booked Cabin | 10 | Mix of own and non-own |
| Booking Add-on | 12 | Various charge types, some per-passenger |
12.2 Test User Accounts¶
| Username | Role | Purpose |
|---|---|---|
| admin_test | Administrator | Dimension data management |
| cruise_mgr_test | Cruise Manager | Itinerary and cruise management |
| booking_agent_test | Booking Agent | Search and booking tests |
12.3 Environment Configuration¶
| Setting | Value |
|---|---|
| API Base URL | http://localhost:11080/tlinq-api |
| Database | PostgreSQL test database |
| Browser | Chrome 120+ |
| Screen Resolution | 1920x1080 minimum |