Files
2025-12-01 11:12:22 +01:00

5.4 KiB

Test Helpers

This directory contains helper utilities for creating test data.

XML Builders

The xml_builders module provides convenient builder classes for creating reservation XML structures used in conversion service tests.

Quick Start

from tests.helpers import ReservationXMLBuilder

# Create a simple reservation
xml = (
    ReservationXMLBuilder(
        hotel_id="39054_001",
        reservation_id="12345",
        reservation_number="RES-001",
        reservation_date="2025-11-14",
    )
    .set_guest(
        guest_id="guest_001",
        first_name="John",
        last_name="Doe",
        email="john@example.com",
    )
    .add_room(
        arrival="2025-12-01",
        departure="2025-12-05",
        revenue_logis_per_day=150.0,  # Fixed revenue per night
    )
    .build_xml()
)

Features

ReservationXMLBuilder

The main builder class for creating reservation XML structures.

Key Features:

  • Fluent API for method chaining
  • Automatic daily sales generation from arrival to departure
  • Convenient revenue-per-day specification (no need to manually create each dailySale)
  • Support for advertising campaign data
  • Guest information with optional fields

Example - Multi-room reservation:

xml = (
    ReservationXMLBuilder(
        hotel_id="39054_001",
        reservation_id="12345",
        reservation_number="RES-001",
        reservation_date="2025-11-14",
    )
    .set_guest(
        guest_id="guest_001",
        first_name="Jane",
        last_name="Smith",
        email="jane@example.com",
        country_code="US",
    )
    .add_room(
        arrival="2025-12-01",
        departure="2025-12-05",
        room_number="101",
        room_type="DZV",
        revenue_logis_per_day=150.0,
    )
    .add_room(
        arrival="2025-12-01",
        departure="2025-12-05",
        room_number="102",
        room_type="DZM",
        revenue_logis_per_day=200.0,
    )
    .build_xml()
)

Daily Sales Generation

The builder automatically generates <dailySale> entries for each day from arrival to departure (inclusive).

  • Days before departure: Include revenueTotal and revenueLogis attributes
  • Departure day: No revenue attributes (just the date)

Example:

# A 3-night stay (Dec 1-4)
.add_room(
    arrival="2025-12-01",
    departure="2025-12-04",
    revenue_logis_per_day=160.0,
)

Generates:

<dailySales>
  <dailySale date="2025-12-01" revenueTotal="160.0" revenueLogis="160.0"/>
  <dailySale date="2025-12-02" revenueTotal="160.0" revenueLogis="160.0"/>
  <dailySale date="2025-12-03" revenueTotal="160.0" revenueLogis="160.0"/>
  <dailySale date="2025-12-04"/>  <!-- No revenue on departure day -->
</dailySales>

MultiReservationXMLBuilder

For creating XML documents with multiple reservations:

from tests.helpers import ReservationXMLBuilder, MultiReservationXMLBuilder

multi_builder = MultiReservationXMLBuilder()

# Add first reservation
res1 = (
    ReservationXMLBuilder(...)
    .set_guest(...)
    .add_room(...)
)
multi_builder.add_reservation(res1)

# Add second reservation
res2 = (
    ReservationXMLBuilder(...)
    .set_guest(...)
    .add_room(...)
)
multi_builder.add_reservation(res2)

xml = multi_builder.build_xml()

RoomReservationBuilder

Low-level builder for creating individual room reservations. Usually you'll use ReservationXMLBuilder.add_room() instead, but this is available for advanced use cases.

from tests.helpers import RoomReservationBuilder

room_builder = RoomReservationBuilder(
    arrival="2025-12-01",
    departure="2025-12-05",
    room_type="DZV",
    room_number="101",
    revenue_logis_per_day=150.0,
)

# Get the XML element (not a string)
room_elem = room_builder.build()

Common Parameters

ReservationXMLBuilder:

  • hotel_id - Hotel ID (required)
  • reservation_id - Reservation ID (required)
  • reservation_number - Reservation number (required)
  • reservation_date - Reservation date YYYY-MM-DD (required)
  • creation_time - Creation timestamp (optional, defaults to reservation_date + T00:00:00)
  • advertising_medium - Advertising medium (optional)
  • advertising_partner - Advertising partner (optional)
  • advertising_campagne - Advertising campaign (optional)

set_guest() parameters:

  • guest_id - Guest ID (required)
  • first_name - First name (required)
  • last_name - Last name (required)
  • email - Email address (required)
  • language - Language code (default: "en")
  • gender - Gender (optional)
  • country_code - Country code (optional)
  • country - Country name (optional)

add_room() parameters:

  • arrival - Arrival date YYYY-MM-DD (required)
  • departure - Departure date YYYY-MM-DD (required)
  • room_type - Room type code (default: "DZV")
  • room_number - Room number (default: "101")
  • status - Reservation status (default: "reserved")
  • adults - Number of adults (default: 2)
  • children - Number of children (default: 0)
  • infants - Number of infants (default: 0)
  • rate_plan_code - Rate plan code (default: "STANDARD")
  • revenue_logis_per_day - Fixed revenue per night (optional, generates daily sales)
  • revenue_total_per_day - Total revenue per night (optional, defaults to revenue_logis_per_day)

See Also