< Return to Summary | File Generated: Thu May 09 2024 14:37:11 GMT+0000 (Coordinated Universal Time)

common-error-conditions >> incomplete-broker-details (OpenBookingApprovalFlow >> IndividualFacilityUseSlot)

Booking Flow: OpenBookingApprovalFlow

Opportunity Type: IndividualFacilityUseSlot

Feature: Core / Common error conditions (Implemented)

Test: Expect an IncompleteBrokerDetailsError when broker details are missing name

Run each of C1, C2 and B for a valid opportunity, with broker details incomplete (missing name), expecting an IncompleteBrokerDetailsError to be returned

Running only this test

npm start -- --runInBand test/features/core/common-error-conditions/implemented/incomplete-broker-details-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.


⚠️ 24 passed with 0 failures, 164 warnings and 0 suggestions


✅ Incomplete Broker Details at C1 >> Fetch Opportunities

Local Microservice Test Interface for OrderItem 0 Request

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

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

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

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

Opportunity Feed extract for OrderItem 0 Request

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


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

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

Specs

✅ Incomplete Broker Details at C1 >> Fetch Opportunities >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

❔ Incomplete Broker Details at C1 >> C1

C1 Request

PUT https://localhost:5001/api/openbooking/order-quote-templates/ee48b662-7fa8-48ad-96cd-d232fd3975b8

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "brokerRole": "https://openactive.io/AgentBroker",
  "broker": {
    "@type": "Organization",
    "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/1780/individual-facility-uses/6/slots/17797#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/1780/individual-facility-uses/6/slots/17797"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "IncompleteBrokerDetailsError",
  "name": "The 'name' property is not supplied within the 'Organisation' object describing the Broker; or the 'broker' property supplied is not a valid 'Organisation' object.",
  "statusCode": 400
}

✅ Incomplete Broker Details at C1 >> C1 >> validation of C1

Specs

Validations

✅ Incomplete Broker Details at C1 >> Assert Opportunity Capacity (after C1)

Specs

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

Specs

Validations

✅ Incomplete Broker Details at C2 >> Fetch Opportunities

Local Microservice Test Interface for OrderItem 0 Request

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

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

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

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

Opportunity Feed extract for OrderItem 0 Request

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


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

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

Specs

✅ Incomplete Broker Details at C2 >> Fetch Opportunities >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Incomplete Broker Details at C2 >> C1

C1 Request

PUT https://localhost:5001/api/openbooking/order-quote-templates/3b834925-4880-4918-b2b4-2a4ea2553ecb

{
  "@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/1401/individual-facility-uses/5/slots/14006#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/1401/individual-facility-uses/5/slots/14006"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/3b834925-4880-4918-b2b4-2a4ea2553ecb",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-05-09T14:43:01+00:00"
  },
  "orderRequiresApproval": true,
  "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/1401/individual-facility-uses/5/slots/14006#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "latestCancellationBeforeStartDate": "P1D",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P10DT18H5M"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1401/individual-facility-uses/5/slots/14006",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/1401/individual-facility-uses/5",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/1401",
            "name": "Frozen Cricket Net",
            "facilityType": [
              {
                "@type": "Concept",
                "@id": "https://openactive.io/facility-types#a1f82b7a-1258-4d9a-8dc5-bfc2ae961651",
                "inScheme": "https://openactive.io/facility-types",
                "prefLabel": "Squash Court"
              }
            ],
            "location": {
              "@type": "Place",
              "@id": "https://example.com/place/3",
              "identifier": 3,
              "name": "Stroll & Stretch",
              "description": "Casual Calisthenics in the Heart of Commerce. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
              "address": {
                "@type": "PostalAddress",
                "addressCountry": "GB",
                "addressLocality": "Oxford",
                "addressRegion": "Oxfordshire",
                "postalCode": "OX1 1UU",
                "streetAddress": "Norfolk Street"
              },
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.749826,
                "longitude": -1.261492
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/2/28/Westfield_Garden_State_Plaza_-_panoramio.jpg"
                }
              ],
              "openingHoursSpecification": [
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Sunday"
                  ],
                  "opens": "09:00"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Monday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Tuesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Wednesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Thursday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Friday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Saturday"
                  ],
                  "opens": "09:00"
                }
              ],
              "telephone": "01865 000003",
              "url": "https://en.wikipedia.org/wiki/Shopping_center"
            },
            "url": "https://example.com/events/1401"
          },
          "name": "Court 5 at Frozen Cricket Net"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-05-11T16:58:18+00:00",
        "endDate": "2024-05-11T17:37:18+00:00"
      },
      "position": 0,
      "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

✅ Incomplete Broker Details at C2 >> C1 >> validation of C1

Specs

Validations

✅ Incomplete Broker Details at C2 >> Assert Opportunity Capacity (after C1)

Opportunity Feed extract for OrderItem 0 Request

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


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

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

Specs

✅ Incomplete Broker Details at C2 >> Assert Opportunity Capacity (after C1) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

❔ Incomplete Broker Details at C2 >> C2

C2 Request

PUT https://localhost:5001/api/openbooking/order-quotes/3b834925-4880-4918-b2b4-2a4ea2553ecb

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "brokerRole": "https://openactive.io/AgentBroker",
  "broker": {
    "@type": "Organization",
    "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]",
    "givenName": "Tillman"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/1401/individual-facility-uses/5/slots/14006#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/1401/individual-facility-uses/5/slots/14006"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "IncompleteBrokerDetailsError",
  "name": "The 'name' property is not supplied within the 'Organisation' object describing the Broker; or the 'broker' property supplied is not a valid 'Organisation' object.",
  "statusCode": 400
}

✅ Incomplete Broker Details at C2 >> C2 >> validation of C2

Specs

Validations

✅ Incomplete Broker Details at C2 >> Assert Opportunity Capacity (after C2)

Specs

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

Specs

Validations

✅ Incomplete Broker Details at B >> Fetch Opportunities

Local Microservice Test Interface for OrderItem 0 Request

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

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

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

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

Opportunity Feed extract for OrderItem 0 Request

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


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034",
    "identifier": 15034,
    "duration": "PT3H37M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3",
      "name": "Court 3 at Frozen Sports Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504",
        "identifier": 1504,
        "name": "Frozen Sports Hall",
        "facilityType": [
          {
            "@type": "Concept",
            "@id": "https://openactive.io/facility-types#da364f9b-8bb2-490e-9e2f-1068790b9e35",
            "inScheme": "https://openactive.io/facility-types",
            "prefLabel": "Sports Hall"
          }
        ],
        "location": {
          "@type": "Place",
          "@id": "https://example.com/place/1",
          "identifier": 1,
          "name": "Post-ercise Plaza",
          "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
          "address": {
            "@type": "PostalAddress",
            "addressCountry": "GB",
            "addressLocality": "Oxford",
            "addressRegion": "Oxfordshire",
            "postalCode": "OX1 1AA",
            "streetAddress": "Kings Mead House"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": true
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": true
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": true
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": false
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": false
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": false
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7502,
            "longitude": -1.2674
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
            }
          ],
          "openingHoursSpecification": [
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Sunday"
              ],
              "opens": "09:00"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Monday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Tuesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Wednesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Thursday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Friday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Saturday"
              ],
              "opens": "09:00"
            }
          ],
          "telephone": "01865 000001",
          "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "sameAs": [
            "https://socialmedia.com/AcmeFitnessLtd"
          ],
          "taxMode": "https://openactive.io/TaxGross",
          "telephone": "02979 083659",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ],
          "url": "http://alvis.name"
        },
        "url": "https://www.example.com/facilities/1504"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      }
    ],
    "remainingUses": 1,
    "startDate": "2024-05-19T11:30:18+00:00",
    "endDate": "2024-05-19T15:07:18+00:00"
  }
}

Specs

✅ Incomplete Broker Details at B >> Fetch Opportunities >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Incomplete Broker Details at B >> C1

C1 Request

PUT https://localhost:5001/api/openbooking/order-quote-templates/fbe50dde-1d3e-44db-91cf-3b6e5bfc2f97

{
  "@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/1504/individual-facility-uses/3/slots/15034#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/fbe50dde-1d3e-44db-91cf-3b6e5bfc2f97",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-05-09T14:43:03+00:00"
  },
  "orderRequiresApproval": true,
  "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/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/1504",
            "name": "Frozen Sports 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",
              "@id": "https://example.com/place/1",
              "identifier": 1,
              "name": "Post-ercise Plaza",
              "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
              "address": {
                "@type": "PostalAddress",
                "addressCountry": "GB",
                "addressLocality": "Oxford",
                "addressRegion": "Oxfordshire",
                "postalCode": "OX1 1AA",
                "streetAddress": "Kings Mead House"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": true
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": true
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": true
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": false
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": false
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": false
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7502,
                "longitude": -1.2674
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
                }
              ],
              "openingHoursSpecification": [
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Sunday"
                  ],
                  "opens": "09:00"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Monday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Tuesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Wednesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Thursday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Friday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Saturday"
                  ],
                  "opens": "09:00"
                }
              ],
              "telephone": "01865 000001",
              "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
            },
            "url": "https://example.com/events/1504"
          },
          "name": "Court 3 at Frozen Sports Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-05-19T11:30:18+00:00",
        "endDate": "2024-05-19T15:07:18+00:00"
      },
      "position": 0,
      "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

✅ Incomplete Broker Details at B >> C1 >> validation of C1

Specs

Validations

✅ Incomplete Broker Details at B >> 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%2F1504%2Findividual-facility-uses%2F3%2Fslots%2F15034?useCacheIfAvailable=true&expectedCapacity=0


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

{
  "state": "updated",
  "id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034",
  "modified": "1715265485469",
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034",
    "identifier": 15034,
    "duration": "PT3H37M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3",
      "name": "Court 3 at Frozen Sports Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504",
        "identifier": 1504,
        "name": "Frozen Sports Hall",
        "facilityType": [
          {
            "@type": "Concept",
            "@id": "https://openactive.io/facility-types#da364f9b-8bb2-490e-9e2f-1068790b9e35",
            "inScheme": "https://openactive.io/facility-types",
            "prefLabel": "Sports Hall"
          }
        ],
        "location": {
          "@type": "Place",
          "@id": "https://example.com/place/1",
          "identifier": 1,
          "name": "Post-ercise Plaza",
          "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
          "address": {
            "@type": "PostalAddress",
            "addressCountry": "GB",
            "addressLocality": "Oxford",
            "addressRegion": "Oxfordshire",
            "postalCode": "OX1 1AA",
            "streetAddress": "Kings Mead House"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": true
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": true
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": true
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": false
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": false
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": false
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7502,
            "longitude": -1.2674
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
            }
          ],
          "openingHoursSpecification": [
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Sunday"
              ],
              "opens": "09:00"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Monday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Tuesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Wednesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Thursday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Friday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Saturday"
              ],
              "opens": "09:00"
            }
          ],
          "telephone": "01865 000001",
          "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "sameAs": [
            "https://socialmedia.com/AcmeFitnessLtd"
          ],
          "taxMode": "https://openactive.io/TaxGross",
          "telephone": "02979 083659",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ],
          "url": "http://alvis.name"
        },
        "url": "https://www.example.com/facilities/1504"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-05-19T11:30:18+00:00",
    "endDate": "2024-05-19T15:07:18+00:00"
  }
}

Specs

✅ Incomplete Broker Details at B >> Assert Opportunity Capacity (after C1) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Incomplete Broker Details at B >> C2

C2 Request

PUT https://localhost:5001/api/openbooking/order-quotes/fbe50dde-1d3e-44db-91cf-3b6e5bfc2f97

{
  "@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": "Judson",
    "identifier": "04b26147-635b-4f86-930d-ff68f54ab149"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/fbe50dde-1d3e-44db-91cf-3b6e5bfc2f97",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-05-09T14:43:04+00:00"
  },
  "orderRequiresApproval": true,
  "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": "04b26147-635b-4f86-930d-ff68f54ab149",
    "email": "[email protected]",
    "familyName": "Judson"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      "orderedItem": {
        "@type": "Slot",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034",
        "facilityUse": {
          "@type": "IndividualFacilityUse",
          "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3",
          "aggregateFacilityUse": {
            "@type": "FacilityUse",
            "@id": "https://localhost:5001/api/identifiers/facility-uses/1504",
            "name": "Frozen Sports 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",
              "@id": "https://example.com/place/1",
              "identifier": 1,
              "name": "Post-ercise Plaza",
              "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
              "address": {
                "@type": "PostalAddress",
                "addressCountry": "GB",
                "addressLocality": "Oxford",
                "addressRegion": "Oxfordshire",
                "postalCode": "OX1 1AA",
                "streetAddress": "Kings Mead House"
              },
              "amenityFeature": [
                {
                  "@type": "ChangingFacilities",
                  "name": "Changing Facilities",
                  "value": true
                },
                {
                  "@type": "Showers",
                  "name": "Showers",
                  "value": true
                },
                {
                  "@type": "Lockers",
                  "name": "Lockers",
                  "value": true
                },
                {
                  "@type": "Towels",
                  "name": "Towels",
                  "value": false
                },
                {
                  "@type": "Creche",
                  "name": "Creche",
                  "value": false
                },
                {
                  "@type": "Parking",
                  "name": "Parking",
                  "value": false
                }
              ],
              "geo": {
                "@type": "GeoCoordinates",
                "latitude": 51.7502,
                "longitude": -1.2674
              },
              "image": [
                {
                  "@type": "ImageObject",
                  "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
                }
              ],
              "openingHoursSpecification": [
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Sunday"
                  ],
                  "opens": "09:00"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Monday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Tuesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Wednesday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Thursday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "21:30",
                  "dayOfWeek": [
                    "https://schema.org/Friday"
                  ],
                  "opens": "06:30"
                },
                {
                  "@type": "OpeningHoursSpecification",
                  "closes": "17:30",
                  "dayOfWeek": [
                    "https://schema.org/Saturday"
                  ],
                  "opens": "09:00"
                }
              ],
              "telephone": "01865 000001",
              "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
            },
            "url": "https://example.com/events/1504"
          },
          "name": "Court 3 at Frozen Sports Hall"
        },
        "maximumUses": 1,
        "remainingUses": 1,
        "startDate": "2024-05-19T11:30:18+00:00",
        "endDate": "2024-05-19T15:07:18+00:00"
      },
      "position": 0,
      "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

✅ Incomplete Broker Details at B >> C2 >> validation of C2

Specs

Validations

✅ Incomplete Broker Details at B >> 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%2F1504%2Findividual-facility-uses%2F3%2Fslots%2F15034?useCacheIfAvailable=true&expectedCapacity=0


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "Slot",
    "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034",
    "identifier": 15034,
    "duration": "PT3H37M",
    "facilityUse": {
      "@type": "IndividualFacilityUse",
      "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3",
      "name": "Court 3 at Frozen Sports Hall",
      "aggregateFacilityUse": {
        "@type": "FacilityUse",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504",
        "identifier": 1504,
        "name": "Frozen Sports Hall",
        "facilityType": [
          {
            "@type": "Concept",
            "@id": "https://openactive.io/facility-types#da364f9b-8bb2-490e-9e2f-1068790b9e35",
            "inScheme": "https://openactive.io/facility-types",
            "prefLabel": "Sports Hall"
          }
        ],
        "location": {
          "@type": "Place",
          "@id": "https://example.com/place/1",
          "identifier": 1,
          "name": "Post-ercise Plaza",
          "description": "Sorting Out Your Fitness One Parcel Lift at a Time! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
          "address": {
            "@type": "PostalAddress",
            "addressCountry": "GB",
            "addressLocality": "Oxford",
            "addressRegion": "Oxfordshire",
            "postalCode": "OX1 1AA",
            "streetAddress": "Kings Mead House"
          },
          "amenityFeature": [
            {
              "@type": "ChangingFacilities",
              "name": "Changing Facilities",
              "value": true
            },
            {
              "@type": "Showers",
              "name": "Showers",
              "value": true
            },
            {
              "@type": "Lockers",
              "name": "Lockers",
              "value": true
            },
            {
              "@type": "Towels",
              "name": "Towels",
              "value": false
            },
            {
              "@type": "Creche",
              "name": "Creche",
              "value": false
            },
            {
              "@type": "Parking",
              "name": "Parking",
              "value": false
            }
          ],
          "geo": {
            "@type": "GeoCoordinates",
            "latitude": 51.7502,
            "longitude": -1.2674
          },
          "image": [
            {
              "@type": "ImageObject",
              "url": "https://upload.wikimedia.org/wikipedia/commons/e/e5/Oxford_StAldates_PostOffice.jpg"
            }
          ],
          "openingHoursSpecification": [
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Sunday"
              ],
              "opens": "09:00"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Monday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Tuesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Wednesday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Thursday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "21:30",
              "dayOfWeek": [
                "https://schema.org/Friday"
              ],
              "opens": "06:30"
            },
            {
              "@type": "OpeningHoursSpecification",
              "closes": "17:30",
              "dayOfWeek": [
                "https://schema.org/Saturday"
              ],
              "opens": "09:00"
            }
          ],
          "telephone": "01865 000001",
          "url": "https://en.wikipedia.org/wiki/Post_Office_Limited"
        },
        "provider": {
          "@type": "Organization",
          "@id": "https://localhost:5001/api/identifiers/sellers/1",
          "name": "Acme Fitness Ltd",
          "isOpenBookingAllowed": true,
          "sameAs": [
            "https://socialmedia.com/AcmeFitnessLtd"
          ],
          "taxMode": "https://openactive.io/TaxGross",
          "telephone": "02979 083659",
          "termsOfService": [
            {
              "@type": "PrivacyPolicy",
              "name": "Privacy Policy",
              "requiresExplicitConsent": false,
              "url": "https://example.com/privacy.html"
            }
          ],
          "url": "http://alvis.name"
        },
        "url": "https://www.example.com/facilities/1504"
      }
    },
    "maximumUses": 1,
    "offers": [
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      },
      {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
        "acceptedPaymentMethod": [
          "http://purl.org/goodrelations/v1#Cash",
          "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
        ],
        "allowCustomerCancellationFullRefund": true,
        "latestCancellationBeforeStartDate": "P1DT16H",
        "openBookingFlowRequirement": [
          "https://openactive.io/OpenBookingApproval",
          "https://openactive.io/OpenBookingNegotiation"
        ],
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P14DT18H2M"
      }
    ],
    "remainingUses": 0,
    "startDate": "2024-05-19T11:30:18+00:00",
    "endDate": "2024-05-19T15:07:18+00:00"
  }
}

Specs

✅ Incomplete Broker Details at B >> Assert Opportunity Capacity (after C2) >> validation of Opportunity Feed extract for OrderItem 0

Specs

Validations

✅ Incomplete Broker Details at B >> P

P Request

PUT https://localhost:5001/api/openbooking/order-proposals/fbe50dde-1d3e-44db-91cf-3b6e5bfc2f97

{
  "@context": "https://openactive.io/",
  "@type": "OrderProposal",
  "brokerRole": "https://openactive.io/AgentBroker",
  "broker": {
    "@type": "Organization",
    "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": "Judson",
    "identifier": "04b26147-635b-4f86-930d-ff68f54ab149"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/facility-uses/1504/individual-facility-uses/3/slots/15034"
    }
  ],
  "totalPaymentDue": {
    "@type": "PriceSpecification",
    "price": 0,
    "priceCurrency": "GBP"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "IncompleteBrokerDetailsError",
  "name": "The 'name' property is not supplied within the 'Organisation' object describing the Broker; or the 'broker' property supplied is not a valid 'Organisation' object.",
  "statusCode": 400
}

Specs

✅ Incomplete Broker Details at B >> P >> validation of P

Specs

Validations