< Return to Summary | File Generated: Wed Feb 28 2024 15:15:58 GMT+0000 (Coordinated Universal Time)

customer-requested-cancellation >> atomic-cancel (OpenBookingSimpleFlow >> IndividualFacilityUseSlot)

Booking Flow: OpenBookingSimpleFlow

Opportunity Type: IndividualFacilityUseSlot

Feature: Cancellation / Customer Requested Cancellation (Implemented)

Test: Successful booking and successful cancellation after atomic failed cancellation request

After a successful booking, and an unsuccessful but atomic cancellation request, successfully cancel, including checking the Orders feed. Atomic means that the cancellation request either entirely succeeds (all OrderItems items are cancelled) or entirely fails (no OrderItems are cancelled), which is generally best achieved by wrapping code in a database transaction.

Running only this test

npm start -- --runInBand test/features/cancellation/customer-requested-cancellation/implemented/atomic-cancel-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.


⚠️ 40 passed with 0 failures, 396 warnings and 0 suggestions


✅ 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#TestOpportunityBookableCancellable",
  "test:testOpenBookingFlow": "https://openactive.io/test-interface#OpenBookingSimpleFlow"
}

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

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

Local Microservice Test Interface for OrderItem 1 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#TestOpportunityBookableCancellable",
  "test:testOpenBookingFlow": "https://openactive.io/test-interface#OpenBookingSimpleFlow"
}

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

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

Local Microservice Test Interface for OrderItem 2 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#TestOpportunityBookableNotCancellable",
  "test:testOpenBookingFlow": "https://openactive.io/test-interface#OpenBookingSimpleFlow"
}

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

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

Opportunity Feed extract for OrderItem 0 Request

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


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717",
    "identifier": 7717,
    "duration": "PT5H59M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6",
      "name": "Court 6 at Granite Jumping Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772",
        "name": "Granite Jumping Hall",
        "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",
          "identifier": 2,
          "name": "Premier Lifters",
          "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
            "streetAddress": "Greyfriars Court, Paradise Square"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": false
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": false
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": false
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": true
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": true
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": true
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7504933,
            "longitude": -1.2620685
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
            }
          ],
          "telephone": "01865 000002",
          "url": "https://en.wikipedia.org/wiki/Premier_Inn"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P2DT8H33M"
      }
    ],
    "remainingUses": 1,
    "startDate": "2024-02-29T22:44:17+00:00",
    "endDate": "2024-03-01T04:43:17+00:00"
  }
}

Opportunity Feed extract for OrderItem 1 Request

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


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708",
    "identifier": 2708,
    "duration": "PT3H13M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7",
      "name": "Court 7 at Concrete Running Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271",
        "name": "Concrete Running Hall",
        "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",
          "identifier": 2,
          "name": "Premier Lifters",
          "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
            "streetAddress": "Greyfriars Court, Paradise Square"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": false
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": false
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": false
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": true
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": true
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": true
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7504933,
            "longitude": -1.2620685
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
            }
          ],
          "telephone": "01865 000002",
          "url": "https://en.wikipedia.org/wiki/Premier_Inn"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP"
      }
    ],
    "remainingUses": 1,
    "startDate": "2024-03-06T20:17:17+00:00",
    "endDate": "2024-03-06T23:30:17+00:00"
  }
}

Opportunity Feed extract for OrderItem 2 Request

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


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515",
    "identifier": 4515,
    "duration": "PT1H28M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4",
      "name": "Court 4 at Wooden Jumping Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452",
        "name": "Wooden Jumping Hall",
        "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",
          "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"
            }
          ],
          "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,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P11DT3H23M"
      }
    ],
    "remainingUses": 1,
    "startDate": "2024-02-29T13:36:17+00:00",
    "endDate": "2024-02-29T15:04:17+00:00"
  }
}

Specs

✅ Fetch Opportunities >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Fetch Opportunities >> validation of Opportunity Feed extract for OrderItem 1

Specs

Validations

✅ Fetch Opportunities >> validation of Opportunity Feed extract for OrderItem 2

Specs

Validations

✅ C1

C1 Request

PUT https://localhost:5001/api/openbooking/order-quote-templates/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "brokerRole": "https://openactive.io/AgentBroker",
  "broker": {
    "@type": "Organization",
    "name": "MyFitnessApp",
    "url": "https://myfitnessapp.example.com",
    "description": "A fitness app for all the community",
    "logo": {
      "@type": "ImageObject",
      "url": "http://data.myfitnessapp.org.uk/images/logo.png"
    },
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Alan Peacock Way",
      "addressLocality": "Village East",
      "addressRegion": "Middlesbrough",
      "postalCode": "TS4 3AE",
      "addressCountry": "GB"
    }
  },
  "seller": "https://localhost:5001/api/identifiers/sellers/1",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717"
    },
    {
      "@type": "OrderItem",
      "position": 1,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708"
    },
    {
      "@type": "OrderItem",
      "position": 2,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-02-28T15:21:11+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",
    "name": "MyFitnessApp",
    "url": "https://myfitnessapp.example.com"
  },
  "brokerRole": "https://openactive.io/AgentBroker",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P2DT8H33M"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/772",
            "name": "Granite Jumping Hall",
            "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",
              "identifier": 2,
              "name": "Premier Lifters",
              "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
                "streetAddress": "Greyfriars Court, Paradise Square"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": false
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": false
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": false
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": true
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": true
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": true
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7504933,
                "longitude": -1.2620685
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
                }
              ],
              "telephone": "01865 000002",
              "url": "https://en.wikipedia.org/wiki/Premier_Inn"
            },
            "url": "https://example.com/events/772"
          },
          "name": "Court 6 at Granite Jumping Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-02-29T22:44:17+00:00",
        "endDate": "2024-03-01T04:43:17+00:00"
      },
      "position": 0,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    },
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/271",
            "name": "Concrete Running Hall",
            "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",
              "identifier": 2,
              "name": "Premier Lifters",
              "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
                "streetAddress": "Greyfriars Court, Paradise Square"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": false
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": false
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": false
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": true
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": true
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": true
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7504933,
                "longitude": -1.2620685
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
                }
              ],
              "telephone": "01865 000002",
              "url": "https://en.wikipedia.org/wiki/Premier_Inn"
            },
            "url": "https://example.com/events/271"
          },
          "name": "Court 7 at Concrete Running Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-03-06T20:17:17+00:00",
        "endDate": "2024-03-06T23:30:17+00:00"
      },
      "position": 1,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    },
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P11DT3H23M"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/452",
            "name": "Wooden Jumping Hall",
            "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",
              "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"
                }
              ],
              "telephone": "01865 000003",
              "url": "https://en.wikipedia.org/wiki/Shopping_center"
            },
            "url": "https://example.com/events/452"
          },
          "name": "Court 4 at Wooden Jumping Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-02-29T13:36:17+00:00",
        "endDate": "2024-02-29T15:04:17+00:00"
      },
      "position": 2,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    }
  ],
  "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/Unavailable",
    "price": 0,
    "priceCurrency": "GBP"
  },
  "totalPaymentTax": [
    {
      "@type": "TaxChargeSpecification",
      "name": "VAT at 20%",
      "price": 0,
      "priceCurrency": "GBP",
      "rate": 0.2
    }
  ]
}

Specs

✅ C1 >> validation of C1

Specs

Validations

✅ 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%2F772%2Findividual-facility-uses%2F6%2Fslots%2F7717?useCacheIfAvailable=true&expectedCapacity=0


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

{
  "state": "updated",
  "id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717",
  "modified": 1709133372574,
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717",
    "identifier": 7717,
    "duration": "PT5H59M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6",
      "name": "Court 6 at Granite Jumping Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772",
        "name": "Granite Jumping Hall",
        "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",
          "identifier": 2,
          "name": "Premier Lifters",
          "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
            "streetAddress": "Greyfriars Court, Paradise Square"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": false
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": false
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": false
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": true
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": true
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": true
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7504933,
            "longitude": -1.2620685
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
            }
          ],
          "telephone": "01865 000002",
          "url": "https://en.wikipedia.org/wiki/Premier_Inn"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P2DT8H33M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-02-29T22:44:17+00:00",
    "endDate": "2024-03-01T04:43:17+00:00"
  }
}

Opportunity Feed extract for OrderItem 1 Request

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


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

{
  "state": "updated",
  "id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708",
  "modified": 1709133372580,
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708",
    "identifier": 2708,
    "duration": "PT3H13M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7",
      "name": "Court 7 at Concrete Running Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271",
        "name": "Concrete Running Hall",
        "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",
          "identifier": 2,
          "name": "Premier Lifters",
          "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
            "streetAddress": "Greyfriars Court, Paradise Square"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": false
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": false
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": false
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": true
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": true
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": true
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7504933,
            "longitude": -1.2620685
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
            }
          ],
          "telephone": "01865 000002",
          "url": "https://en.wikipedia.org/wiki/Premier_Inn"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-03-06T20:17:17+00:00",
    "endDate": "2024-03-06T23:30:17+00:00"
  }
}

Opportunity Feed extract for OrderItem 2 Request

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


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

{
  "state": "updated",
  "id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515",
  "modified": 1709133372581,
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515",
    "identifier": 4515,
    "duration": "PT1H28M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4",
      "name": "Court 4 at Wooden Jumping Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452",
        "name": "Wooden Jumping Hall",
        "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",
          "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"
            }
          ],
          "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,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P11DT3H23M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-02-29T13:36:17+00:00",
    "endDate": "2024-02-29T15:04:17+00:00"
  }
}

Specs

✅ Assert Opportunity Capacity (after C1) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Assert Opportunity Capacity (after C1) >> validation of Opportunity Feed extract for OrderItem 1

Specs

Validations

✅ Assert Opportunity Capacity (after C1) >> validation of Opportunity Feed extract for OrderItem 2

Specs

Validations

✅ C2

C2 Request

PUT https://localhost:5001/api/openbooking/order-quotes/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "brokerRole": "https://openactive.io/AgentBroker",
  "broker": {
    "@type": "Organization",
    "name": "MyFitnessApp",
    "url": "https://myfitnessapp.example.com",
    "description": "A fitness app for all the community",
    "logo": {
      "@type": "ImageObject",
      "url": "http://data.myfitnessapp.org.uk/images/logo.png"
    },
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Alan Peacock Way",
      "addressLocality": "Village East",
      "addressRegion": "Middlesbrough",
      "postalCode": "TS4 3AE",
      "addressCountry": "GB"
    }
  },
  "seller": "https://localhost:5001/api/identifiers/sellers/1",
  "customer": {
    "@type": "Person",
    "email": "[email protected]",
    "familyName": "Selena",
    "identifier": "58f02315-15d3-4d73-a57b-4a399cf4bee7"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717"
    },
    {
      "@type": "OrderItem",
      "position": 1,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708"
    },
    {
      "@type": "OrderItem",
      "position": 2,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-02-28T15:21:11+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",
    "name": "MyFitnessApp",
    "url": "https://myfitnessapp.example.com"
  },
  "brokerRole": "https://openactive.io/AgentBroker",
  "customer": {
    "@type": "Person",
    "identifier": "58f02315-15d3-4d73-a57b-4a399cf4bee7",
    "email": "[email protected]",
    "familyName": "Selena"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P2DT8H33M"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/772",
            "name": "Granite Jumping Hall",
            "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",
              "identifier": 2,
              "name": "Premier Lifters",
              "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
                "streetAddress": "Greyfriars Court, Paradise Square"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": false
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": false
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": false
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": true
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": true
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": true
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7504933,
                "longitude": -1.2620685
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
                }
              ],
              "telephone": "01865 000002",
              "url": "https://en.wikipedia.org/wiki/Premier_Inn"
            },
            "url": "https://example.com/events/772"
          },
          "name": "Court 6 at Granite Jumping Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-02-29T22:44:17+00:00",
        "endDate": "2024-03-01T04:43:17+00:00"
      },
      "position": 0,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    },
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/271",
            "name": "Concrete Running Hall",
            "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",
              "identifier": 2,
              "name": "Premier Lifters",
              "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
                "streetAddress": "Greyfriars Court, Paradise Square"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": false
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": false
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": false
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": true
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": true
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": true
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7504933,
                "longitude": -1.2620685
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
                }
              ],
              "telephone": "01865 000002",
              "url": "https://en.wikipedia.org/wiki/Premier_Inn"
            },
            "url": "https://example.com/events/271"
          },
          "name": "Court 7 at Concrete Running Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-03-06T20:17:17+00:00",
        "endDate": "2024-03-06T23:30:17+00:00"
      },
      "position": 1,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    },
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P11DT3H23M"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/452",
            "name": "Wooden Jumping Hall",
            "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",
              "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"
                }
              ],
              "telephone": "01865 000003",
              "url": "https://en.wikipedia.org/wiki/Shopping_center"
            },
            "url": "https://example.com/events/452"
          },
          "name": "Court 4 at Wooden Jumping Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-02-29T13:36:17+00:00",
        "endDate": "2024-02-29T15:04:17+00:00"
      },
      "position": 2,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    }
  ],
  "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/Unavailable",
    "price": 0,
    "priceCurrency": "GBP"
  },
  "totalPaymentTax": [
    {
      "@type": "TaxChargeSpecification",
      "name": "VAT at 20%",
      "price": 0,
      "priceCurrency": "GBP",
      "rate": 0.2
    }
  ]
}

Specs

✅ C2 >> validation of C2

Specs

Validations

✅ 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%2F772%2Findividual-facility-uses%2F6%2Fslots%2F7717?useCacheIfAvailable=true&expectedCapacity=0


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717",
    "identifier": 7717,
    "duration": "PT5H59M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6",
      "name": "Court 6 at Granite Jumping Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772",
        "name": "Granite Jumping Hall",
        "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",
          "identifier": 2,
          "name": "Premier Lifters",
          "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
            "streetAddress": "Greyfriars Court, Paradise Square"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": false
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": false
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": false
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": true
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": true
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": true
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7504933,
            "longitude": -1.2620685
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
            }
          ],
          "telephone": "01865 000002",
          "url": "https://en.wikipedia.org/wiki/Premier_Inn"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P2DT8H33M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-02-29T22:44:17+00:00",
    "endDate": "2024-03-01T04:43:17+00:00"
  }
}

Opportunity Feed extract for OrderItem 1 Request

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


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708",
    "identifier": 2708,
    "duration": "PT3H13M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7",
      "name": "Court 7 at Concrete Running Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271",
        "name": "Concrete Running Hall",
        "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",
          "identifier": 2,
          "name": "Premier Lifters",
          "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
            "streetAddress": "Greyfriars Court, Paradise Square"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": false
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": false
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": false
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": true
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": true
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": true
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7504933,
            "longitude": -1.2620685
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
            }
          ],
          "telephone": "01865 000002",
          "url": "https://en.wikipedia.org/wiki/Premier_Inn"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-03-06T20:17:17+00:00",
    "endDate": "2024-03-06T23:30:17+00:00"
  }
}

Opportunity Feed extract for OrderItem 2 Request

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


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515",
    "identifier": 4515,
    "duration": "PT1H28M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4",
      "name": "Court 4 at Wooden Jumping Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452",
        "name": "Wooden Jumping Hall",
        "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",
          "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"
            }
          ],
          "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,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P11DT3H23M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-02-29T13:36:17+00:00",
    "endDate": "2024-02-29T15:04:17+00:00"
  }
}

Specs

✅ Assert Opportunity Capacity (after C2) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Assert Opportunity Capacity (after C2) >> validation of Opportunity Feed extract for OrderItem 1

Specs

Validations

✅ Assert Opportunity Capacity (after C2) >> validation of Opportunity Feed extract for OrderItem 2

Specs

Validations

✅ B

B Request

PUT https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51

{
  "@context": "https://openactive.io/",
  "@type": "Order",
  "brokerRole": "https://openactive.io/AgentBroker",
  "broker": {
    "@type": "Organization",
    "name": "MyFitnessApp",
    "url": "https://myfitnessapp.example.com",
    "description": "A fitness app for all the community",
    "logo": {
      "@type": "ImageObject",
      "url": "http://data.myfitnessapp.org.uk/images/logo.png"
    },
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "Alan Peacock Way",
      "addressLocality": "Village East",
      "addressRegion": "Middlesbrough",
      "postalCode": "TS4 3AE",
      "addressCountry": "GB"
    }
  },
  "seller": "https://localhost:5001/api/identifiers/sellers/1",
  "customer": {
    "@type": "Person",
    "email": "[email protected]",
    "familyName": "Selena",
    "identifier": "58f02315-15d3-4d73-a57b-4a399cf4bee7"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717"
    },
    {
      "@type": "OrderItem",
      "position": 1,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708"
    },
    {
      "@type": "OrderItem",
      "position": 2,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515"
    }
  ],
  "totalPaymentDue": {
    "@type": "PriceSpecification",
    "price": 0,
    "priceCurrency": "GBP"
  }
}

Response status code: 201 Created. Responded in 118.018965ms.

{
  "@context": [
    "https://openactive.io/",
    "https://openactive.io/ns-beta"
  ],
  "@type": "Order",
  "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51",
  "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",
    "name": "MyFitnessApp",
    "url": "https://myfitnessapp.example.com"
  },
  "brokerRole": "https://openactive.io/AgentBroker",
  "customer": {
    "@type": "Person",
    "identifier": "58f02315-15d3-4d73-a57b-4a399cf4bee7",
    "email": "[email protected]",
    "familyName": "Selena"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51#/orderedItems/212",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P2DT8H33M"
      },
      "accessCode": [
        {
          "@type": "PropertyValue",
          "name": "Pin Code",
          "description": "208231"
        }
      ],
      "accessPass": [
        {
          "@type": "ImageObject",
          "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png"
        },
        {
          "@type": "Barcode",
          "text": "4682352392",
          "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png",
          "beta:codeType": "code128"
        }
      ],
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/772",
            "name": "Granite Jumping Hall",
            "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",
              "identifier": 2,
              "name": "Premier Lifters",
              "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
                "streetAddress": "Greyfriars Court, Paradise Square"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": false
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": false
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": false
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": true
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": true
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": true
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7504933,
                "longitude": -1.2620685
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
                }
              ],
              "telephone": "01865 000002",
              "url": "https://en.wikipedia.org/wiki/Premier_Inn"
            },
            "url": "https://example.com/events/772"
          },
          "name": "Court 6 at Granite Jumping Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-02-29T22:44:17+00:00",
        "endDate": "2024-03-01T04:43:17+00:00"
      },
      "orderItemStatus": "https://openactive.io/OrderItemConfirmed",
      "position": 0,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    },
    {
      "@type": "OrderItem",
      "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51#/orderedItems/213",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP"
      },
      "accessCode": [
        {
          "@type": "PropertyValue",
          "name": "Pin Code",
          "description": "252165"
        }
      ],
      "accessPass": [
        {
          "@type": "ImageObject",
          "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png"
        },
        {
          "@type": "Barcode",
          "text": "0886750405",
          "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png",
          "beta:codeType": "code128"
        }
      ],
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/271",
            "name": "Concrete Running Hall",
            "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",
              "identifier": 2,
              "name": "Premier Lifters",
              "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
                "streetAddress": "Greyfriars Court, Paradise Square"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": false
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": false
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": false
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": true
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": true
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": true
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7504933,
                "longitude": -1.2620685
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
                }
              ],
              "telephone": "01865 000002",
              "url": "https://en.wikipedia.org/wiki/Premier_Inn"
            },
            "url": "https://example.com/events/271"
          },
          "name": "Court 7 at Concrete Running Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-03-06T20:17:17+00:00",
        "endDate": "2024-03-06T23:30:17+00:00"
      },
      "orderItemStatus": "https://openactive.io/OrderItemConfirmed",
      "position": 1,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    },
    {
      "@type": "OrderItem",
      "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51#/orderedItems/214",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P11DT3H23M"
      },
      "accessCode": [
        {
          "@type": "PropertyValue",
          "name": "Pin Code",
          "description": "243026"
        }
      ],
      "accessPass": [
        {
          "@type": "ImageObject",
          "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png"
        },
        {
          "@type": "Barcode",
          "text": "4885677698",
          "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png",
          "beta:codeType": "code128"
        }
      ],
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/452",
            "name": "Wooden Jumping Hall",
            "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",
              "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"
                }
              ],
              "telephone": "01865 000003",
              "url": "https://en.wikipedia.org/wiki/Shopping_center"
            },
            "url": "https://example.com/events/452"
          },
          "name": "Court 4 at Wooden Jumping Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-02-29T13:36:17+00:00",
        "endDate": "2024-02-29T15:04:17+00:00"
      },
      "orderItemStatus": "https://openactive.io/OrderItemConfirmed",
      "position": 2,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    }
  ],
  "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/Unavailable",
    "price": 0,
    "priceCurrency": "GBP"
  },
  "totalPaymentTax": [
    {
      "@type": "TaxChargeSpecification",
      "name": "VAT at 20%",
      "price": 0,
      "priceCurrency": "GBP",
      "rate": 0.2
    }
  ]
}

Specs

✅ B >> validation of B

Specs

Validations

✅ Assert Opportunity Capacity (after B)

Opportunity Feed extract for OrderItem 0 Request

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


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717",
    "identifier": 7717,
    "duration": "PT5H59M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6",
      "name": "Court 6 at Granite Jumping Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772",
        "name": "Granite Jumping Hall",
        "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",
          "identifier": 2,
          "name": "Premier Lifters",
          "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
            "streetAddress": "Greyfriars Court, Paradise Square"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": false
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": false
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": false
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": true
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": true
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": true
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7504933,
            "longitude": -1.2620685
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
            }
          ],
          "telephone": "01865 000002",
          "url": "https://en.wikipedia.org/wiki/Premier_Inn"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P2DT8H33M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-02-29T22:44:17+00:00",
    "endDate": "2024-03-01T04:43:17+00:00"
  }
}

Opportunity Feed extract for OrderItem 1 Request

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


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708",
    "identifier": 2708,
    "duration": "PT3H13M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7",
      "name": "Court 7 at Concrete Running Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271",
        "name": "Concrete Running Hall",
        "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",
          "identifier": 2,
          "name": "Premier Lifters",
          "description": "Where your Fitness Goals are Always Inn-Sight. 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 1BB",
            "streetAddress": "Greyfriars Court, Paradise Square"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": false
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": false
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": false
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": true
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": true
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": true
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7504933,
            "longitude": -1.2620685
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/5/53/Cambridge_Orchard_Park_Premier_Inn.jpg"
            }
          ],
          "telephone": "01865 000002",
          "url": "https://en.wikipedia.org/wiki/Premier_Inn"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-03-06T20:17:17+00:00",
    "endDate": "2024-03-06T23:30:17+00:00"
  }
}

Opportunity Feed extract for OrderItem 2 Request

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


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515",
    "identifier": 4515,
    "duration": "PT1H28M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4",
      "name": "Court 4 at Wooden Jumping Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452",
        "name": "Wooden Jumping Hall",
        "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",
          "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"
            }
          ],
          "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,
          "taxMode": "https://openactive.io/TaxGross",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ]
        },
        "url": "https://www.example.com/a-session-age"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P11DT3H23M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-02-29T13:36:17+00:00",
    "endDate": "2024-02-29T15:04:17+00:00"
  }
}

Specs

✅ Assert Opportunity Capacity (after B) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Assert Opportunity Capacity (after B) >> validation of Opportunity Feed extract for OrderItem 1

Specs

Validations

✅ Assert Opportunity Capacity (after B) >> validation of Opportunity Feed extract for OrderItem 2

Specs

Validations

✅ Cancel Order for non-cancellable items

U Request

PATCH https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51

{
  "@context": "https://openactive.io/",
  "@type": "Order",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51#/orderedItems/213",
      "orderItemStatus": "https://openactive.io/CustomerCancelled"
    },
    {
      "@type": "OrderItem",
      "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51#/orderedItems/214",
      "orderItemStatus": "https://openactive.io/CustomerCancelled"
    }
  ]
}

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

{
  "@context": "https://openactive.io/",
  "@type": "CancellationNotPermittedError",
  "name": "Cancellation is not permitted due to internal rules of the Booking System not otherwise exposed to the Broker.",
  "statusCode": 400,
  "description": "Customer cancellation not permitted on this slot"
}

Specs

✅ Assert Opportunity Capacity (after Cancel Order for non-cancellable items)

Specs

✅ Assert Opportunity Capacity (after Cancel Order for non-cancellable items) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Assert Opportunity Capacity (after Cancel Order for non-cancellable items) >> validation of Opportunity Feed extract for OrderItem 1

Specs

Validations

✅ Assert Opportunity Capacity (after Cancel Order for non-cancellable items) >> validation of Opportunity Feed extract for OrderItem 2

Specs

Validations

✅ Cancel Order for cancellable item

Orders (orders) Feed listen for 'd2d6b19a-2a9b-45f4-a352-eb1e0372bc51' change (auth: primary) Request

POST http://localhost:3000/order-listeners/orders/primary/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51


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

{
  "headers": {
    "Accept": "application/json, application/vnd.openactive.booking+json; version=1",
    "Cache-Control": "max-age=0",
    "Authorization": "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkIwNEY3QjkxREUzQjk0NzhDNjE4MzNGQjI0QUE1Q0RCIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE3MDkxMzMwMTksImV4cCI6MTcwOTEzNjYxOSwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMyIsImF1ZCI6Im9wZW5ib29raW5nIiwiY2xpZW50X2lkIjoiMThlMGY5NjktOGQ2Ni00MTdhLWE5NzMtZTc1YjA4YjFhMjM3IiwiaHR0cHM6Ly9vcGVuYWN0aXZlLmlvL2NsaWVudElkIjoiMThlMGY5NjktOGQ2Ni00MTdhLWE5NzMtZTc1YjA4YjFhMjM3IiwianRpIjoiQjhGNDY1NDFFMjI1QTMwNUU5Mzk3RTEzMDc0NUU0NkEiLCJpYXQiOjE3MDkxMzMwMTksInNjb3BlIjpbIm9wZW5hY3RpdmUtb3JkZXJzZmVlZCJdfQ.IXLcl3PY9Wq1TU-r6y-T-W0y2ZCCCujyLM9hUBljQPFUDty6OOxhQZEpgvlpNLLQZBG01BZMY6aLUkVv479pQFK0oHQWIRbr18Fh9loxOZ7xrNbLKNxtpXY9CmF-_W1HhqoKWQe5tUoSX_w6-08doMQpu46ty4tKoXbh1DYBVgocK-pNSEadV4fWmXZWfShmyKFu5xwR-VtzPhd0SZZ88m-X39rw8l9QHcuIPDNRpS20IZ9YMzDi5Z56y-4sLdm-N6QZB1qOY9VgGKeh5b2QJ1_KYc7edCtwcEsA-ArgnDI49KabOrsvRI24ka4rHzb3k9Q103ylzExJF3NMyund-g"
  },
  "startingFeedPage": "https://localhost:5001/api/openbooking/orders-rpde?afterTimestamp=638447301659326013&afterId=9ae4cc28-4499-4bec-a372-7fbaacc18beb",
  "message": "Listening for UUID: 'd2d6b19a-2a9b-45f4-a352-eb1e0372bc51' in feed: orders, for Booking Partner: primary from startingFeedPage using headers"
}

U Request

PATCH https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51

{
  "@context": "https://openactive.io/",
  "@type": "Order",
  "orderedItem": [
    {
      "@type": "OrderItem",
      "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51#/orderedItems/212",
      "orderItemStatus": "https://openactive.io/CustomerCancelled"
    }
  ]
}

Response status code: 204 No Content. Responded in 29.530776ms.

Specs

✅ Orders Feed (after Cancel Order for cancellable item)

Orders (orders) Feed collect for 'd2d6b19a-2a9b-45f4-a352-eb1e0372bc51' change (auth: primary) Request

GET http://localhost:3000/order-listeners/orders/primary/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51


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

{
  "state": "updated",
  "kind": "Order",
  "id": "d2d6b19a-2a9b-45f4-a352-eb1e0372bc51",
  "modified": 638447301747548000,
  "data": {
    "@context": [
      "https://openactive.io/",
      "https://openactive.io/ns-beta"
    ],
    "@type": "Order",
    "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51",
    "identifier": "d2d6b19a-2a9b-45f4-a352-eb1e0372bc51",
    "orderedItem": [
      {
        "@type": "OrderItem",
        "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51#/orderedItems/213",
        "acceptedOffer": {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708#/offers/0",
          "price": 0,
          "priceCurrency": "GBP"
        },
        "accessCode": [
          {
            "@type": "PropertyValue",
            "name": "Pin Code",
            "description": "252165"
          }
        ],
        "accessPass": [
          {
            "@type": "Barcode",
            "text": "0886750405",
            "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png",
            "beta:codeType": "code128"
          }
        ],
        "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/271/individual-facility-uses/7/slots/2708",
        "orderItemStatus": "https://openactive.io/OrderItemConfirmed"
      },
      {
        "@type": "OrderItem",
        "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51#/orderedItems/214",
        "acceptedOffer": {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515#/offers/0",
          "price": 0,
          "priceCurrency": "GBP"
        },
        "accessCode": [
          {
            "@type": "PropertyValue",
            "name": "Pin Code",
            "description": "243026"
          }
        ],
        "accessPass": [
          {
            "@type": "Barcode",
            "text": "4885677698",
            "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png",
            "beta:codeType": "code128"
          }
        ],
        "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/452/individual-facility-uses/4/slots/4515",
        "orderItemStatus": "https://openactive.io/OrderItemConfirmed"
      },
      {
        "@type": "OrderItem",
        "@id": "https://localhost:5001/api/openbooking/orders/d2d6b19a-2a9b-45f4-a352-eb1e0372bc51#/orderedItems/212",
        "acceptedOffer": {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717#/offers/0",
          "price": 0,
          "priceCurrency": "GBP"
        },
        "accessCode": [
          {
            "@type": "PropertyValue",
            "name": "Pin Code",
            "description": "208231"
          }
        ],
        "accessPass": [
          {
            "@type": "Barcode",
            "text": "4682352392",
            "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png",
            "beta:codeType": "code128"
          }
        ],
        "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/772/individual-facility-uses/6/slots/7717",
        "orderItemStatus": "https://openactive.io/CustomerCancelled"
      }
    ],
    "totalPaymentDue": {
      "@type": "PriceSpecification",
      "openBookingPrepayment": "https://openactive.io/Unavailable",
      "price": 0,
      "priceCurrency": "GBP"
    }
  }
}

Specs

✅ Orders Feed (after Cancel Order for cancellable item) >> validation of OrderFeed

Specs

Validations

✅ Assert Opportunity Capacity (after Cancel Order for cancellable item)

Specs

✅ Assert Opportunity Capacity (after Cancel Order for cancellable item) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Assert Opportunity Capacity (after Cancel Order for cancellable item) >> validation of Opportunity Feed extract for OrderItem 1

Specs

Validations

✅ Assert Opportunity Capacity (after Cancel Order for cancellable item) >> validation of Opportunity Feed extract for OrderItem 2

Specs

Validations