Skip to content

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

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:

{
  "code": "RCCL",
  "name": "Royal Caribbean"
}


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:

{
  "session": "",
  "areaId": 1
}


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:

{
  "session": "",
  "dateRangeStart": "2025-12-01",
  "dateRangeEnd": "2025-12-31"
}


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


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