# coding: utf-8

"""
    Wink Payment API

    A programmatic way to create bookings, receive reactive and disburse funds globally.  ## APIs Not every integrator needs every APIs. For that reason, we have separated APIs into context.  - [Affiliate](/affiliate): All APIs related to selling travel inventory as an affiliate. - [Analytics](/analytics): All APIs related to tracking metrics across a wide variety of data source segments including, more entertaining, leaderboard metrics. - [Booking](/booking): All APIs related to creating platform bookings. - [Channel Manager](/channel-manager): All APIs related to channel managers who want to integrate with our platform. - [Extranet](/extranet): All APIs related to managing travel inventory and suppliers. - [Inventory](/inventory): All APIs related to retrieve known travel inventory as it was found using the Lookup API.. - [Lookup](/lookup): All APIs related to locating inventory by region, locale and property flags. - [Reference](/reference): All APIs related to retrieving platform-supported taxonomies. - [TripPay](/reactive): All APIs related to TripPay account management, booking, mapping and integration features.  ## SDKs We are actively working on supporting the most used languages out there. If you don't see your language here, reach out to us with a request to officially add your language. In the meantime, if you want to roll your own SDK, you can do so by downloading the OpenAPI spec and using one of the many available OpenAPI generators available: [https://openapi-generator.tech/docs/generators](https://openapi-generator.tech/docs/generators).  - Java SDK [https://github.com/wink-travel/trip-pay-sdk-java](https://github.com/wink-travel/trip-pay-sdk-java)  # Usage These features are made available to you via a [REST API](https://en.wikipedia.org/wiki/Representational_state_transfer). This API is language agnostic. We will link to SDKs for the most popular programming languages on this page as they become available.  ## Versioning We chose to version our endpoints in a way that we hope affects your integration with us the least. You request the version of our API you wish to work with via the `Wink-Version` header. When it's time for you to upgrade, you only have to change the version number to get access to our updated endpoints.  ## Release history - Follow updates on Github: https://github.com/wink-travel/wink-sdk-java/blob/master/CHANGELOG.md 

    The version of the OpenAPI document: 30.9.11
    Contact: bjorn@wink.travel
    Generated by OpenAPI Generator (https://openapi-generator.tech)

    Do not edit the class manually.
"""  # noqa: E501


import unittest

from trip_pay_payment.models.external_booking_contract import ExternalBookingContract

class TestExternalBookingContract(unittest.TestCase):
    """ExternalBookingContract unit test stubs"""

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def make_instance(self, include_optional) -> ExternalBookingContract:
        """Test ExternalBookingContract
            include_optional is a boolean, when False only required
            params are included, when True both required and
            optional params are included """
        # uncomment below to create an instance of `ExternalBookingContract`
        """
        model = ExternalBookingContract()
        if include_optional:
            return ExternalBookingContract(
                mapping = trip_pay_payment.models.mapping.Mapping(
                    id = 'doc-1', 
                    created_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    last_update = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    version = 12, 
                    account_owner_identifier = 'principal-1', 
                    local_account_identifier = 'hotel-1', 
                    external_identifier = 'hotel-a', 
                    account_identifier = 'account-1', 
                    name = 'Sheraton Hua Hin', ),
                booking_contract = trip_pay_payment.models.booking_contract.BookingContract(
                    id = 'doc-1', 
                    created_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    last_update = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    version = 12, 
                    federated_organization_identifier = 'owner-1', 
                    federated_organization_name = 'Wink', 
                    user = trip_pay_payment.models.authenticated_user.AuthenticatedUser(
                        user_identifier = '', 
                        first_name = 'John', 
                        last_name = 'Smith', 
                        email = 'john.smith@email.com', 
                        full_name = 'John Smith', ), 
                    ip_address = '111.222.333.444', 
                    trace_id = 'T-123456', 
                    source_url = 'https://www.traveliko.com', 
                    identifier = 'unique-supplier-booking-contract-1', 
                    supplier_identifier = '', 
                    supplier_name = 'Supplier One', 
                    display_price_quote = trip_pay_payment.models.quote.Quote(
                        source = '', 
                        target = '', 
                        exchange_rate = 1.337, 
                        timestamp = 56, ), 
                    supplier_price_quote = trip_pay_payment.models.quote.Quote(
                        source = '', 
                        target = '', 
                        exchange_rate = 1.337, 
                        timestamp = 56, ), 
                    internal_price_quote = , 
                    capture_price_quote = , 
                    item_list = [
                        trip_pay_payment.models.booking_contract_item.BookingContractItem(
                            supplier_item_booking_code = 'TP-ASDFG1234', 
                            user = trip_pay_payment.models.guest_user.GuestUser(
                                user_identifier = '', 
                                first_name = 'John', 
                                last_name = 'Smith', 
                                email = 'john.smith@email.com', 
                                telephone = '+1 212 555 1212', 
                                profile = trip_pay_payment.models.profile.Profile(
                                    profile_identifier = '', 
                                    user_identifier = '', 
                                    share = True, 
                                    user = trip_pay_payment.models.profile_user.ProfileUser(
                                        first_name = 'Avid', 
                                        last_name = 'Travelman', 
                                        email = 'avid@travelman.com', 
                                        phone = '0123456789', 
                                        profile_picture_url = '', 
                                        full_name = 'John Smith', ), 
                                    personal = trip_pay_payment.models.personal.Personal(
                                        gender = 'MALE', 
                                        birth_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), 
                                        marital_status = 'ANNULLED', 
                                        child_quantity = 56, 
                                        citizenship = '', 
                                        address1 = '', 
                                        address2 = '', 
                                        city = '', 
                                        state = '', 
                                        postal_code = '', 
                                        country = '', 
                                        preferred_currency = 'USD', 
                                        language = '', 
                                        contact_person = [
                                            trip_pay_payment.models.contact.Contact(
                                                first_name = 'John', 
                                                last_name = 'Smith', 
                                                email = 'johnsmith@email.com', 
                                                secondary_email = 'johnsmith2@email.com', 
                                                phone_number = '+12125551212', 
                                                full_name = 'John Smith', 
                                                summary = 'John Smith (johnsmith@gmail.com / +12125551212)', )
                                            ], 
                                        phys_chall_name = [
                                            ''
                                            ], 
                                        pet_info = [
                                            trip_pay_payment.models.pet_info_dto.PetInfoDto(
                                                name = '', 
                                                type = '', )
                                            ], ), 
                                    preferences = trip_pay_payment.models.preferences.Preferences(
                                        property_location_pref = '', 
                                        property_type_pref = '', 
                                        hotel_chain_pref = '', 
                                        property_amenity_pref = [
                                            ''
                                            ], 
                                        recreation_srvc_pref = [
                                            ''
                                            ], 
                                        business_srvc_pref = [
                                            ''
                                            ], 
                                        security_feature_pref = [
                                            ''
                                            ], 
                                        phys_chal_feature_pref = [
                                            ''
                                            ], 
                                        smoking_allowed = True, 
                                        room_location_pref = '', 
                                        bed_type_pref = '', 
                                        food_srvc_pref = '', 
                                        room_amenity_pref = [
                                            ''
                                            ], 
                                        guest_type = '', 
                                        meal_pref = '', 
                                        cuisine_pref = '', 
                                        interest_pref = [
                                            ''
                                            ], 
                                        beverage_pref = [
                                            ''
                                            ], 
                                        food_pref = [
                                            ''
                                            ], 
                                        allergies = [
                                            ''
                                            ], 
                                        pets_pref = [
                                            ''
                                            ], ), ), 
                                full_name = 'John Smith', ), 
                            name_in_english = 'Deluxe King', 
                            description_in_english = 'This is the best deluxe king that money can buy.', 
                            itinerary = trip_pay_payment.models.simple_date_time_itinerary.SimpleDateTimeItinerary(
                                start_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                                end_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                                adults = 0, 
                                children = 0, 
                                hours = 56, 
                                guests = 56, 
                                nights = 56, ), 
                            pricing_type = 'PER_STAY', 
                            type = 'LODGING', 
                            beneficiary_list = [
                                trip_pay_payment.models.beneficiary.Beneficiary(
                                    account_identifier = 'account-1', 
                                    account_name = 'Account 1', 
                                    account_email = 'account@one.com', 
                                    account_url = 'https://some.url', 
                                    type = 'COMMISSION', 
                                    amount_due = trip_pay_payment.models.beneficiary_charge.BeneficiaryCharge(
                                        type = 'PERCENTAGE', 
                                        percent = 1.337, ), 
                                    source_currency = 'USD', 
                                    display_currency = 'USD', 
                                    supplier_currency = 'USD', 
                                    internal_currency = 'USD', 
                                    capture_currency = 'USD', 
                                    source_amount = 50, 
                                    display_amount = 50, 
                                    supplier_amount = 50, 
                                    internal_amount = 50, 
                                    capture_amount = 50, 
                                    source_amount_refund_modifier = 5, 
                                    display_amount_refund_modifier = 5, 
                                    supplier_amount_refund_modifier = 5, 
                                    internal_amount_refund_modifier = 5, 
                                    capture_amount_refund_modifier = 5, 
                                    pending_refunds = [
                                        trip_pay_payment.models.pending_refund.PendingRefund(
                                            refund_identifier = 'refund-1', 
                                            source_amount_refund_modifier = 5, 
                                            display_amount_refund_modifier = 5, 
                                            supplier_amount_refund_modifier = 5, 
                                            internal_amount_refund_modifier = 5, 
                                            capture_amount_refund_modifier = 5, )
                                        ], 
                                    net_source_amount = 0, 
                                    net_display_amount = 0, 
                                    net_supplier_amount = 0, 
                                    net_internal_amount = 0, 
                                    net_capture_amount = 0, 
                                    reconciled = False, 
                                    metadata = {
                                        'key' : ''
                                        }, )
                                ], 
                            payable = 'PREPAY', 
                            policy = trip_pay_payment.models.supplier_contract_item_policy.SupplierContractItemPolicy(
                                refundable = True, 
                                advance_cancellation_free_of_charge = 'UNTIL_EIGHTEEN_HUNDRED_HOURS_ON_DAY_OF_ARRIVAL', 
                                refundable_cancellation_charge = 'FIFTY_PERCENT', 
                                no_show_charge = 'SAME_AS_CANCELLATION_FEE', 
                                non_refundable_cancellation_charge = 'SEVENTY_PERCENT', 
                                non_refundable_deadline = 'SEVEN_DAYS_BEFORE_ARRIVAL', 
                                non_refundable_after_deadline_cancellation_charge = 'ONE_HUNDRED_PERCENT', 
                                external_identifier = 'policy-1', 
                                fully_refundable = True, 
                                partially_refundable = True, ), 
                            external_identifier = 'room-type-1', 
                            tokens_earned = 12, 
                            daily_rate_list = [
                                trip_pay_payment.models.daily_rate.DailyRate(
                                    date = 'Mon Aug 24 03:00:00 EEST 2020', 
                                    price = trip_pay_payment.models.custom_monetary_amount.CustomMonetaryAmount(
                                        amount = 1.337, 
                                        currency = '', ), 
                                    display_price = trip_pay_payment.models.custom_monetary_amount.CustomMonetaryAmount(
                                        amount = 1.337, 
                                        currency = '', ), 
                                    supplier_price = , 
                                    internal_price = , 
                                    capture_price = , )
                                ], 
                            cancelled = True, 
                            source_currency = 'USD', 
                            display_currency = 'USD', 
                            supplier_currency = 'USD', 
                            internal_currency = 'USD', 
                            capture_currency = 'USD', 
                            source_amount = 0, 
                            display_amount = 0, 
                            supplier_amount = 0, 
                            internal_amount = 0, 
                            capture_amount = 0, 
                            source_amount_refund_modifier = 0, 
                            display_amount_refund_modifier = 0, 
                            supplier_amount_refund_modifier = 0, 
                            internal_amount_refund_modifier = 0, 
                            capture_amount_refund_modifier = 0, 
                            net_source_amount = 0, 
                            net_display_amount = 0, 
                            net_supplier_amount = 0, 
                            net_internal_amount = 0, 
                            net_capture_amount = 0, 
                            metadata = {
                                'key' : ''
                                }, 
                            cancellable_by_traveler = True, 
                            cancellable_by_supplier_or_agent = True, 
                            cancellable_with_no_charges = True, 
                            cancellable_with_potential_charges = True, )
                        ], 
                    external_supplier_identifier = 'supplier-a', 
                    external_supplier_booking_code = 'external-booking-code-1', 
                    payment = trip_pay_payment.models.booking_contract_payment_details.BookingContractPaymentDetails(
                        acquirer_identifier = 'stripe-world', 
                        vendor = 'STRIPE', 
                        transaction_identifier = 'tx-1', 
                        customer_identifier = 'customer-1', 
                        charge_identifier = 'charge-1', 
                        status = 'INITIALIZED', 
                        agent_invoiced_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                        agent_invoice_identifier = 'invoice-1', 
                        redirect_url = '', 
                        fees = [
                            trip_pay_payment.models.fee.Fee(
                                identifier = 'ABC1234', 
                                fee = , 
                                type = 'ACQUIRING', 
                                description = '', )
                            ], 
                        vendor_specific = {
                            'key' : ''
                            }, ), 
                    cancelled = False, 
                    cancelled_on = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    canceller = 'SALES_CHANNEL', 
                    cancellation_type = 'DUPLICATE', 
                    canceller_user_identifier = '', 
                    cancel_reason = '', 
                    funds_processed = False, 
                    refunds = [
                        trip_pay_payment.models.refund.Refund(
                            identifier = 'refund-1', 
                            acquirer_refund_identifier = 'r-123456', 
                            requested_by_identifier = 'user-1', 
                            refund = , 
                            created = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                            description = 'Customer made a mistake', 
                            reason_type = 'DUPLICATE', 
                            cancel_on_refund = 'NONE', 
                            status_type = 'SUCCEEDED', 
                            request_type = 'BY_ADMIN', 
                            request_status = 'APPROVED', 
                            request_response = 'We have rejected your request. Your cancellation policy does not warrant a manual refund.', 
                            receipt_url = 'https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xSXcxazVBQ3F2UW9nN1IxKIPqo54GMgbHKn45YQY6LBbCZ62655YzamuWDVeWAaw7uApCrxewxjSsZX4C9Lef5jY9JeYFrOVx3IaI', 
                            retries = 0, 
                            allocation = 'EQUAL_DISTRIBUTION', )
                        ], 
                    payouts = [
                        trip_pay_payment.models.payout.Payout(
                            vendor = 'STRIPE', 
                            vendor_identifier = '', 
                            vendor_name = '', 
                            ledger_identifier = '', 
                            beneficiary_identifier = '', 
                            external_payee_identifier = 'wise-recipient-1', 
                            type = 'BANK_TRANSFER', 
                            entry = , 
                            quote = , 
                            created = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                            description = 'Card created successfully', 
                            payout_id = 'stripe-card-1', 
                            reference_code = 'ABC1234', 
                            reference_code_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                            status = 'SCHEDULED', )
                        ], 
                    source_currency = 'USD', 
                    display_currency = 'USD', 
                    supplier_currency = 'USD', 
                    internal_currency = 'USD', 
                    capture_currency = 'USD', 
                    source_amount = 0, 
                    display_amount = 0, 
                    supplier_amount = 0, 
                    internal_amount = 0, 
                    capture_amount = 0, 
                    source_amount_refund_modifier = 0, 
                    display_amount_refund_modifier = 0, 
                    supplier_amount_refund_modifier = 0, 
                    internal_amount_refund_modifier = 0, 
                    capture_amount_refund_modifier = 0, 
                    net_source_amount = 0, 
                    net_display_amount = 0, 
                    net_supplier_amount = 0, 
                    net_internal_amount = 0, 
                    net_capture_amount = 0, 
                    metadata = {
                        'key' : ''
                        }, 
                    net_commissionable_total_source_amount = , 
                    net_commissionable_total_capture_amount = , 
                    net_commissionable_total_display_amount = , 
                    net_commissionable_total_supplier_amount = , 
                    net_commissionable_total_internal_amount = , 
                    net_total_fees_and_commissions_source_amount = , 
                    net_total_fees_and_commissions_capture_amount = , 
                    net_total_fees_and_commissions_display_amount = , 
                    net_total_fees_and_commissions_supplier_amount = , 
                    net_total_fees_and_commissions_internal_amount = , 
                    net_total_fees_source_amount = , 
                    net_total_fees_capture_amount = , 
                    net_total_fees_display_amount = , 
                    net_total_fees_supplier_amount = , 
                    net_total_fees_internal_amount = , 
                    net_total_trip_pay_fee_source_amount = , 
                    net_total_trip_pay_fee_capture_amount = , 
                    net_total_trip_pay_fee_display_amount = , 
                    net_total_trip_pay_fee_supplier_amount = , 
                    net_total_trip_pay_fee_internal_amount = , 
                    net_total_sales_source_amount = , 
                    net_total_sales_capture_amount = , 
                    net_total_sales_display_amount = , 
                    net_total_sales_supplier_amount = , 
                    net_total_sales_internal_amount = , 
                    commissionable_total_source_amount = , 
                    commissionable_total_capture_amount = , 
                    commissionable_total_display_amount = , 
                    commissionable_total_supplier_amount = , 
                    commissionable_total_internal_amount = , 
                    total_fees_and_commissions_source_amount = , 
                    total_fees_and_commissions_capture_amount = , 
                    total_fees_and_commissions_display_amount = , 
                    total_fees_and_commissions_supplier_amount = , 
                    total_fees_and_commissions_internal_amount = , 
                    total_fees_source_amount = , 
                    total_fees_capture_amount = , 
                    total_fees_display_amount = , 
                    total_fees_supplier_amount = , 
                    total_fees_internal_amount = , 
                    total_trip_pay_fee_source_amount = , 
                    total_trip_pay_fee_capture_amount = , 
                    total_trip_pay_fee_display_amount = , 
                    total_trip_pay_fee_supplier_amount = , 
                    total_trip_pay_fee_internal_amount = , 
                    total_sales_source_amount = , 
                    total_sales_capture_amount = , 
                    total_sales_display_amount = , 
                    total_sales_supplier_amount = , 
                    total_sales_internal_amount = , 
                    funds_available_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), 
                    total_fees_in_percent_with_refund = 1.337, 
                    total_fees_in_percent = 1.337, 
                    total_trip_pay_fee_in_percent_with_refund = 1.337, 
                    total_trip_pay_fee_in_percent = 1.337, 
                    total_commissions_in_percent_with_refund = 1.337, 
                    total_commissions_in_percent = 1.337, 
                    total_fees_and_commissions_in_percent_with_refund = 1.337, 
                    total_fees_and_commissions_in_percent = 1.337, 
                    original_fees_in_percent = 1.337, 
                    original_commissions_in_percent = 1.337, 
                    net_total_customers_source_amount = , 
                    net_total_customers_capture_amount = , 
                    net_total_customers_display_amount = , 
                    net_total_customers_supplier_amount = , 
                    net_total_customers_internal_amount = , 
                    has_refunds = True, 
                    has_successful_refunds = True, 
                    has_pending_refunds = True, 
                    has_failed_refunds = True, 
                    platform_identifier = '', 
                    total_funds_grouped_by_beneficiary = [
                        trip_pay_payment.models.beneficiary.Beneficiary(
                            account_identifier = 'account-1', 
                            account_name = 'Account 1', 
                            account_email = 'account@one.com', 
                            account_url = 'https://some.url', 
                            type = 'COMMISSION', 
                            source_currency = 'USD', 
                            display_currency = 'USD', 
                            supplier_currency = 'USD', 
                            internal_currency = 'USD', 
                            capture_currency = 'USD', 
                            source_amount = 50, 
                            display_amount = 50, 
                            supplier_amount = 50, 
                            internal_amount = 50, 
                            capture_amount = 50, 
                            source_amount_refund_modifier = 5, 
                            display_amount_refund_modifier = 5, 
                            supplier_amount_refund_modifier = 5, 
                            internal_amount_refund_modifier = 5, 
                            capture_amount_refund_modifier = 5, 
                            net_source_amount = 0, 
                            net_display_amount = 0, 
                            net_supplier_amount = 0, 
                            net_internal_amount = 0, 
                            net_capture_amount = 0, 
                            reconciled = False, )
                        ], 
                    total_tokens_earned = 56, 
                    cancellable_by_traveler = True, 
                    cancellable_by_supplier_or_agent = True, 
                    cancellable_with_no_charges = True, 
                    cancellable_with_potential_charges = True, 
                    refunded = True, 
                    refundable = True, )
            )
        else:
            return ExternalBookingContract(
                mapping = trip_pay_payment.models.mapping.Mapping(
                    id = 'doc-1', 
                    created_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    last_update = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    version = 12, 
                    account_owner_identifier = 'principal-1', 
                    local_account_identifier = 'hotel-1', 
                    external_identifier = 'hotel-a', 
                    account_identifier = 'account-1', 
                    name = 'Sheraton Hua Hin', ),
                booking_contract = trip_pay_payment.models.booking_contract.BookingContract(
                    id = 'doc-1', 
                    created_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    last_update = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    version = 12, 
                    federated_organization_identifier = 'owner-1', 
                    federated_organization_name = 'Wink', 
                    user = trip_pay_payment.models.authenticated_user.AuthenticatedUser(
                        user_identifier = '', 
                        first_name = 'John', 
                        last_name = 'Smith', 
                        email = 'john.smith@email.com', 
                        full_name = 'John Smith', ), 
                    ip_address = '111.222.333.444', 
                    trace_id = 'T-123456', 
                    source_url = 'https://www.traveliko.com', 
                    identifier = 'unique-supplier-booking-contract-1', 
                    supplier_identifier = '', 
                    supplier_name = 'Supplier One', 
                    display_price_quote = trip_pay_payment.models.quote.Quote(
                        source = '', 
                        target = '', 
                        exchange_rate = 1.337, 
                        timestamp = 56, ), 
                    supplier_price_quote = trip_pay_payment.models.quote.Quote(
                        source = '', 
                        target = '', 
                        exchange_rate = 1.337, 
                        timestamp = 56, ), 
                    internal_price_quote = , 
                    capture_price_quote = , 
                    item_list = [
                        trip_pay_payment.models.booking_contract_item.BookingContractItem(
                            supplier_item_booking_code = 'TP-ASDFG1234', 
                            user = trip_pay_payment.models.guest_user.GuestUser(
                                user_identifier = '', 
                                first_name = 'John', 
                                last_name = 'Smith', 
                                email = 'john.smith@email.com', 
                                telephone = '+1 212 555 1212', 
                                profile = trip_pay_payment.models.profile.Profile(
                                    profile_identifier = '', 
                                    user_identifier = '', 
                                    share = True, 
                                    user = trip_pay_payment.models.profile_user.ProfileUser(
                                        first_name = 'Avid', 
                                        last_name = 'Travelman', 
                                        email = 'avid@travelman.com', 
                                        phone = '0123456789', 
                                        profile_picture_url = '', 
                                        full_name = 'John Smith', ), 
                                    personal = trip_pay_payment.models.personal.Personal(
                                        gender = 'MALE', 
                                        birth_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), 
                                        marital_status = 'ANNULLED', 
                                        child_quantity = 56, 
                                        citizenship = '', 
                                        address1 = '', 
                                        address2 = '', 
                                        city = '', 
                                        state = '', 
                                        postal_code = '', 
                                        country = '', 
                                        preferred_currency = 'USD', 
                                        language = '', 
                                        contact_person = [
                                            trip_pay_payment.models.contact.Contact(
                                                first_name = 'John', 
                                                last_name = 'Smith', 
                                                email = 'johnsmith@email.com', 
                                                secondary_email = 'johnsmith2@email.com', 
                                                phone_number = '+12125551212', 
                                                full_name = 'John Smith', 
                                                summary = 'John Smith (johnsmith@gmail.com / +12125551212)', )
                                            ], 
                                        phys_chall_name = [
                                            ''
                                            ], 
                                        pet_info = [
                                            trip_pay_payment.models.pet_info_dto.PetInfoDto(
                                                name = '', 
                                                type = '', )
                                            ], ), 
                                    preferences = trip_pay_payment.models.preferences.Preferences(
                                        property_location_pref = '', 
                                        property_type_pref = '', 
                                        hotel_chain_pref = '', 
                                        property_amenity_pref = [
                                            ''
                                            ], 
                                        recreation_srvc_pref = [
                                            ''
                                            ], 
                                        business_srvc_pref = [
                                            ''
                                            ], 
                                        security_feature_pref = [
                                            ''
                                            ], 
                                        phys_chal_feature_pref = [
                                            ''
                                            ], 
                                        smoking_allowed = True, 
                                        room_location_pref = '', 
                                        bed_type_pref = '', 
                                        food_srvc_pref = '', 
                                        room_amenity_pref = [
                                            ''
                                            ], 
                                        guest_type = '', 
                                        meal_pref = '', 
                                        cuisine_pref = '', 
                                        interest_pref = [
                                            ''
                                            ], 
                                        beverage_pref = [
                                            ''
                                            ], 
                                        food_pref = [
                                            ''
                                            ], 
                                        allergies = [
                                            ''
                                            ], 
                                        pets_pref = [
                                            ''
                                            ], ), ), 
                                full_name = 'John Smith', ), 
                            name_in_english = 'Deluxe King', 
                            description_in_english = 'This is the best deluxe king that money can buy.', 
                            itinerary = trip_pay_payment.models.simple_date_time_itinerary.SimpleDateTimeItinerary(
                                start_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                                end_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                                adults = 0, 
                                children = 0, 
                                hours = 56, 
                                guests = 56, 
                                nights = 56, ), 
                            pricing_type = 'PER_STAY', 
                            type = 'LODGING', 
                            beneficiary_list = [
                                trip_pay_payment.models.beneficiary.Beneficiary(
                                    account_identifier = 'account-1', 
                                    account_name = 'Account 1', 
                                    account_email = 'account@one.com', 
                                    account_url = 'https://some.url', 
                                    type = 'COMMISSION', 
                                    amount_due = trip_pay_payment.models.beneficiary_charge.BeneficiaryCharge(
                                        type = 'PERCENTAGE', 
                                        percent = 1.337, ), 
                                    source_currency = 'USD', 
                                    display_currency = 'USD', 
                                    supplier_currency = 'USD', 
                                    internal_currency = 'USD', 
                                    capture_currency = 'USD', 
                                    source_amount = 50, 
                                    display_amount = 50, 
                                    supplier_amount = 50, 
                                    internal_amount = 50, 
                                    capture_amount = 50, 
                                    source_amount_refund_modifier = 5, 
                                    display_amount_refund_modifier = 5, 
                                    supplier_amount_refund_modifier = 5, 
                                    internal_amount_refund_modifier = 5, 
                                    capture_amount_refund_modifier = 5, 
                                    pending_refunds = [
                                        trip_pay_payment.models.pending_refund.PendingRefund(
                                            refund_identifier = 'refund-1', 
                                            source_amount_refund_modifier = 5, 
                                            display_amount_refund_modifier = 5, 
                                            supplier_amount_refund_modifier = 5, 
                                            internal_amount_refund_modifier = 5, 
                                            capture_amount_refund_modifier = 5, )
                                        ], 
                                    net_source_amount = 0, 
                                    net_display_amount = 0, 
                                    net_supplier_amount = 0, 
                                    net_internal_amount = 0, 
                                    net_capture_amount = 0, 
                                    reconciled = False, 
                                    metadata = {
                                        'key' : ''
                                        }, )
                                ], 
                            payable = 'PREPAY', 
                            policy = trip_pay_payment.models.supplier_contract_item_policy.SupplierContractItemPolicy(
                                refundable = True, 
                                advance_cancellation_free_of_charge = 'UNTIL_EIGHTEEN_HUNDRED_HOURS_ON_DAY_OF_ARRIVAL', 
                                refundable_cancellation_charge = 'FIFTY_PERCENT', 
                                no_show_charge = 'SAME_AS_CANCELLATION_FEE', 
                                non_refundable_cancellation_charge = 'SEVENTY_PERCENT', 
                                non_refundable_deadline = 'SEVEN_DAYS_BEFORE_ARRIVAL', 
                                non_refundable_after_deadline_cancellation_charge = 'ONE_HUNDRED_PERCENT', 
                                external_identifier = 'policy-1', 
                                fully_refundable = True, 
                                partially_refundable = True, ), 
                            external_identifier = 'room-type-1', 
                            tokens_earned = 12, 
                            daily_rate_list = [
                                trip_pay_payment.models.daily_rate.DailyRate(
                                    date = 'Mon Aug 24 03:00:00 EEST 2020', 
                                    price = trip_pay_payment.models.custom_monetary_amount.CustomMonetaryAmount(
                                        amount = 1.337, 
                                        currency = '', ), 
                                    display_price = trip_pay_payment.models.custom_monetary_amount.CustomMonetaryAmount(
                                        amount = 1.337, 
                                        currency = '', ), 
                                    supplier_price = , 
                                    internal_price = , 
                                    capture_price = , )
                                ], 
                            cancelled = True, 
                            source_currency = 'USD', 
                            display_currency = 'USD', 
                            supplier_currency = 'USD', 
                            internal_currency = 'USD', 
                            capture_currency = 'USD', 
                            source_amount = 0, 
                            display_amount = 0, 
                            supplier_amount = 0, 
                            internal_amount = 0, 
                            capture_amount = 0, 
                            source_amount_refund_modifier = 0, 
                            display_amount_refund_modifier = 0, 
                            supplier_amount_refund_modifier = 0, 
                            internal_amount_refund_modifier = 0, 
                            capture_amount_refund_modifier = 0, 
                            net_source_amount = 0, 
                            net_display_amount = 0, 
                            net_supplier_amount = 0, 
                            net_internal_amount = 0, 
                            net_capture_amount = 0, 
                            metadata = {
                                'key' : ''
                                }, 
                            cancellable_by_traveler = True, 
                            cancellable_by_supplier_or_agent = True, 
                            cancellable_with_no_charges = True, 
                            cancellable_with_potential_charges = True, )
                        ], 
                    external_supplier_identifier = 'supplier-a', 
                    external_supplier_booking_code = 'external-booking-code-1', 
                    payment = trip_pay_payment.models.booking_contract_payment_details.BookingContractPaymentDetails(
                        acquirer_identifier = 'stripe-world', 
                        vendor = 'STRIPE', 
                        transaction_identifier = 'tx-1', 
                        customer_identifier = 'customer-1', 
                        charge_identifier = 'charge-1', 
                        status = 'INITIALIZED', 
                        agent_invoiced_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                        agent_invoice_identifier = 'invoice-1', 
                        redirect_url = '', 
                        fees = [
                            trip_pay_payment.models.fee.Fee(
                                identifier = 'ABC1234', 
                                fee = , 
                                type = 'ACQUIRING', 
                                description = '', )
                            ], 
                        vendor_specific = {
                            'key' : ''
                            }, ), 
                    cancelled = False, 
                    cancelled_on = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                    canceller = 'SALES_CHANNEL', 
                    cancellation_type = 'DUPLICATE', 
                    canceller_user_identifier = '', 
                    cancel_reason = '', 
                    funds_processed = False, 
                    refunds = [
                        trip_pay_payment.models.refund.Refund(
                            identifier = 'refund-1', 
                            acquirer_refund_identifier = 'r-123456', 
                            requested_by_identifier = 'user-1', 
                            refund = , 
                            created = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                            description = 'Customer made a mistake', 
                            reason_type = 'DUPLICATE', 
                            cancel_on_refund = 'NONE', 
                            status_type = 'SUCCEEDED', 
                            request_type = 'BY_ADMIN', 
                            request_status = 'APPROVED', 
                            request_response = 'We have rejected your request. Your cancellation policy does not warrant a manual refund.', 
                            receipt_url = 'https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xSXcxazVBQ3F2UW9nN1IxKIPqo54GMgbHKn45YQY6LBbCZ62655YzamuWDVeWAaw7uApCrxewxjSsZX4C9Lef5jY9JeYFrOVx3IaI', 
                            retries = 0, 
                            allocation = 'EQUAL_DISTRIBUTION', )
                        ], 
                    payouts = [
                        trip_pay_payment.models.payout.Payout(
                            vendor = 'STRIPE', 
                            vendor_identifier = '', 
                            vendor_name = '', 
                            ledger_identifier = '', 
                            beneficiary_identifier = '', 
                            external_payee_identifier = 'wise-recipient-1', 
                            type = 'BANK_TRANSFER', 
                            entry = , 
                            quote = , 
                            created = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                            description = 'Card created successfully', 
                            payout_id = 'stripe-card-1', 
                            reference_code = 'ABC1234', 
                            reference_code_date = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), 
                            status = 'SCHEDULED', )
                        ], 
                    source_currency = 'USD', 
                    display_currency = 'USD', 
                    supplier_currency = 'USD', 
                    internal_currency = 'USD', 
                    capture_currency = 'USD', 
                    source_amount = 0, 
                    display_amount = 0, 
                    supplier_amount = 0, 
                    internal_amount = 0, 
                    capture_amount = 0, 
                    source_amount_refund_modifier = 0, 
                    display_amount_refund_modifier = 0, 
                    supplier_amount_refund_modifier = 0, 
                    internal_amount_refund_modifier = 0, 
                    capture_amount_refund_modifier = 0, 
                    net_source_amount = 0, 
                    net_display_amount = 0, 
                    net_supplier_amount = 0, 
                    net_internal_amount = 0, 
                    net_capture_amount = 0, 
                    metadata = {
                        'key' : ''
                        }, 
                    net_commissionable_total_source_amount = , 
                    net_commissionable_total_capture_amount = , 
                    net_commissionable_total_display_amount = , 
                    net_commissionable_total_supplier_amount = , 
                    net_commissionable_total_internal_amount = , 
                    net_total_fees_and_commissions_source_amount = , 
                    net_total_fees_and_commissions_capture_amount = , 
                    net_total_fees_and_commissions_display_amount = , 
                    net_total_fees_and_commissions_supplier_amount = , 
                    net_total_fees_and_commissions_internal_amount = , 
                    net_total_fees_source_amount = , 
                    net_total_fees_capture_amount = , 
                    net_total_fees_display_amount = , 
                    net_total_fees_supplier_amount = , 
                    net_total_fees_internal_amount = , 
                    net_total_trip_pay_fee_source_amount = , 
                    net_total_trip_pay_fee_capture_amount = , 
                    net_total_trip_pay_fee_display_amount = , 
                    net_total_trip_pay_fee_supplier_amount = , 
                    net_total_trip_pay_fee_internal_amount = , 
                    net_total_sales_source_amount = , 
                    net_total_sales_capture_amount = , 
                    net_total_sales_display_amount = , 
                    net_total_sales_supplier_amount = , 
                    net_total_sales_internal_amount = , 
                    commissionable_total_source_amount = , 
                    commissionable_total_capture_amount = , 
                    commissionable_total_display_amount = , 
                    commissionable_total_supplier_amount = , 
                    commissionable_total_internal_amount = , 
                    total_fees_and_commissions_source_amount = , 
                    total_fees_and_commissions_capture_amount = , 
                    total_fees_and_commissions_display_amount = , 
                    total_fees_and_commissions_supplier_amount = , 
                    total_fees_and_commissions_internal_amount = , 
                    total_fees_source_amount = , 
                    total_fees_capture_amount = , 
                    total_fees_display_amount = , 
                    total_fees_supplier_amount = , 
                    total_fees_internal_amount = , 
                    total_trip_pay_fee_source_amount = , 
                    total_trip_pay_fee_capture_amount = , 
                    total_trip_pay_fee_display_amount = , 
                    total_trip_pay_fee_supplier_amount = , 
                    total_trip_pay_fee_internal_amount = , 
                    total_sales_source_amount = , 
                    total_sales_capture_amount = , 
                    total_sales_display_amount = , 
                    total_sales_supplier_amount = , 
                    total_sales_internal_amount = , 
                    funds_available_date = datetime.datetime.strptime('1975-12-30', '%Y-%m-%d').date(), 
                    total_fees_in_percent_with_refund = 1.337, 
                    total_fees_in_percent = 1.337, 
                    total_trip_pay_fee_in_percent_with_refund = 1.337, 
                    total_trip_pay_fee_in_percent = 1.337, 
                    total_commissions_in_percent_with_refund = 1.337, 
                    total_commissions_in_percent = 1.337, 
                    total_fees_and_commissions_in_percent_with_refund = 1.337, 
                    total_fees_and_commissions_in_percent = 1.337, 
                    original_fees_in_percent = 1.337, 
                    original_commissions_in_percent = 1.337, 
                    net_total_customers_source_amount = , 
                    net_total_customers_capture_amount = , 
                    net_total_customers_display_amount = , 
                    net_total_customers_supplier_amount = , 
                    net_total_customers_internal_amount = , 
                    has_refunds = True, 
                    has_successful_refunds = True, 
                    has_pending_refunds = True, 
                    has_failed_refunds = True, 
                    platform_identifier = '', 
                    total_funds_grouped_by_beneficiary = [
                        trip_pay_payment.models.beneficiary.Beneficiary(
                            account_identifier = 'account-1', 
                            account_name = 'Account 1', 
                            account_email = 'account@one.com', 
                            account_url = 'https://some.url', 
                            type = 'COMMISSION', 
                            source_currency = 'USD', 
                            display_currency = 'USD', 
                            supplier_currency = 'USD', 
                            internal_currency = 'USD', 
                            capture_currency = 'USD', 
                            source_amount = 50, 
                            display_amount = 50, 
                            supplier_amount = 50, 
                            internal_amount = 50, 
                            capture_amount = 50, 
                            source_amount_refund_modifier = 5, 
                            display_amount_refund_modifier = 5, 
                            supplier_amount_refund_modifier = 5, 
                            internal_amount_refund_modifier = 5, 
                            capture_amount_refund_modifier = 5, 
                            net_source_amount = 0, 
                            net_display_amount = 0, 
                            net_supplier_amount = 0, 
                            net_internal_amount = 0, 
                            net_capture_amount = 0, 
                            reconciled = False, )
                        ], 
                    total_tokens_earned = 56, 
                    cancellable_by_traveler = True, 
                    cancellable_by_supplier_or_agent = True, 
                    cancellable_with_no_charges = True, 
                    cancellable_with_potential_charges = True, 
                    refunded = True, 
                    refundable = True, ),
        )
        """

    def testExternalBookingContract(self):
        """Test ExternalBookingContract"""
        # inst_req_only = self.make_instance(include_optional=False)
        # inst_req_and_optional = self.make_instance(include_optional=True)

if __name__ == '__main__':
    unittest.main()
