feat: add ticket client demo data

This commit is contained in:
zoujing committed 2026-07-30 16:21:19 +08:00
1 parent 516a9431f0
commit c4e03548d5
2 files changed
+198

No files matched your search

+32
View File
@@ -14,6 +14,38 @@ import {
validateBooking,
} from './model.mjs'
test('provides coherent default visitor ticket data', async () => {
const {
AVAILABLE_DATES,
GROUPS,
INITIAL_ORDERS,
INITIAL_TRAVELERS,
INSURANCE,
PLACEHOLDER_IMAGE,
PRODUCTS,
REFUND_REASONS,
} = await import('./data.js')
assert.equal(PLACEHOLDER_IMAGE, 'https://one-feel-bucket.oss-cn-guangzhou.aliyuncs.com/oneFeel/2082673896938569729.jpg')
assert.deepEqual(GROUPS.map(({ id }) => id), ['ticket', 'vip', 'bus', 'package', 'tour', 'play'])
assert.deepEqual(GROUPS.map(({ sortOrder, enabled }) => [sortOrder, enabled]), [[1, true], [2, true], [3, true], [4, true], [5, true], [6, true]])
assert.deepEqual(PRODUCTS.map(({ id }) => id), ['adult', 'elderly', 'minor', 'free', 'vip-fast', 'direct-bus', 'classic', 'day-tour', 'boat', 'guide'])
const productsById = new Map(PRODUCTS.map((product) => [product.id, product]))
assert.ok(GROUPS.every((group) => group.productIds.every((productId) => productsById.has(productId))))
assert.deepEqual(GROUPS.flatMap((group) => group.productIds).sort(), PRODUCTS.map(({ id }) => id).sort())
assert.ok(PRODUCTS.every((product) => product.images[0] === PLACEHOLDER_IMAGE && product.reservation && product.entitlements.length && Number.isFinite(product.salePrice) && Number.isFinite(product.stock) && Number.isFinite(product.sold)))
assert.deepEqual(PRODUCTS.slice(0, 3).map(({ id, salePrice, sold }) => [id, salePrice, sold]), [['adult', 160, 2386], ['elderly', 100, 816], ['minor', 100, 629]])
assert.ok(INITIAL_TRAVELERS.length > 0)
assert.ok(INITIAL_TRAVELERS.every((traveler) => traveler.id && traveler.name && traveler.idType && traveler.idNumber && traveler.phone))
assert.equal(INITIAL_ORDERS.length, 2)
assert.ok(INITIAL_ORDERS.some((order) => order.entitlements.some((entitlement) => entitlement.fulfillment === 'third_party') && order.gateCredential))
assert.ok(INITIAL_ORDERS.some((order) => order.entitlements.some((entitlement) => entitlement.fulfillment === 'third_party') && order.entitlements.some((entitlement) => entitlement.fulfillment === 'self') && order.gateCredential && order.selfCredential))
assert.equal(AVAILABLE_DATES.length, 5)
assert.ok(AVAILABLE_DATES.some((date) => date.stock === 0))
assert.equal(REFUND_REASONS.length, 4)
assert.equal(INSURANCE.price, 5)
})
const adultProduct = {
id: 'adult',
name: '成人票',