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

free-opportunities >> opportunity-free (OpenBookingApprovalFlow >> ScheduledSession)

Booking Flow: OpenBookingApprovalFlow

Opportunity Type: ScheduledSession

Feature: Payment / Free opportunities (Implemented)

Test: Successful booking without payment property

A successful end to end booking without the payment property included.

Running only this test

npm start -- --runInBand test/features/payment/free-opportunities/implemented/opportunity-free-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.


⚠️ 21 passed with 0 failures, 90 warnings and 48 suggestions


✅ Fetch Opportunities

Local Microservice Test Interface for OrderItem 0 Request

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

{
  "@type": "ScheduledSession",
  "superEvent": {
    "@type": "SessionSeries",
    "organizer": {
      "@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#TestOpportunityBookableFree",
  "test:testOpenBookingFlow": "https://openactive.io/test-interface#OpenBookingApprovalFlow"
}

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

{
  "@context": "https://openactive.io/",
  "@type": "ScheduledSession",
  "@id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644"
}

Opportunity Feed extract for OrderItem 0 Request

GET http://localhost:3000/opportunity/https%3A%2F%2Flocalhost%3A5001%2Fapi%2Fidentifiers%2Fscheduled-sessions%2F1365%2Fevents%2F13644?useCacheIfAvailable=true


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "ScheduledSession",
    "@id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644",
    "startDate": "2024-05-14T04:22:18+00:00",
    "endDate": "2024-05-14T08:19:18+00:00",
    "superEvent": {
      "@type": "SessionSeries",
      "@id": "https://localhost:5001/api/identifiers/session-series/1365",
      "identifier": 1365,
      "name": "GOLDEN: Fresh Walking",
      "activity": [
        {
          "@type": "Concept",
          "@id": "https://openactive.io/activity-list#95092977-5a20-4d6e-b312-8fddabe71544",
          "inScheme": "https://openactive.io/activity-list",
          "prefLabel": "Walking"
        }
      ],
      "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
      "location": {
        "@type": "Place",
        "@id": "https://example.com/place/2",
        "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"
          }
        ],
        "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 000002",
        "url": "https://en.wikipedia.org/wiki/Premier_Inn"
      },
      "offers": [
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Adult",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Adult",
            "maxValue": 59,
            "minValue": 18
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Junior",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Junior",
            "maxValue": 17
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Senior",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Senior",
            "minValue": 60
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Adult (off-peak)",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Adult (off-peak)",
            "maxValue": 59,
            "minValue": 18
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        }
      ],
      "organizer": {
        "@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": "04452 869106",
        "termsOfService": [
          {
            "@type": "PrivacyPolicy",
            "name": "Privacy Policy",
            "requiresExplicitConsent": false,
            "url": "https://example.com/privacy.html"
          }
        ],
        "url": "http://sheridan.org"
      },
      "url": "https://www.example.com/sessions/1365"
    },
    "duration": "PT3H57M",
    "maximumAttendeeCapacity": 3,
    "remainingAttendeeCapacity": 3
  }
}

Specs

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

Specs

Validations

✅ C1

C1 Request

PUT https://localhost:5001/api/openbooking/order-quote-templates/f61bde14-65a8-44bb-9066-dd584d840acf

{
  "@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/session-series/1365#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/f61bde14-65a8-44bb-9066-dd584d840acf",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-05-09T14:59:50+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/session-series/1365#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P12DT21H17M"
      },
      "orderedItem": {
        "@type": "ScheduledSession",
        "@id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644",
        "startDate": "2024-05-14T04:22:18+00:00",
        "endDate": "2024-05-14T08:19:18+00:00",
        "superEvent": {
          "@type": "SessionSeries",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365",
          "name": "Fresh Walking",
          "activity": [
            {
              "@type": "Concept",
              "@id": "https://openactive.io/activity-list#6bdea630-ad22-4e58-98a3-bca26ee3f1da",
              "inScheme": "https://openactive.io/activity-list",
              "prefLabel": "Rave Fitness"
            }
          ],
          "location": {
            "@type": "Place",
            "@id": "https://example.com/place/2",
            "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"
              }
            ],
            "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 000002",
            "url": "https://en.wikipedia.org/wiki/Premier_Inn"
          },
          "url": "https://example.com/events/1365"
        },
        "maximumAttendeeCapacity": 3,
        "remainingAttendeeCapacity": 3
      },
      "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

✅ 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%2Fscheduled-sessions%2F1365%2Fevents%2F13644?useCacheIfAvailable=true&expectedCapacity=2


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

{
  "state": "updated",
  "id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644",
  "modified": "1715266491886",
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "ScheduledSession",
    "@id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644",
    "startDate": "2024-05-14T04:22:18+00:00",
    "endDate": "2024-05-14T08:19:18+00:00",
    "superEvent": {
      "@type": "SessionSeries",
      "@id": "https://localhost:5001/api/identifiers/session-series/1365",
      "identifier": 1365,
      "name": "GOLDEN: Fresh Walking",
      "activity": [
        {
          "@type": "Concept",
          "@id": "https://openactive.io/activity-list#95092977-5a20-4d6e-b312-8fddabe71544",
          "inScheme": "https://openactive.io/activity-list",
          "prefLabel": "Walking"
        }
      ],
      "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
      "location": {
        "@type": "Place",
        "@id": "https://example.com/place/2",
        "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"
          }
        ],
        "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 000002",
        "url": "https://en.wikipedia.org/wiki/Premier_Inn"
      },
      "offers": [
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Adult",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Adult",
            "maxValue": 59,
            "minValue": 18
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Junior",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Junior",
            "maxValue": 17
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Senior",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Senior",
            "minValue": 60
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Adult (off-peak)",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Adult (off-peak)",
            "maxValue": 59,
            "minValue": 18
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        }
      ],
      "organizer": {
        "@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": "04452 869106",
        "termsOfService": [
          {
            "@type": "PrivacyPolicy",
            "name": "Privacy Policy",
            "requiresExplicitConsent": false,
            "url": "https://example.com/privacy.html"
          }
        ],
        "url": "http://sheridan.org"
      },
      "url": "https://www.example.com/sessions/1365"
    },
    "duration": "PT3H57M",
    "maximumAttendeeCapacity": 3,
    "remainingAttendeeCapacity": 2
  }
}

Specs

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

Specs

Validations

✅ C2

C2 Request

PUT https://localhost:5001/api/openbooking/order-quotes/f61bde14-65a8-44bb-9066-dd584d840acf

{
  "@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]",
    "telephone": "945-883-6276",
    "givenName": "Littel"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644"
    }
  ],
  "payment": {
    "@type": "Payment",
    "name": "AcmeBroker Points",
    "accountId": "SN1593",
    "paymentProviderId": "STRIPE"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "OrderQuote",
  "@id": "https://localhost:5001/api/openbooking/order-quotes/f61bde14-65a8-44bb-9066-dd584d840acf",
  "lease": {
    "@type": "Lease",
    "leaseExpires": "2024-05-09T14:59:52+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",
    "email": "[email protected]",
    "givenName": "Littel",
    "telephone": "945-883-6276"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P12DT21H17M"
      },
      "orderedItem": {
        "@type": "ScheduledSession",
        "@id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644",
        "startDate": "2024-05-14T04:22:18+00:00",
        "endDate": "2024-05-14T08:19:18+00:00",
        "superEvent": {
          "@type": "SessionSeries",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365",
          "name": "Fresh Walking",
          "activity": [
            {
              "@type": "Concept",
              "@id": "https://openactive.io/activity-list#6bdea630-ad22-4e58-98a3-bca26ee3f1da",
              "inScheme": "https://openactive.io/activity-list",
              "prefLabel": "Rave Fitness"
            }
          ],
          "location": {
            "@type": "Place",
            "@id": "https://example.com/place/2",
            "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"
              }
            ],
            "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 000002",
            "url": "https://en.wikipedia.org/wiki/Premier_Inn"
          },
          "url": "https://example.com/events/1365"
        },
        "maximumAttendeeCapacity": 3,
        "remainingAttendeeCapacity": 3
      },
      "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

✅ 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%2Fscheduled-sessions%2F1365%2Fevents%2F13644?useCacheIfAvailable=true&expectedCapacity=2


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "ScheduledSession",
    "@id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644",
    "startDate": "2024-05-14T04:22:18+00:00",
    "endDate": "2024-05-14T08:19:18+00:00",
    "superEvent": {
      "@type": "SessionSeries",
      "@id": "https://localhost:5001/api/identifiers/session-series/1365",
      "identifier": 1365,
      "name": "GOLDEN: Fresh Walking",
      "activity": [
        {
          "@type": "Concept",
          "@id": "https://openactive.io/activity-list#95092977-5a20-4d6e-b312-8fddabe71544",
          "inScheme": "https://openactive.io/activity-list",
          "prefLabel": "Walking"
        }
      ],
      "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
      "location": {
        "@type": "Place",
        "@id": "https://example.com/place/2",
        "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"
          }
        ],
        "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 000002",
        "url": "https://en.wikipedia.org/wiki/Premier_Inn"
      },
      "offers": [
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Adult",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Adult",
            "maxValue": 59,
            "minValue": 18
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Junior",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Junior",
            "maxValue": 17
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Senior",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Senior",
            "minValue": 60
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Adult (off-peak)",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Adult (off-peak)",
            "maxValue": 59,
            "minValue": 18
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        }
      ],
      "organizer": {
        "@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": "04452 869106",
        "termsOfService": [
          {
            "@type": "PrivacyPolicy",
            "name": "Privacy Policy",
            "requiresExplicitConsent": false,
            "url": "https://example.com/privacy.html"
          }
        ],
        "url": "http://sheridan.org"
      },
      "url": "https://www.example.com/sessions/1365"
    },
    "duration": "PT3H57M",
    "maximumAttendeeCapacity": 3,
    "remainingAttendeeCapacity": 2
  }
}

Specs

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

Specs

Validations

✅ P

P Request

PUT https://localhost:5001/api/openbooking/order-proposals/f61bde14-65a8-44bb-9066-dd584d840acf

{
  "@context": "https://openactive.io/",
  "@type": "OrderProposal",
  "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]",
    "telephone": "945-883-6276",
    "givenName": "Littel"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "position": 0,
      "acceptedOffer": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
      "orderedItem": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644"
    }
  ],
  "totalPaymentDue": {
    "@type": "PriceSpecification",
    "price": 0,
    "priceCurrency": "GBP"
  }
}

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

{
  "@context": "https://openactive.io/",
  "@type": "OrderProposal",
  "@id": "https://localhost:5001/api/openbooking/order-proposals/f61bde14-65a8-44bb-9066-dd584d840acf",
  "orderProposalStatus": "https://openactive.io/AwaitingSellerConfirmation",
  "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",
    "email": "[email protected]",
    "givenName": "Littel",
    "telephone": "945-883-6276"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "@id": "https://localhost:5001/api/openbooking/orders/f61bde14-65a8-44bb-9066-dd584d840acf#/orderedItems/2829",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P12DT21H17M"
      },
      "orderedItem": {
        "@type": "ScheduledSession",
        "@id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644",
        "startDate": "2024-05-14T04:22:18+00:00",
        "endDate": "2024-05-14T08:19:18+00:00",
        "superEvent": {
          "@type": "SessionSeries",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365",
          "name": "Fresh Walking",
          "activity": [
            {
              "@type": "Concept",
              "@id": "https://openactive.io/activity-list#6bdea630-ad22-4e58-98a3-bca26ee3f1da",
              "inScheme": "https://openactive.io/activity-list",
              "prefLabel": "Rave Fitness"
            }
          ],
          "location": {
            "@type": "Place",
            "@id": "https://example.com/place/2",
            "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"
              }
            ],
            "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 000002",
            "url": "https://en.wikipedia.org/wiki/Premier_Inn"
          },
          "url": "https://example.com/events/1365"
        }
      },
      "position": 0,
      "unitTaxSpecification": [
        {
          "@type": "TaxChargeSpecification",
          "name": "VAT at 20%",
          "price": 0,
          "priceCurrency": "GBP",
          "rate": 0.2
        }
      ]
    }
  ],
  "orderProposalVersion": "https://localhost:5001/api/openbooking/order-proposals/f61bde14-65a8-44bb-9066-dd584d840acf/versions/8cfd823f-1f99-4f31-b2c2-28b5758ba34e",
  "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

✅ P >> validation of P

Specs

Validations

✅ Simulate Seller Approval (Test Interface Action)

Orders (order-proposals) Feed listen for 'f61bde14-65a8-44bb-9066-dd584d840acf' change (auth: primary) Request

POST http://localhost:3000/order-listeners/order-proposals/primary/f61bde14-65a8-44bb-9066-dd584d840acf


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

{
  "headers": {
    "Accept": "application/json, application/vnd.openactive.booking+json; version=1",
    "Cache-Control": "max-age=0",
    "Authorization": "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkIwNEY3QjkxREUzQjk0NzhDNjE4MzNGQjI0QUE1Q0RCIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE3MTUyNjQ5MDAsImV4cCI6MTcxNTI2ODUwMCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMyIsImF1ZCI6Im9wZW5ib29raW5nIiwiY2xpZW50X2lkIjoiNjg3ZWZiNWQtZTI4ZS00MWMzLWE0MjItODJjMDhkODU1NGVlIiwiaHR0cHM6Ly9vcGVuYWN0aXZlLmlvL2NsaWVudElkIjoiNjg3ZWZiNWQtZTI4ZS00MWMzLWE0MjItODJjMDhkODU1NGVlIiwianRpIjoiNDg1NEI5QzAxNkM2NEFBNzBENTEwMTIwRDI0MTlGNTkiLCJpYXQiOjE3MTUyNjQ5MDAsInNjb3BlIjpbIm9wZW5hY3RpdmUtb3JkZXJzZmVlZCJdfQ.rYyNGYcQJmSQREOCA7Z0n7xDy0Eplshqj7IjQpn1QNxiaaZ5F0b9LfMDOyI0h506U9_0SqsOrKqHmuNFapHITMP7rRB_eDrF4NDbLnaH3kliBJeGYhj908z-ZHm-UnGtkT32kByTBnHEvVohX6Vn2VWqC5Gwo7NEDaGOgBzFLHHqIfF-q4Xdfb1Yp_IJTOlKv4HnBQrL48ymrVM8wo3q5Zw4ONwtjXuM50Re-4lXlCatuCxTviQbNCGsnO5XcUqvvukYnk9TogHZqARskQY6ZXi5DAMB1JorVbu6JBZ4hcf2NaYHNiPyR4v0Z_ECrQWwlFmHmc_P40Jcm1n3zO6XBw"
  },
  "startingFeedPage": "https://localhost:5001/api/openbooking/order-proposals-rpde?afterTimestamp=638508632883050029&afterId=22ec9a00-97c0-4388-bbaa-2bd747bc0f92",
  "message": "Listening for UUID: 'f61bde14-65a8-44bb-9066-dd584d840acf' in feed: order-proposals, for Booking Partner: primary from startingFeedPage using headers"
}

Call TestInterface Action of type: test:SellerAcceptOrderProposalSimulateAction Request

POST https://localhost:5001/api/openbooking/test-interface/actions

{
  "@context": [
    "https://openactive.io/",
    "https://openactive.io/test-interface"
  ],
  "@type": "test:SellerAcceptOrderProposalSimulateAction",
  "object": {
    "@type": "OrderProposal",
    "@id": "https://localhost:5001/api/openbooking/order-proposals/f61bde14-65a8-44bb-9066-dd584d840acf"
  }
}

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

Specs

✅ OrderProposal Feed Update (after Simulate Seller Approval)

Orders (order-proposals) Feed collect for 'f61bde14-65a8-44bb-9066-dd584d840acf' change (auth: primary) Request

GET http://localhost:3000/order-listeners/order-proposals/primary/f61bde14-65a8-44bb-9066-dd584d840acf


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

{
  "state": "updated",
  "kind": "Order",
  "id": "f61bde14-65a8-44bb-9066-dd584d840acf",
  "modified": "638508632951258593",
  "data": {
    "@context": "https://openactive.io/",
    "@type": "OrderProposal",
    "@id": "https://localhost:5001/api/openbooking/order-proposals/f61bde14-65a8-44bb-9066-dd584d840acf",
    "identifier": "f61bde14-65a8-44bb-9066-dd584d840acf",
    "orderProposalStatus": "https://openactive.io/SellerAccepted",
    "orderedItem": [
      {
        "@type": "OrderItem",
        "@id": "https://localhost:5001/api/openbooking/orders/f61bde14-65a8-44bb-9066-dd584d840acf#/orderedItems/2829",
        "acceptedOffer": {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "price": 0,
          "priceCurrency": "GBP"
        },
        "orderedItem": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644"
      }
    ],
    "orderProposalVersion": "https://localhost:5001/api/openbooking/order-proposals/f61bde14-65a8-44bb-9066-dd584d840acf/versions/8cfd823f-1f99-4f31-b2c2-28b5758ba34e",
    "totalPaymentDue": {
      "@type": "PriceSpecification",
      "openBookingPrepayment": "https://openactive.io/Unavailable",
      "price": 0,
      "priceCurrency": "GBP"
    }
  }
}

Specs

✅ OrderProposal Feed Update (after Simulate Seller Approval) >> validation of OrderFeed

Specs

Validations

✅ B

Orders (order-proposals) Feed listen for 'f61bde14-65a8-44bb-9066-dd584d840acf' change (auth: primary) Request

POST http://localhost:3000/order-listeners/order-proposals/primary/f61bde14-65a8-44bb-9066-dd584d840acf


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

{
  "headers": {
    "Accept": "application/json, application/vnd.openactive.booking+json; version=1",
    "Cache-Control": "max-age=0",
    "Authorization": "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IkIwNEY3QjkxREUzQjk0NzhDNjE4MzNGQjI0QUE1Q0RCIiwidHlwIjoiYXQrand0In0.eyJuYmYiOjE3MTUyNjQ5MDAsImV4cCI6MTcxNTI2ODUwMCwiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMyIsImF1ZCI6Im9wZW5ib29raW5nIiwiY2xpZW50X2lkIjoiNjg3ZWZiNWQtZTI4ZS00MWMzLWE0MjItODJjMDhkODU1NGVlIiwiaHR0cHM6Ly9vcGVuYWN0aXZlLmlvL2NsaWVudElkIjoiNjg3ZWZiNWQtZTI4ZS00MWMzLWE0MjItODJjMDhkODU1NGVlIiwianRpIjoiNDg1NEI5QzAxNkM2NEFBNzBENTEwMTIwRDI0MTlGNTkiLCJpYXQiOjE3MTUyNjQ5MDAsInNjb3BlIjpbIm9wZW5hY3RpdmUtb3JkZXJzZmVlZCJdfQ.rYyNGYcQJmSQREOCA7Z0n7xDy0Eplshqj7IjQpn1QNxiaaZ5F0b9LfMDOyI0h506U9_0SqsOrKqHmuNFapHITMP7rRB_eDrF4NDbLnaH3kliBJeGYhj908z-ZHm-UnGtkT32kByTBnHEvVohX6Vn2VWqC5Gwo7NEDaGOgBzFLHHqIfF-q4Xdfb1Yp_IJTOlKv4HnBQrL48ymrVM8wo3q5Zw4ONwtjXuM50Re-4lXlCatuCxTviQbNCGsnO5XcUqvvukYnk9TogHZqARskQY6ZXi5DAMB1JorVbu6JBZ4hcf2NaYHNiPyR4v0Z_ECrQWwlFmHmc_P40Jcm1n3zO6XBw"
  },
  "startingFeedPage": "https://localhost:5001/api/openbooking/order-proposals-rpde?afterTimestamp=638508632951258593&afterId=f61bde14-65a8-44bb-9066-dd584d840acf",
  "message": "Listening for UUID: 'f61bde14-65a8-44bb-9066-dd584d840acf' in feed: order-proposals, for Booking Partner: primary from startingFeedPage using headers"
}

B Request

PUT https://localhost:5001/api/openbooking/orders/f61bde14-65a8-44bb-9066-dd584d840acf

{
  "@context": "https://openactive.io/",
  "@type": "Order",
  "orderProposalVersion": "https://localhost:5001/api/openbooking/order-proposals/f61bde14-65a8-44bb-9066-dd584d840acf/versions/8cfd823f-1f99-4f31-b2c2-28b5758ba34e"
}

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

{
  "@context": [
    "https://openactive.io/",
    "https://openactive.io/ns-beta"
  ],
  "@type": "Order",
  "@id": "https://localhost:5001/api/openbooking/orders/f61bde14-65a8-44bb-9066-dd584d840acf",
  "identifier": "f61bde14-65a8-44bb-9066-dd584d840acf",
  "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",
    "email": "[email protected]",
    "givenName": "Littel",
    "telephone": "945-883-6276"
  },
  "orderedItem": [
    {
      "@type": "OrderItem",
      "@id": "https://localhost:5001/api/openbooking/orders/f61bde14-65a8-44bb-9066-dd584d840acf#/orderedItems/2829",
      "acceptedOffer": {
        "@type": "Offer",
        "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
        "allowCustomerCancellationFullRefund": false,
        "openBookingPrepayment": "https://openactive.io/Unavailable",
        "price": 0,
        "priceCurrency": "GBP",
        "validFromBeforeStartDate": "P12DT21H17M"
      },
      "accessCode": [
        {
          "@type": "PropertyValue",
          "name": "Pin Code",
          "description": "750632"
        }
      ],
      "accessPass": [
        {
          "@type": "ImageObject",
          "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png"
        },
        {
          "@type": "Barcode",
          "text": "3979476123",
          "url": "https://via.placeholder.com/25x25/cccccc/9c9c9c.png",
          "beta:codeType": "code128"
        }
      ],
      "orderedItem": {
        "@type": "ScheduledSession",
        "@id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644",
        "startDate": "2024-05-14T04:22:18+00:00",
        "endDate": "2024-05-14T08:19:18+00:00",
        "superEvent": {
          "@type": "SessionSeries",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365",
          "name": "Fresh Walking",
          "activity": [
            {
              "@type": "Concept",
              "@id": "https://openactive.io/activity-list#6bdea630-ad22-4e58-98a3-bca26ee3f1da",
              "inScheme": "https://openactive.io/activity-list",
              "prefLabel": "Rave Fitness"
            }
          ],
          "location": {
            "@type": "Place",
            "@id": "https://example.com/place/2",
            "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"
              }
            ],
            "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 000002",
            "url": "https://en.wikipedia.org/wiki/Premier_Inn"
          },
          "url": "https://example.com/events/1365"
        },
        "maximumAttendeeCapacity": 3,
        "remainingAttendeeCapacity": 3
      },
      "orderItemStatus": "https://openactive.io/OrderItemConfirmed",
      "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

✅ OrderProposal Feed Deletion (after B)

Orders (order-proposals) Feed collect for 'f61bde14-65a8-44bb-9066-dd584d840acf' change (auth: primary) Request

GET http://localhost:3000/order-listeners/order-proposals/primary/f61bde14-65a8-44bb-9066-dd584d840acf


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

{
  "state": "deleted",
  "kind": "Order",
  "id": "f61bde14-65a8-44bb-9066-dd584d840acf",
  "modified": "638508632976202440"
}

Specs

✅ OrderProposal Feed Deletion (after B) >> validation of OrderFeed

Specs

Validations

✅ Assert Opportunity Capacity (after OrderProposal Feed Deletion (after B))

Opportunity Feed extract for OrderItem 0 Request

GET http://localhost:3000/opportunity/https%3A%2F%2Flocalhost%3A5001%2Fapi%2Fidentifiers%2Fscheduled-sessions%2F1365%2Fevents%2F13644?useCacheIfAvailable=true&expectedCapacity=2


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

{
  "data": {
    "@context": [
      "https://openactive.io/"
    ],
    "@type": "ScheduledSession",
    "@id": "https://localhost:5001/api/identifiers/scheduled-sessions/1365/events/13644",
    "startDate": "2024-05-14T04:22:18+00:00",
    "endDate": "2024-05-14T08:19:18+00:00",
    "superEvent": {
      "@type": "SessionSeries",
      "@id": "https://localhost:5001/api/identifiers/session-series/1365",
      "identifier": 1365,
      "name": "GOLDEN: Fresh Walking",
      "activity": [
        {
          "@type": "Concept",
          "@id": "https://openactive.io/activity-list#95092977-5a20-4d6e-b312-8fddabe71544",
          "inScheme": "https://openactive.io/activity-list",
          "prefLabel": "Walking"
        }
      ],
      "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
      "location": {
        "@type": "Place",
        "@id": "https://example.com/place/2",
        "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"
          }
        ],
        "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 000002",
        "url": "https://en.wikipedia.org/wiki/Premier_Inn"
      },
      "offers": [
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Adult",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Adult",
            "maxValue": 59,
            "minValue": 18
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Junior",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Junior",
            "maxValue": 17
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Senior",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Senior",
            "minValue": 60
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        },
        {
          "@type": "Offer",
          "@id": "https://localhost:5001/api/identifiers/session-series/1365#/offers/0",
          "name": "Adult (off-peak)",
          "acceptedPaymentMethod": [
            "http://purl.org/goodrelations/v1#Cash",
            "http://purl.org/goodrelations/v1#PaymentMethodCreditCard"
          ],
          "ageRestriction": {
            "@type": "QuantitativeValue",
            "name": "Adult (off-peak)",
            "maxValue": 59,
            "minValue": 18
          },
          "allowCustomerCancellationFullRefund": false,
          "openBookingFlowRequirement": [
            "https://openactive.io/OpenBookingApproval"
          ],
          "openBookingPrepayment": "https://openactive.io/Unavailable",
          "price": 0,
          "priceCurrency": "GBP",
          "validFromBeforeStartDate": "P12DT21H17M"
        }
      ],
      "organizer": {
        "@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": "04452 869106",
        "termsOfService": [
          {
            "@type": "PrivacyPolicy",
            "name": "Privacy Policy",
            "requiresExplicitConsent": false,
            "url": "https://example.com/privacy.html"
          }
        ],
        "url": "http://sheridan.org"
      },
      "url": "https://www.example.com/sessions/1365"
    },
    "duration": "PT3H57M",
    "maximumAttendeeCapacity": 3,
    "remainingAttendeeCapacity": 2
  }
}

Specs

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

Specs

Validations