< Return to Summary | File Generated: Tue Apr 16 2024 11:48:39 GMT+0000 (Coordinated Universal Time)

no-broker >> customer-not-included-nobroker-mode (OpenBookingSimpleFlow >> IndividualFacilityUseSlot)

Booking Flow: OpenBookingSimpleFlow

Opportunity Type: IndividualFacilityUseSlot

Feature: Broker Role / NoBroker mode (Implemented)

Test: Customer not included in Order in NoBroker mode

Request should fail if customer is not included in Order in NoBroker mode for C2 or B requests.

Running only this test

npm start -- --runInBand test/features/broker-role/no-broker/implemented/customer-not-included-nobroker-mode-test.js

Is this test failing?

The OpenActive Reference Implementation test result for this test can be used as a reference to help with debugging.


⚠️ 20 passed with 0 failures, 140 warnings and 0 suggestions


✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> Fetch Opportunities

Local Microservice Test Interface for OrderItem 0 Request

POST http://localhost:3000/test-interface/datasets/uat-ci/opportunities

{
  "@type": "Slot",
  "facilityUse": {
    "@type": "IndividualFacilityUse",
    "provider": {
      "@type": "Organization",
      "@id": "https://localhost:5001/api/identifiers/sellers/1"
    }
  },
  "@context": [
    "https://openactive.io/",
    "https://openactive.io/test-interface"
  ],
  "test:testOpportunityCriteria": "https://openactive.io/test-interface#TestOpportunityBookable",
  "test:testOpenBookingFlow": "https://openactive.io/test-interface#OpenBookingSimpleFlow"
}

Response status code: 200 OK. Responded in 6.045093ms.

{
  "@context": "https://openactive.io/",
  "@type": "Slot",
  "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322"
}

Opportunity Feed extract for OrderItem 0 Request

GET http://localhost:3000/opportunity/https%3A%2F%2Flocalhost%3A5001%2Fapi%2Fidentifiers%2Ffacility-uses%2F233%2Findividual-facility-uses%2F1%2Fslots%2F2322?useCacheIfAvailable=true


Response status code: 200 OK. Responded in 5.439538ms.

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322",
    "identifier": 2322,
    "duration": "PT5H24M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1",
      "name": "Court 1 at Concrete Squash Court",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233",
        "identifier": 233,
        "name": "Concrete Squash Court",
        "facilityType": [
          {
            "@type": "Concept",
            "@id": "https://openactive.io/facility-types#a1f82b7a-1258-4d9a-8dc5-bfc2ae961651",
            "inScheme": "https://openactive.io/facility-types",
            "prefLabel": "Squash Court"
          }
        ],
        "location": {
          "@type": "Place",
          "@id": "https://example.com/place/3",
          "identifier": 3,
          "name": "Stroll & Stretch",
          "description": "Casual Calisthenics in the Heart of Commerce. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
          "address": {
            "@type": "PostalAddress",
            "addressCountry": "GB",
            "addressLocality": "Oxford",
            "addressRegion": "Oxfordshire",
            "postalCode": "OX1 1UU",
            "streetAddress": "Norfolk Street"
          },
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.749826,
            "longitude": -1.261492
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/2/28/Westfield_Garden_State_Plaza_-_panoramio.jpg"
            }
          ],
          "openingHoursSpecification": [
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Sunday"
              ],
              "opens": "09:00"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Monday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Tuesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Wednesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Thursday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Friday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Saturday"
              ],
              "opens": "09:00"
            }
          ],
          "telephone": "01865 000003",
          "url": "https://en.wikipedia.org/wiki/Shopping_center"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "sameAs": [
            "https://socialmedia.com/AcmeFitnessLtd"
          ],
          "taxMode": "https://openactive.io/TaxGross",
          "telephone": "04133 819386",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ],
          "url": "http://lonzo.biz"
        },
        "url": "https://www.example.com/facilities/233"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 6.16,
        "priceCurrency": "GBP"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 6.16,
        "priceCurrency": "GBP"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 6.16,
        "priceCurrency": "GBP"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 6.16,
        "priceCurrency": "GBP"
      }
    ],
    "remainingUses": 1,
    "startDate": "2024-04-20T08:59:46+00:00",
    "endDate": "2024-04-20T14:23:46+00:00"
  }
}

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> Fetch Opportunities >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> C1

C1 Request

PUT https://localhost:5001/api/openbooking/order-quote-templates/93e32914-465d-4c42-9d08-1fe7c1ae0a46

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "brokerRole": "https://openactive.io/NoBroker",
  "seller": "https://localhost:5001/api/identifiers/sellers/1",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

Response status code: 200 OK. Responded in 74.677953ms.

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/93e32914-465d-4c42-9d08-1fe7c1ae0a46",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-04-16T11:53:50+00:00"
  },
  "orderRequiresApproval": false,
  "bookingService": {
    "@type": "BookingService",
    "name": "Acme booking system",
    "termsOfService": [
      {
        "@type": "PrivacyPolicy",
        "name": "Privacy Policy",
        "requiresExplicitConsent": false,
        "url": "https://example.com/privacy.html"
      }
    ],
    "url": "https://example.com"
  },
  "broker": {
    "@type": "Organization"
  },
  "brokerRole": "https://openactive.io/NoBroker",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 6.16,
        "priceCurrency": "GBP"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/233",
            "name": "Concrete Squash Court",
            "facilityType": [
              {
                "@type": "Concept",
                "@id": "https://openactive.io/facility-types#a1f82b7a-1258-4d9a-8dc5-bfc2ae961651",
                "inScheme": "https://openactive.io/facility-types",
                "prefLabel": "Squash Court"
              }
            ],
            "location": {
              "@type": "Place",
              "@id": "https://example.com/place/3",
              "identifier": 3,
              "name": "Stroll & Stretch",
              "description": "Casual Calisthenics in the Heart of Commerce. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
              "address": {
                "@type": "PostalAddress",
                "addressCountry": "GB",
                "addressLocality": "Oxford",
                "addressRegion": "Oxfordshire",
                "postalCode": "OX1 1UU",
                "streetAddress": "Norfolk Street"
              },
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.749826,
                "longitude": -1.261492
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/2/28/Westfield_Garden_State_Plaza_-_panoramio.jpg"
                }
              ],
              "openingHoursSpecification": [
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Sunday"
                  ],
                  "opens": "09:00"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Monday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Tuesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Wednesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Thursday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Friday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Saturday"
                  ],
                  "opens": "09:00"
                }
              ],
              "telephone": "01865 000003",
              "url": "https://en.wikipedia.org/wiki/Shopping_center"
            },
            "url": "https://example.com/events/233"
          },
          "name": "Court 1 at Concrete Squash Court"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-04-20T08:59:46+00:00",
        "endDate": "2024-04-20T14:23:46+00:00"
      },
      "position": 0,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 1.232,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  },
  "seller": {
    "@type": "Organization",
    "@id": "https://localhost:5001/api/identifiers/sellers/1",
    "name": "Acme Fitness Ltd",
    "address": {
      "@type": "PostalAddress",
      "addressCountry": "GB",
      "addressLocality": "Another town",
      "addressRegion": "Oxfordshire",
      "postalCode": "OX1 1AA",
      "streetAddress": "1 Hidden Gem"
    },
    "isOpenBookingAllowed": true,
    "legalName": "Acme Fitness Ltd",
    "taxMode": "https://openactive.io/TaxGross",
    "termsOfService": [
      {
        "@type": "PrivacyPolicy",
        "name": "Privacy Policy",
        "requiresExplicitConsent": false,
        "url": "https://example.com/privacy.html"
      }
    ]
  },
  "totalPaymentDue": {
    "@type": "PriceSpecification",
    "openBookingPrepayment": "https://openactive.io/Required",
    "price": 6.16,
    "priceCurrency": "GBP"
  },
  "totalPaymentTax": [
    {
      "@type": "TaxChargeSpecification",
      "name": "VAT at 20%",
      "price": 1.232,
      "priceCurrency": "GBP",
      "rate": 0.2
    }
  ]
}

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> C1 >> validation of C1

Specs

Validations

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> Assert Opportunity Capacity (after C1)

Opportunity Feed extract for OrderItem 0 Request

GET http://localhost:3000/opportunity/https%3A%2F%2Flocalhost%3A5001%2Fapi%2Fidentifiers%2Ffacility-uses%2F233%2Findividual-facility-uses%2F1%2Fslots%2F2322?useCacheIfAvailable=true&expectedCapacity=0


Response status code: 200 OK. Responded in 469.092837ms.

{
  "state": "updated",
  "id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322",
  "modified": "1713268132048",
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322",
    "identifier": 2322,
    "duration": "PT5H24M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1",
      "name": "Court 1 at Concrete Squash Court",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233",
        "identifier": 233,
        "name": "Concrete Squash Court",
        "facilityType": [
          {
            "@type": "Concept",
            "@id": "https://openactive.io/facility-types#a1f82b7a-1258-4d9a-8dc5-bfc2ae961651",
            "inScheme": "https://openactive.io/facility-types",
            "prefLabel": "Squash Court"
          }
        ],
        "location": {
          "@type": "Place",
          "@id": "https://example.com/place/3",
          "identifier": 3,
          "name": "Stroll & Stretch",
          "description": "Casual Calisthenics in the Heart of Commerce. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
          "address": {
            "@type": "PostalAddress",
            "addressCountry": "GB",
            "addressLocality": "Oxford",
            "addressRegion": "Oxfordshire",
            "postalCode": "OX1 1UU",
            "streetAddress": "Norfolk Street"
          },
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.749826,
            "longitude": -1.261492
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/2/28/Westfield_Garden_State_Plaza_-_panoramio.jpg"
            }
          ],
          "openingHoursSpecification": [
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Sunday"
              ],
              "opens": "09:00"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Monday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Tuesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Wednesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Thursday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Friday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Saturday"
              ],
              "opens": "09:00"
            }
          ],
          "telephone": "01865 000003",
          "url": "https://en.wikipedia.org/wiki/Shopping_center"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "sameAs": [
            "https://socialmedia.com/AcmeFitnessLtd"
          ],
          "taxMode": "https://openactive.io/TaxGross",
          "telephone": "04133 819386",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ],
          "url": "http://lonzo.biz"
        },
        "url": "https://www.example.com/facilities/233"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 6.16,
        "priceCurrency": "GBP"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 6.16,
        "priceCurrency": "GBP"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 6.16,
        "priceCurrency": "GBP"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 6.16,
        "priceCurrency": "GBP"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-04-20T08:59:46+00:00",
    "endDate": "2024-04-20T14:23:46+00:00"
  }
}

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> Assert Opportunity Capacity (after C1) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

❔ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> C2

C2 Request

PUT https://localhost:5001/api/openbooking/order-quotes/93e32914-465d-4c42-9d08-1fe7c1ae0a46

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "brokerRole": "https://openactive.io/NoBroker",
  "seller": "https://localhost:5001/api/identifiers/sellers/1",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/233/individual-facility-uses/1/slots/2322"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

Response status code: 400 Bad Request. Responded in 14.102949ms.

{
  "@context": "https://openactive.io/",
  "@type": "IncompleteCustomerDetailsError",
  "name": "The 'email' address of the Customer is not supplied within a 'Person' object; or the 'customer' property supplied is not a valid 'Person' or 'Organization' object.",
  "statusCode": 400
}

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> C2 >> validation of C2

Specs

Validations

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> Assert Opportunity Capacity (after C2)

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at C2 >> Assert Opportunity Capacity (after C2) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> Fetch Opportunities

Local Microservice Test Interface for OrderItem 0 Request

POST http://localhost:3000/test-interface/datasets/uat-ci/opportunities

{
  "@type": "Slot",
  "facilityUse": {
    "@type": "IndividualFacilityUse",
    "provider": {
      "@type": "Organization",
      "@id": "https://localhost:5001/api/identifiers/sellers/1"
    }
  },
  "@context": [
    "https://openactive.io/",
    "https://openactive.io/test-interface"
  ],
  "test:testOpportunityCriteria": "https://openactive.io/test-interface#TestOpportunityBookable",
  "test:testOpenBookingFlow": "https://openactive.io/test-interface#OpenBookingSimpleFlow"
}

Response status code: 200 OK. Responded in 7.214395ms.

{
  "@context": "https://openactive.io/",
  "@type": "Slot",
  "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261"
}

Opportunity Feed extract for OrderItem 0 Request

GET http://localhost:3000/opportunity/https%3A%2F%2Flocalhost%3A5001%2Fapi%2Fidentifiers%2Ffacility-uses%2F427%2Findividual-facility-uses%2F0%2Fslots%2F4261?useCacheIfAvailable=true


Response status code: 200 OK. Responded in 6.025206ms.

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261",
    "identifier": 4261,
    "duration": "PT5H35M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0",
      "name": "Court 0 at Rubber Cricket Net",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427",
        "identifier": 427,
        "name": "GOLDEN: Rubber Cricket Net",
        "facilityType": [
          {
            "@type": "Concept",
            "@id": "https://openactive.io/facility-types#2d333183-6a6d-4a95-aad4-c5699f705b14",
            "inScheme": "https://openactive.io/facility-types",
            "prefLabel": "Cricket Net"
          }
        ],
        "location": {
          "@type": "Place",
          "@id": "https://example.com/place/1",
          "identifier": 1,
          "name": "Post-ercise Plaza",
          "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
          "address": {
            "@type": "PostalAddress",
            "addressCountry": "GB",
            "addressLocality": "Oxford",
            "addressRegion": "Oxfordshire",
            "postalCode": "OX1 1AA",
            "streetAddress": "Kings Mead House"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": true
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": true
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": true
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": false
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": false
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": false
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7502,
            "longitude": -1.2674
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
            }
          ],
          "openingHoursSpecification": [
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Sunday"
              ],
              "opens": "09:00"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Monday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Tuesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Wednesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Thursday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Friday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Saturday"
              ],
              "opens": "09:00"
            }
          ],
          "telephone": "01865 000001",
          "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "sameAs": [
            "https://socialmedia.com/AcmeFitnessLtd"
          ],
          "taxMode": "https://openactive.io/TaxGross",
          "telephone": "09726 878816",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ],
          "url": "http://darwin.net"
        },
        "url": "https://www.example.com/facilities/427"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      }
    ],
    "remainingUses": 1,
    "startDate": "2024-04-24T02:28:46+00:00",
    "endDate": "2024-04-24T08:03:46+00:00"
  }
}

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> Fetch Opportunities >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> C1

C1 Request

PUT https://localhost:5001/api/openbooking/order-quote-templates/eaf2e85a-59ce-40a2-95ed-e981b52a0807

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "brokerRole": "https://openactive.io/NoBroker",
  "seller": "https://localhost:5001/api/identifiers/sellers/1",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

Response status code: 200 OK. Responded in 49.93893ms.

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/eaf2e85a-59ce-40a2-95ed-e981b52a0807",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-04-16T11:53:51+00:00"
  },
  "orderRequiresApproval": false,
  "bookingService": {
    "@type": "BookingService",
    "name": "Acme booking system",
    "termsOfService": [
      {
        "@type": "PrivacyPolicy",
        "name": "Privacy Policy",
        "requiresExplicitConsent": false,
        "url": "https://example.com/privacy.html"
      }
    ],
    "url": "https://example.com"
  },
  "broker": {
    "@type": "Organization"
  },
  "brokerRole": "https://openactive.io/NoBroker",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/427",
            "name": "Rubber Cricket Net",
            "facilityType": [
              {
                "@type": "Concept",
                "@id": "https://openactive.io/facility-types#a1f82b7a-1258-4d9a-8dc5-bfc2ae961651",
                "inScheme": "https://openactive.io/facility-types",
                "prefLabel": "Squash Court"
              }
            ],
            "location": {
              "@type": "Place",
              "@id": "https://example.com/place/1",
              "identifier": 1,
              "name": "Post-ercise Plaza",
              "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
              "address": {
                "@type": "PostalAddress",
                "addressCountry": "GB",
                "addressLocality": "Oxford",
                "addressRegion": "Oxfordshire",
                "postalCode": "OX1 1AA",
                "streetAddress": "Kings Mead House"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": true
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": true
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": true
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": false
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": false
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": false
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7502,
                "longitude": -1.2674
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
                }
              ],
              "openingHoursSpecification": [
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Sunday"
                  ],
                  "opens": "09:00"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Monday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Tuesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Wednesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Thursday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Friday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Saturday"
                  ],
                  "opens": "09:00"
                }
              ],
              "telephone": "01865 000001",
              "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
            },
            "url": "https://example.com/events/427"
          },
          "name": "Court 0 at Rubber Cricket Net"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-04-24T02:28:46+00:00",
        "endDate": "2024-04-24T08:03:46+00:00"
      },
      "position": 0,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 1.44,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  },
  "seller": {
    "@type": "Organization",
    "@id": "https://localhost:5001/api/identifiers/sellers/1",
    "name": "Acme Fitness Ltd",
    "address": {
      "@type": "PostalAddress",
      "addressCountry": "GB",
      "addressLocality": "Another town",
      "addressRegion": "Oxfordshire",
      "postalCode": "OX1 1AA",
      "streetAddress": "1 Hidden Gem"
    },
    "isOpenBookingAllowed": true,
    "legalName": "Acme Fitness Ltd",
    "taxMode": "https://openactive.io/TaxGross",
    "termsOfService": [
      {
        "@type": "PrivacyPolicy",
        "name": "Privacy Policy",
        "requiresExplicitConsent": false,
        "url": "https://example.com/privacy.html"
      }
    ]
  },
  "totalPaymentDue": {
    "@type": "PriceSpecification",
    "openBookingPrepayment": "https://openactive.io/Required",
    "price": 7.2,
    "priceCurrency": "GBP"
  },
  "totalPaymentTax": [
    {
      "@type": "TaxChargeSpecification",
      "name": "VAT at 20%",
      "price": 1.44,
      "priceCurrency": "GBP",
      "rate": 0.2
    }
  ]
}

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> C1 >> validation of C1

Specs

Validations

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> Assert Opportunity Capacity (after C1)

Opportunity Feed extract for OrderItem 0 Request

GET http://localhost:3000/opportunity/https%3A%2F%2Flocalhost%3A5001%2Fapi%2Fidentifiers%2Ffacility-uses%2F427%2Findividual-facility-uses%2F0%2Fslots%2F4261?useCacheIfAvailable=true&expectedCapacity=0


Response status code: 200 OK. Responded in 822.745493ms.

{
  "state": "updated",
  "id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261",
  "modified": "1713268133364",
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261",
    "identifier": 4261,
    "duration": "PT5H35M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0",
      "name": "Court 0 at Rubber Cricket Net",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427",
        "identifier": 427,
        "name": "GOLDEN: Rubber Cricket Net",
        "facilityType": [
          {
            "@type": "Concept",
            "@id": "https://openactive.io/facility-types#2d333183-6a6d-4a95-aad4-c5699f705b14",
            "inScheme": "https://openactive.io/facility-types",
            "prefLabel": "Cricket Net"
          }
        ],
        "location": {
          "@type": "Place",
          "@id": "https://example.com/place/1",
          "identifier": 1,
          "name": "Post-ercise Plaza",
          "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
          "address": {
            "@type": "PostalAddress",
            "addressCountry": "GB",
            "addressLocality": "Oxford",
            "addressRegion": "Oxfordshire",
            "postalCode": "OX1 1AA",
            "streetAddress": "Kings Mead House"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": true
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": true
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": true
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": false
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": false
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": false
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7502,
            "longitude": -1.2674
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
            }
          ],
          "openingHoursSpecification": [
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Sunday"
              ],
              "opens": "09:00"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Monday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Tuesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Wednesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Thursday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Friday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Saturday"
              ],
              "opens": "09:00"
            }
          ],
          "telephone": "01865 000001",
          "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "sameAs": [
            "https://socialmedia.com/AcmeFitnessLtd"
          ],
          "taxMode": "https://openactive.io/TaxGross",
          "telephone": "09726 878816",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ],
          "url": "http://darwin.net"
        },
        "url": "https://www.example.com/facilities/427"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-04-24T02:28:46+00:00",
    "endDate": "2024-04-24T08:03:46+00:00"
  }
}

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> Assert Opportunity Capacity (after C1) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> C2

C2 Request

PUT https://localhost:5001/api/openbooking/order-quotes/eaf2e85a-59ce-40a2-95ed-e981b52a0807

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "brokerRole": "https://openactive.io/NoBroker",
  "seller": "https://localhost:5001/api/identifiers/sellers/1",
  "customer": {
    "@type": "Person",
    "email": "[email protected]",
    "telephone": "656.936.8213 x1176",
    "familyName": "Ardella",
    "identifier": "1e660f24-2867-4262-ada8-011ac59aeed2"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

Response status code: 200 OK. Responded in 50.168064ms.

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/eaf2e85a-59ce-40a2-95ed-e981b52a0807",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-04-16T11:53:52+00:00"
  },
  "orderRequiresApproval": false,
  "bookingService": {
    "@type": "BookingService",
    "name": "Acme booking system",
    "termsOfService": [
      {
        "@type": "PrivacyPolicy",
        "name": "Privacy Policy",
        "requiresExplicitConsent": false,
        "url": "https://example.com/privacy.html"
      }
    ],
    "url": "https://example.com"
  },
  "broker": {
    "@type": "Organization"
  },
  "brokerRole": "https://openactive.io/NoBroker",
  "customer": {
    "@type": "Person",
    "identifier": "1e660f24-2867-4262-ada8-011ac59aeed2",
    "email": "[email protected]",
    "familyName": "Ardella",
    "telephone": "656.936.8213 x1176"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/427",
            "name": "Rubber Cricket Net",
            "facilityType": [
              {
                "@type": "Concept",
                "@id": "https://openactive.io/facility-types#a1f82b7a-1258-4d9a-8dc5-bfc2ae961651",
                "inScheme": "https://openactive.io/facility-types",
                "prefLabel": "Squash Court"
              }
            ],
            "location": {
              "@type": "Place",
              "@id": "https://example.com/place/1",
              "identifier": 1,
              "name": "Post-ercise Plaza",
              "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
              "address": {
                "@type": "PostalAddress",
                "addressCountry": "GB",
                "addressLocality": "Oxford",
                "addressRegion": "Oxfordshire",
                "postalCode": "OX1 1AA",
                "streetAddress": "Kings Mead House"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": true
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": true
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": true
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": false
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": false
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": false
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7502,
                "longitude": -1.2674
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
                }
              ],
              "openingHoursSpecification": [
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Sunday"
                  ],
                  "opens": "09:00"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Monday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Tuesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Wednesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Thursday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Friday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Saturday"
                  ],
                  "opens": "09:00"
                }
              ],
              "telephone": "01865 000001",
              "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
            },
            "url": "https://example.com/events/427"
          },
          "name": "Court 0 at Rubber Cricket Net"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-04-24T02:28:46+00:00",
        "endDate": "2024-04-24T08:03:46+00:00"
      },
      "position": 0,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 1.44,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  },
  "seller": {
    "@type": "Organization",
    "@id": "https://localhost:5001/api/identifiers/sellers/1",
    "name": "Acme Fitness Ltd",
    "address": {
      "@type": "PostalAddress",
      "addressCountry": "GB",
      "addressLocality": "Another town",
      "addressRegion": "Oxfordshire",
      "postalCode": "OX1 1AA",
      "streetAddress": "1 Hidden Gem"
    },
    "isOpenBookingAllowed": true,
    "legalName": "Acme Fitness Ltd",
    "taxMode": "https://openactive.io/TaxGross",
    "termsOfService": [
      {
        "@type": "PrivacyPolicy",
        "name": "Privacy Policy",
        "requiresExplicitConsent": false,
        "url": "https://example.com/privacy.html"
      }
    ]
  },
  "totalPaymentDue": {
    "@type": "PriceSpecification",
    "openBookingPrepayment": "https://openactive.io/Required",
    "price": 7.2,
    "priceCurrency": "GBP"
  },
  "totalPaymentTax": [
    {
      "@type": "TaxChargeSpecification",
      "name": "VAT at 20%",
      "price": 1.44,
      "priceCurrency": "GBP",
      "rate": 0.2
    }
  ]
}

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> C2 >> validation of C2

Specs

Validations

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> Assert Opportunity Capacity (after C2)

Opportunity Feed extract for OrderItem 0 Request

GET http://localhost:3000/opportunity/https%3A%2F%2Flocalhost%3A5001%2Fapi%2Fidentifiers%2Ffacility-uses%2F427%2Findividual-facility-uses%2F0%2Fslots%2F4261?useCacheIfAvailable=true&expectedCapacity=0


Response status code: 200 OK. Responded in 6.091591ms.

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261",
    "identifier": 4261,
    "duration": "PT5H35M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0",
      "name": "Court 0 at Rubber Cricket Net",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427",
        "identifier": 427,
        "name": "GOLDEN: Rubber Cricket Net",
        "facilityType": [
          {
            "@type": "Concept",
            "@id": "https://openactive.io/facility-types#2d333183-6a6d-4a95-aad4-c5699f705b14",
            "inScheme": "https://openactive.io/facility-types",
            "prefLabel": "Cricket Net"
          }
        ],
        "location": {
          "@type": "Place",
          "@id": "https://example.com/place/1",
          "identifier": 1,
          "name": "Post-ercise Plaza",
          "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
          "address": {
            "@type": "PostalAddress",
            "addressCountry": "GB",
            "addressLocality": "Oxford",
            "addressRegion": "Oxfordshire",
            "postalCode": "OX1 1AA",
            "streetAddress": "Kings Mead House"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": true
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": true
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": true
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": false
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": false
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": false
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7502,
            "longitude": -1.2674
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
            }
          ],
          "openingHoursSpecification": [
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Sunday"
              ],
              "opens": "09:00"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Monday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Tuesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Wednesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Thursday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Friday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Saturday"
              ],
              "opens": "09:00"
            }
          ],
          "telephone": "01865 000001",
          "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "sameAs": [
            "https://socialmedia.com/AcmeFitnessLtd"
          ],
          "taxMode": "https://openactive.io/TaxGross",
          "telephone": "09726 878816",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ],
          "url": "http://darwin.net"
        },
        "url": "https://www.example.com/facilities/427"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": false,
        "price": 7.2,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P13DT11H43M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-04-24T02:28:46+00:00",
    "endDate": "2024-04-24T08:03:46+00:00"
  }
}

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> Assert Opportunity Capacity (after C2) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> B

B Request

PUT https://localhost:5001/api/openbooking/orders/eaf2e85a-59ce-40a2-95ed-e981b52a0807

{
  "@context": "https://openactive.io/",
  "@type": "Order",
  "brokerRole": "https://openactive.io/NoBroker",
  "seller": "https://localhost:5001/api/identifiers/sellers/1",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/427/individual-facility-uses/0/slots/4261"
    }
  ],
  "totalPaymentDue": {
    "@type": "PriceSpecification",
    "price": 7.2,
    "priceCurrency": "GBP"
  },
  "payment": {
    "@type": "Payment",
    "identifier": "PEzKhr3VZh",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

Response status code: 400 Bad Request. Responded in 14.146462ms.

{
  "@context": "https://openactive.io/",
  "@type": "IncompleteCustomerDetailsError",
  "name": "The 'email' address of the Customer is not supplied within a 'Person' object; or the 'customer' property supplied is not a valid 'Person' or 'Organization' object.",
  "statusCode": 400
}

Specs

✅ Booking should fail if Customer is not included in Order, because we are in NoBroker mode >> at B or P >> B >> validation of B

Specs

Validations