seatsio 72.4.0 → 72.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yml +42 -0
- package/README.md +13 -0
- package/package.json +6 -6
- package/release.mjs +92 -0
- package/src/Events/Events.js +75 -6
- package/tests/events/changeBestAvailableObjectStatus.test.js +27 -15
- package/tests/events/changeObjectStatus.test.js +3 -3
- package/tests/events/changeObjectStatusForMultipleObjects.test.js +2 -2
- package/tests/events/createEvents.test.js +134 -0
- package/tests/sampleChart.json +351 -90
- package/.github/workflows/publish.yml +0 -19
- package/releasing.md +0 -4
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Very important!
|
|
2
|
+
# Make sure that the github token has read AND WRITE access on github.
|
|
3
|
+
# 1. hit https://github.com/seatsio/[REPO]/settings/actions
|
|
4
|
+
# 2. under "Workflow permissions", make sure "Read and write permissions" is checked instead of the (default?) read only.
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
name: Release
|
|
8
|
+
run-name: Release ${{ github.repository }}
|
|
9
|
+
on:
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
inputs:
|
|
12
|
+
versionToBump:
|
|
13
|
+
description: 'The version to bump. Major for incompatible API changes, minor for adding BC features'
|
|
14
|
+
required: true
|
|
15
|
+
type: choice
|
|
16
|
+
options:
|
|
17
|
+
- minor
|
|
18
|
+
- major
|
|
19
|
+
jobs:
|
|
20
|
+
release:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v3
|
|
24
|
+
- uses: fregante/setup-git-user@v2
|
|
25
|
+
- id: install-zx
|
|
26
|
+
run: npm i -g zx
|
|
27
|
+
- id: install-semver-tool
|
|
28
|
+
run: |
|
|
29
|
+
wget -O /usr/local/bin/semver https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver
|
|
30
|
+
chmod +x /usr/local/bin/semver
|
|
31
|
+
- run: zx ./release.mjs -v $VERSION_TO_BUMP
|
|
32
|
+
env:
|
|
33
|
+
VERSION_TO_BUMP: ${{ inputs.versionToBump }}
|
|
34
|
+
GH_TOKEN: ${{ github.token }}
|
|
35
|
+
- uses: actions/setup-node@v1
|
|
36
|
+
with:
|
|
37
|
+
node-version: 18
|
|
38
|
+
registry-url: https://registry.npmjs.org/
|
|
39
|
+
- run: yarn install
|
|
40
|
+
- run: yarn publish
|
|
41
|
+
env:
|
|
42
|
+
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
|
package/README.md
CHANGED
|
@@ -56,6 +56,19 @@ let event = await client.events.create(chart.key)
|
|
|
56
56
|
console.log(`Created a chart with key ${chart.key} and an event with key: ${event.key}`)
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
+
### Creating multiple events
|
|
60
|
+
|
|
61
|
+
```js
|
|
62
|
+
import { SeatsioClient, Region, Events } from 'seatsio'
|
|
63
|
+
|
|
64
|
+
let client = new SeatsioClient(Region.EU(), <WORKSPACE SECRET KEY>)
|
|
65
|
+
let chart = await client.charts.create()
|
|
66
|
+
let events = await client.events.createMultiple(chart.key, [ Events.eventCreationParams(), Events.eventCreationParams('aSpecificEventKey') ])
|
|
67
|
+
for (const event of events) {
|
|
68
|
+
console.log(`Created an event with key: ${event.key}`)
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
59
72
|
### Booking objects
|
|
60
73
|
|
|
61
74
|
Booking an object changes its status to `booked`. Booked seats are not selectable on a rendered chart.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "seatsio",
|
|
3
|
-
"version": "72.
|
|
3
|
+
"version": "72.7.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"description": "Official JavaScript and Node.JS client library for the Seats.io REST API",
|
|
6
6
|
"license": "MIT",
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
"url": "https://github.com/seatsio/seatsio-js"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"axios": "1.
|
|
16
|
+
"axios": "1.4.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"eslint": "8.
|
|
19
|
+
"eslint": "8.39.0",
|
|
20
20
|
"eslint-config-standard": "17.0.0",
|
|
21
21
|
"eslint-plugin-import": "2.27.5",
|
|
22
|
-
"eslint-plugin-n": "15.
|
|
22
|
+
"eslint-plugin-n": "15.7.0",
|
|
23
23
|
"eslint-plugin-promise": "6.1.1",
|
|
24
|
-
"jest": "29.
|
|
25
|
-
"jest-cli": "29.
|
|
24
|
+
"jest": "29.5.0",
|
|
25
|
+
"jest-cli": "29.5.0",
|
|
26
26
|
"uuid": "9.0.0"
|
|
27
27
|
}
|
|
28
28
|
}
|
package/release.mjs
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#!/usr/bin/env zx
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Script to release the seats.io java lib.
|
|
5
|
+
* - changes the version number in README.md
|
|
6
|
+
* - changes the version number in build.gradle
|
|
7
|
+
* - creates the release in Gihub (using gh cli)
|
|
8
|
+
*
|
|
9
|
+
*
|
|
10
|
+
* Prerequisites:
|
|
11
|
+
* - zx installed (https://github.com/google/zx)
|
|
12
|
+
* - gh cli installed (https://cli.github.com/)
|
|
13
|
+
* - semver cli installed (https://github.com/fsaintjacques/semver-tool)
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* zx ./release.mjs -v major/minor -n "release notes"
|
|
17
|
+
* */
|
|
18
|
+
|
|
19
|
+
// don't output the commands themselves
|
|
20
|
+
$.verbose = false
|
|
21
|
+
|
|
22
|
+
const versionToBump = getVersionToBump()
|
|
23
|
+
const latestVersion = await fetchLatestReleasedVersionNumber()
|
|
24
|
+
const nextVersion = await determineNextVersionNumber(latestVersion)
|
|
25
|
+
|
|
26
|
+
await pullLastVersion()
|
|
27
|
+
.then(bumpVersionInFiles)
|
|
28
|
+
.then(commitAndPush)
|
|
29
|
+
.then(release)
|
|
30
|
+
|
|
31
|
+
function getVersionToBump() {
|
|
32
|
+
if (!argv.v || !(argv.v === 'minor' || argv.v === 'major')) {
|
|
33
|
+
throw new Error ("Please specify -v major/minor")
|
|
34
|
+
}
|
|
35
|
+
return argv.v
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function removeLeadingV(tagName) {
|
|
39
|
+
if (tagName.startsWith('v')) {
|
|
40
|
+
return tagName.substring(1)
|
|
41
|
+
}
|
|
42
|
+
return tagName
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
async function fetchLatestReleasedVersionNumber() {
|
|
46
|
+
let result = await $`gh release view --json tagName`
|
|
47
|
+
let tagName = JSON.parse(result).tagName
|
|
48
|
+
return removeLeadingV(tagName)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async function determineNextVersionNumber(previous) {
|
|
52
|
+
return (await $`semver bump ${versionToBump} ${previous}`).stdout.trim()
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
async function bumpVersionInFiles() {
|
|
56
|
+
await replaceInFile("package.json", `"version": "${latestVersion}",`, `"version": "${nextVersion}",`)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function replaceInFile(filename, latestVersion, nextVersion) {
|
|
60
|
+
return await fs.readFile(filename, 'utf8')
|
|
61
|
+
.then(text => {
|
|
62
|
+
if (text.indexOf(latestVersion) < 0) {
|
|
63
|
+
throw new Error('Not the correct version. Could not find ' + latestVersion + ' in ' + filename)
|
|
64
|
+
}
|
|
65
|
+
return text
|
|
66
|
+
})
|
|
67
|
+
.then(text => text.replace(latestVersion, nextVersion))
|
|
68
|
+
.then(text => fs.writeFileSync(filename, text))
|
|
69
|
+
.then(() => gitAdd(filename))
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function pullLastVersion() {
|
|
73
|
+
await $`git checkout master`
|
|
74
|
+
await $`git pull origin master`
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function gitAdd(filename) {
|
|
78
|
+
return await $`git add ${filename}`
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function commitAndPush() {
|
|
82
|
+
await $`git commit -m "version bump"`
|
|
83
|
+
await $`git push origin master`
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function release() {
|
|
87
|
+
const newTag = 'v' + nextVersion
|
|
88
|
+
return await $`gh release create ${newTag} --generate-notes`.catch(error => {
|
|
89
|
+
console.error('something went wrong while creating the release. Please revert the version change!')
|
|
90
|
+
throw error
|
|
91
|
+
})
|
|
92
|
+
}
|
package/src/Events/Events.js
CHANGED
|
@@ -16,7 +16,6 @@ class Events {
|
|
|
16
16
|
this.channels = new Channels(this.client)
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
/* @return Event */
|
|
20
19
|
/**
|
|
21
20
|
* @param {string} chartKey
|
|
22
21
|
* @param {?string} eventKey
|
|
@@ -55,6 +54,73 @@ class Events {
|
|
|
55
54
|
.then((res) => new EventDeserializer().fromJson(res.data))
|
|
56
55
|
}
|
|
57
56
|
|
|
57
|
+
/**
|
|
58
|
+
* @param {?string} eventKey
|
|
59
|
+
* @param {?TableBookingConfig} tableBookingConfig
|
|
60
|
+
* @param {?string} socialDistancingRulesetKey
|
|
61
|
+
* @param {?object} objectCategories
|
|
62
|
+
* @param {?array} categories
|
|
63
|
+
* @returns an object containing the necessary data for event creation
|
|
64
|
+
* @static
|
|
65
|
+
*/
|
|
66
|
+
static eventCreationParams (eventKey = null, tableBookingConfig = null, socialDistancingRulesetKey = null, objectCategories = null, categories = null) {
|
|
67
|
+
const eventDefinition = {}
|
|
68
|
+
eventDefinition.eventKey = eventKey
|
|
69
|
+
eventDefinition.tableBookingConfig = tableBookingConfig
|
|
70
|
+
eventDefinition.socialDistancingRulesetKey = socialDistancingRulesetKey
|
|
71
|
+
eventDefinition.objectCategories = objectCategories
|
|
72
|
+
eventDefinition.categories = categories
|
|
73
|
+
return eventDefinition
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @param {string} chartKey
|
|
78
|
+
* @param {object[]} events use {@link Events.eventCreationParams()} as a convenience function to create these objects
|
|
79
|
+
* @returns {Promise<Event[]>}
|
|
80
|
+
*/
|
|
81
|
+
createMultiple (chartKey, events) {
|
|
82
|
+
const requestParameters = {}
|
|
83
|
+
|
|
84
|
+
requestParameters.chartKey = chartKey
|
|
85
|
+
requestParameters.events = []
|
|
86
|
+
|
|
87
|
+
if (events) {
|
|
88
|
+
for (let i = 0; i < events.length; i++) {
|
|
89
|
+
const event = {}
|
|
90
|
+
if (events[i].eventKey !== null) {
|
|
91
|
+
event.eventKey = events[i].eventKey
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (events[i].tableBookingConfig !== null) {
|
|
95
|
+
event.tableBookingConfig = events[i].tableBookingConfig
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (events[i].socialDistancingRulesetKey !== null) {
|
|
99
|
+
event.socialDistancingRulesetKey = events[i].socialDistancingRulesetKey
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (events[i].objectCategories !== null) {
|
|
103
|
+
event.objectCategories = events[i].objectCategories
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (events[i].categories != null) {
|
|
107
|
+
event.categories = events[i].categories
|
|
108
|
+
}
|
|
109
|
+
requestParameters.events.push(event)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return this.client.post('/events/actions/create-multiple', requestParameters)
|
|
114
|
+
.then((res) => {
|
|
115
|
+
const result = []
|
|
116
|
+
const deserializer = new EventDeserializer()
|
|
117
|
+
for (const event of res.data.events) {
|
|
118
|
+
result.push(deserializer.fromJson(event))
|
|
119
|
+
}
|
|
120
|
+
return result
|
|
121
|
+
})
|
|
122
|
+
}
|
|
123
|
+
|
|
58
124
|
/**
|
|
59
125
|
* @param {string} eventKey
|
|
60
126
|
* @returns {Promise<Event>}
|
|
@@ -389,8 +455,8 @@ class Events {
|
|
|
389
455
|
* @param {?string[]} channelKeys
|
|
390
456
|
* @returns {Promise<BestAvailableObjects>}
|
|
391
457
|
*/
|
|
392
|
-
bookBestAvailable (eventKey, number, categories = null, holdToken = null, extraData = null, ticketTypes = null, orderId = null, keepExtraData = null, ignoreChannels = null, channelKeys = null) {
|
|
393
|
-
return this.changeBestAvailableObjectStatus(encodeURIComponent(eventKey), number, EventObjectInfo.BOOKED, categories, holdToken, extraData, ticketTypes, orderId, keepExtraData, ignoreChannels, channelKeys)
|
|
458
|
+
bookBestAvailable (eventKey, number, categories = null, holdToken = null, extraData = null, ticketTypes = null, orderId = null, keepExtraData = null, ignoreChannels = null, channelKeys = null, tryToPreventOrphanSeats = null) {
|
|
459
|
+
return this.changeBestAvailableObjectStatus(encodeURIComponent(eventKey), number, EventObjectInfo.BOOKED, categories, holdToken, extraData, ticketTypes, orderId, keepExtraData, ignoreChannels, channelKeys, tryToPreventOrphanSeats)
|
|
394
460
|
}
|
|
395
461
|
|
|
396
462
|
/**
|
|
@@ -436,8 +502,8 @@ class Events {
|
|
|
436
502
|
* @param {?string[]} ticketTypes
|
|
437
503
|
* @returns {Promise<BestAvailableObjects>}
|
|
438
504
|
*/
|
|
439
|
-
holdBestAvailable (eventKey, number, holdToken, categories = null, extraData = null, ticketTypes = null, orderId = null, keepExtraData = null, ignoreChannels = null, channelKeys = null) {
|
|
440
|
-
return this.changeBestAvailableObjectStatus(encodeURIComponent(eventKey), number, EventObjectInfo.HELD, categories, holdToken, extraData, ticketTypes, orderId, keepExtraData, ignoreChannels, channelKeys)
|
|
505
|
+
holdBestAvailable (eventKey, number, holdToken, categories = null, extraData = null, ticketTypes = null, orderId = null, keepExtraData = null, ignoreChannels = null, channelKeys = null, tryToPreventOrphanSeats = null) {
|
|
506
|
+
return this.changeBestAvailableObjectStatus(encodeURIComponent(eventKey), number, EventObjectInfo.HELD, categories, holdToken, extraData, ticketTypes, orderId, keepExtraData, ignoreChannels, channelKeys, tryToPreventOrphanSeats)
|
|
441
507
|
}
|
|
442
508
|
|
|
443
509
|
/**
|
|
@@ -454,7 +520,7 @@ class Events {
|
|
|
454
520
|
* @param {?string[]} channelKeys
|
|
455
521
|
* @returns {Promise<BestAvailableObjects>}
|
|
456
522
|
*/
|
|
457
|
-
changeBestAvailableObjectStatus (eventKey, number, status, categories = null, holdToken = null, extraData = null, ticketTypes = null, orderId = null, keepExtraData = null, ignoreChannels = null, channelKeys = null) {
|
|
523
|
+
changeBestAvailableObjectStatus (eventKey, number, status, categories = null, holdToken = null, extraData = null, ticketTypes = null, orderId = null, keepExtraData = null, ignoreChannels = null, channelKeys = null, tryToPreventOrphanSeats = null) {
|
|
458
524
|
const requestParameters = {}
|
|
459
525
|
const bestAvailable = {}
|
|
460
526
|
requestParameters.status = status
|
|
@@ -474,6 +540,9 @@ class Events {
|
|
|
474
540
|
if (ticketTypes !== null) {
|
|
475
541
|
bestAvailable.ticketTypes = ticketTypes
|
|
476
542
|
}
|
|
543
|
+
if (tryToPreventOrphanSeats !== null) {
|
|
544
|
+
bestAvailable.tryToPreventOrphanSeats = tryToPreventOrphanSeats
|
|
545
|
+
}
|
|
477
546
|
if (keepExtraData !== null) {
|
|
478
547
|
requestParameters.keepExtraData = keepExtraData
|
|
479
548
|
}
|
|
@@ -10,7 +10,7 @@ test('should change best available object status', async () => {
|
|
|
10
10
|
const bestAvailableObjs = await client.events.changeBestAvailableObjectStatus(event.key, 2, 'lolzor')
|
|
11
11
|
|
|
12
12
|
expect(bestAvailableObjs.nextToEachOther).toBe(true)
|
|
13
|
-
expect(bestAvailableObjs.objects.sort()).toEqual(['
|
|
13
|
+
expect(bestAvailableObjs.objects.sort()).toEqual(['A-4', 'A-5'])
|
|
14
14
|
})
|
|
15
15
|
|
|
16
16
|
test('should change best available object status with categories', async () => {
|
|
@@ -32,9 +32,9 @@ test('should change best available object status with extra data', async () => {
|
|
|
32
32
|
|
|
33
33
|
const bestAvailableObjs = await client.events.changeBestAvailableObjectStatus(event.key, 2, 'lolzor', null, null, extraData)
|
|
34
34
|
|
|
35
|
-
const objectInfo4 = await client.events.retrieveObjectInfo(event.key, '
|
|
36
|
-
const objectInfo5 = await client.events.retrieveObjectInfo(event.key, '
|
|
37
|
-
expect(bestAvailableObjs.objects.sort()).toEqual(['
|
|
35
|
+
const objectInfo4 = await client.events.retrieveObjectInfo(event.key, 'A-4')
|
|
36
|
+
const objectInfo5 = await client.events.retrieveObjectInfo(event.key, 'A-5')
|
|
37
|
+
expect(bestAvailableObjs.objects.sort()).toEqual(['A-4', 'A-5'])
|
|
38
38
|
expect(objectInfo4.extraData).toEqual(extraData[0])
|
|
39
39
|
expect(objectInfo5.extraData).toEqual(extraData[1])
|
|
40
40
|
})
|
|
@@ -75,7 +75,19 @@ test('should book best available object with extra data', async () => {
|
|
|
75
75
|
const bestAvailableObjs = await client.events.bookBestAvailable(event.key, 3, null, null, extraData)
|
|
76
76
|
|
|
77
77
|
expect(bestAvailableObjs.nextToEachOther).toBe(true)
|
|
78
|
-
expect(bestAvailableObjs.objects).toEqual(['
|
|
78
|
+
expect(bestAvailableObjs.objects).toEqual(['A-4', 'A-5', 'A-6'])
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
test('should book best available while leaving orphan seats', async () => {
|
|
82
|
+
const { client, user } = await testUtils.createTestUserAndClient()
|
|
83
|
+
const chartKey = testUtils.getChartKey()
|
|
84
|
+
await testUtils.createTestChart(chartKey, user.secretKey)
|
|
85
|
+
const event = await client.events.create(chartKey)
|
|
86
|
+
await client.events.book(event.key, ['A-4', 'A-5'])
|
|
87
|
+
|
|
88
|
+
const bestAvailableObjs = await client.events.bookBestAvailable(event.key, 2, null, null, null, null, null, null, null, null, false)
|
|
89
|
+
|
|
90
|
+
expect(bestAvailableObjs.objects).toEqual(['A-2', 'A-3'])
|
|
79
91
|
})
|
|
80
92
|
|
|
81
93
|
test('should book best available object', async () => {
|
|
@@ -87,7 +99,7 @@ test('should book best available object', async () => {
|
|
|
87
99
|
const bestAvailableObjs = await client.events.bookBestAvailable(event.key, 3)
|
|
88
100
|
|
|
89
101
|
expect(bestAvailableObjs.nextToEachOther).toBe(true)
|
|
90
|
-
expect(bestAvailableObjs.objects).toEqual(['
|
|
102
|
+
expect(bestAvailableObjs.objects).toEqual(['A-4', 'A-5', 'A-6'])
|
|
91
103
|
})
|
|
92
104
|
|
|
93
105
|
test('should hold best available object ', async () => {
|
|
@@ -139,11 +151,11 @@ test('should respect keepExtraData=true', async () => {
|
|
|
139
151
|
const chartKey = testUtils.getChartKey()
|
|
140
152
|
await testUtils.createTestChart(chartKey, user.secretKey)
|
|
141
153
|
const event = await client.events.create(chartKey)
|
|
142
|
-
await client.events.updateExtraData(event.key, '
|
|
154
|
+
await client.events.updateExtraData(event.key, 'A-5', { foo: 'bar' })
|
|
143
155
|
|
|
144
156
|
await client.events.changeBestAvailableObjectStatus(event.key, 1, 'someStatus', null, null, null, null, null, true)
|
|
145
157
|
|
|
146
|
-
const status = await client.events.retrieveObjectInfo(event.key, '
|
|
158
|
+
const status = await client.events.retrieveObjectInfo(event.key, 'A-5')
|
|
147
159
|
expect(status.extraData).toEqual({ foo: 'bar' })
|
|
148
160
|
})
|
|
149
161
|
|
|
@@ -152,11 +164,11 @@ test('should respect keepExtraData=false', async () => {
|
|
|
152
164
|
const chartKey = testUtils.getChartKey()
|
|
153
165
|
await testUtils.createTestChart(chartKey, user.secretKey)
|
|
154
166
|
const event = await client.events.create(chartKey)
|
|
155
|
-
await client.events.updateExtraData(event.key, '
|
|
167
|
+
await client.events.updateExtraData(event.key, 'A-5', { foo: 'bar' })
|
|
156
168
|
|
|
157
169
|
await client.events.changeBestAvailableObjectStatus(event.key, 1, 'someStatus', null, null, null, null, null, false)
|
|
158
170
|
|
|
159
|
-
const status = await client.events.retrieveObjectInfo(event.key, '
|
|
171
|
+
const status = await client.events.retrieveObjectInfo(event.key, 'A-5')
|
|
160
172
|
expect(status.extraData).toBeFalsy()
|
|
161
173
|
})
|
|
162
174
|
|
|
@@ -165,11 +177,11 @@ test('should respect no keepExtraData', async () => {
|
|
|
165
177
|
const chartKey = testUtils.getChartKey()
|
|
166
178
|
await testUtils.createTestChart(chartKey, user.secretKey)
|
|
167
179
|
const event = await client.events.create(chartKey)
|
|
168
|
-
await client.events.updateExtraData(event.key, '
|
|
180
|
+
await client.events.updateExtraData(event.key, 'A-5', { foo: 'bar' })
|
|
169
181
|
|
|
170
182
|
await client.events.changeBestAvailableObjectStatus(event.key, 1, 'someStatus')
|
|
171
183
|
|
|
172
|
-
const status = await client.events.retrieveObjectInfo(event.key, '
|
|
184
|
+
const status = await client.events.retrieveObjectInfo(event.key, 'A-5')
|
|
173
185
|
expect(status.extraData).toBeFalsy()
|
|
174
186
|
})
|
|
175
187
|
|
|
@@ -181,11 +193,11 @@ test('should accept channel keys', async () => {
|
|
|
181
193
|
await client.events.channels.replace(event.key, {
|
|
182
194
|
channelKey1: { name: 'channel 1', color: '#FFAABB', index: 1 }
|
|
183
195
|
})
|
|
184
|
-
await client.events.channels.setObjects(event.key, { channelKey1: ['
|
|
196
|
+
await client.events.channels.setObjects(event.key, { channelKey1: ['A-6'] })
|
|
185
197
|
|
|
186
198
|
const bestAvailableObjs = await client.events.changeBestAvailableObjectStatus(event.key, 1, 'lolzor', null, null, null, null, null, null, null, ['channelKey1'])
|
|
187
199
|
|
|
188
|
-
expect(bestAvailableObjs.objects).toEqual(['
|
|
200
|
+
expect(bestAvailableObjs.objects).toEqual(['A-6'])
|
|
189
201
|
})
|
|
190
202
|
|
|
191
203
|
test('should accept ignoreChannels', async () => {
|
|
@@ -200,5 +212,5 @@ test('should accept ignoreChannels', async () => {
|
|
|
200
212
|
|
|
201
213
|
const bestAvailableObjs = await client.events.changeBestAvailableObjectStatus(event.key, 1, 'lolzor', null, null, null, null, null, null, true)
|
|
202
214
|
|
|
203
|
-
expect(bestAvailableObjs.objects).toEqual(['
|
|
215
|
+
expect(bestAvailableObjs.objects).toEqual(['A-5'])
|
|
204
216
|
})
|
|
@@ -29,7 +29,7 @@ test('should change object status', async () => {
|
|
|
29
29
|
isAvailable: false,
|
|
30
30
|
availabilityReason: 'lolzor',
|
|
31
31
|
isDisabledBySocialDistancing: false,
|
|
32
|
-
distanceToFocalPoint:
|
|
32
|
+
distanceToFocalPoint: 98.67842540608864
|
|
33
33
|
}
|
|
34
34
|
})
|
|
35
35
|
})
|
|
@@ -62,9 +62,9 @@ test('should change object status with GA', async () => {
|
|
|
62
62
|
await testUtils.createTestChart(chartKey, user.secretKey)
|
|
63
63
|
const event = await client.events.create(chartKey)
|
|
64
64
|
|
|
65
|
-
const result = await client.events.changeObjectStatus(event.key, '
|
|
65
|
+
const result = await client.events.changeObjectStatus(event.key, 'GA2', 'lolzor')
|
|
66
66
|
|
|
67
|
-
expect(Object.keys(result.objects)).toEqual(['
|
|
67
|
+
expect(Object.keys(result.objects)).toEqual(['GA2'])
|
|
68
68
|
})
|
|
69
69
|
|
|
70
70
|
test('should change object status with GA and quantity', async () => {
|
|
@@ -101,13 +101,13 @@ test('should change object status for multiple objects with quantity', async ()
|
|
|
101
101
|
const event = await client.events.create(chartKey)
|
|
102
102
|
const objects = [
|
|
103
103
|
(new ObjectProperties('GA1')).setQuantity(5),
|
|
104
|
-
(new ObjectProperties('
|
|
104
|
+
(new ObjectProperties('GA2')).setQuantity(10)
|
|
105
105
|
]
|
|
106
106
|
|
|
107
107
|
await client.events.changeObjectStatus(event.key, objects, 'lolzor')
|
|
108
108
|
|
|
109
109
|
const status1 = await client.events.retrieveObjectInfo(event.key, 'GA1')
|
|
110
|
-
const status2 = await client.events.retrieveObjectInfo(event.key, '
|
|
110
|
+
const status2 = await client.events.retrieveObjectInfo(event.key, 'GA2')
|
|
111
111
|
expect(status1.numBooked).toBe(5)
|
|
112
112
|
expect(status2.numBooked).toBe(10)
|
|
113
113
|
})
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
const testUtils = require('../testUtils.js')
|
|
2
|
+
const SocialDistancingRuleset = require('../../src/Charts/SocialDistancingRuleset.js')
|
|
3
|
+
const TableBookingConfig = require('../../src/Events/TableBookingConfig')
|
|
4
|
+
const Category = require('../../src/Charts/Category')
|
|
5
|
+
const Events = require('../../src/Events/Events')
|
|
6
|
+
|
|
7
|
+
test('should check that a minimum of one event is required', async () => {
|
|
8
|
+
const { client, user } = await testUtils.createTestUserAndClient()
|
|
9
|
+
const chartKey = testUtils.getChartKey()
|
|
10
|
+
await testUtils.createTestChart(chartKey, user.secretKey)
|
|
11
|
+
|
|
12
|
+
try {
|
|
13
|
+
await client.events.createMultiple(chartKey)
|
|
14
|
+
} catch (e) {
|
|
15
|
+
expect(e.errors.length).toEqual(1)
|
|
16
|
+
expect(e.errors[0].code).toBe('GENERAL_ERROR')
|
|
17
|
+
expect(e.errors[0].message).toBe('#/events: expected minimum item count: 1, found: 0')
|
|
18
|
+
}
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('should check that an empty object is a valid event definition', async () => {
|
|
22
|
+
const { client, user } = await testUtils.createTestUserAndClient()
|
|
23
|
+
const chartKey = testUtils.getChartKey()
|
|
24
|
+
await testUtils.createTestChart(chartKey, user.secretKey)
|
|
25
|
+
|
|
26
|
+
const events = await client.events.createMultiple(chartKey, [{}])
|
|
27
|
+
|
|
28
|
+
expect(events).toHaveLength(1)
|
|
29
|
+
expect(events[0].key).toBeTruthy()
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test('should create a single event', async () => {
|
|
33
|
+
const { client } = await testUtils.createTestUserAndClient()
|
|
34
|
+
const chart = await client.charts.create()
|
|
35
|
+
|
|
36
|
+
const events = await client.events.createMultiple(chart.key, [
|
|
37
|
+
Events.eventCreationParams('eventKey')
|
|
38
|
+
])
|
|
39
|
+
|
|
40
|
+
expect(events).toHaveLength(1)
|
|
41
|
+
expect(events[0].key).toEqual('eventKey')
|
|
42
|
+
|
|
43
|
+
const retrievedEvent = await client.events.retrieve('eventKey')
|
|
44
|
+
expect(retrievedEvent.key).toEqual('eventKey')
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
test('should create multiple events', async () => {
|
|
48
|
+
const { client } = await testUtils.createTestUserAndClient()
|
|
49
|
+
const chart = await client.charts.create()
|
|
50
|
+
|
|
51
|
+
const events = [
|
|
52
|
+
Events.eventCreationParams('eventKey1'),
|
|
53
|
+
Events.eventCreationParams('eventKey2')
|
|
54
|
+
]
|
|
55
|
+
const createdEvents = await client.events.createMultiple(chart.key, events)
|
|
56
|
+
|
|
57
|
+
expect(createdEvents).toHaveLength(2)
|
|
58
|
+
expect(createdEvents[0].key).toEqual('eventKey1')
|
|
59
|
+
expect(createdEvents[1].key).toEqual('eventKey2')
|
|
60
|
+
|
|
61
|
+
for (const event of events) {
|
|
62
|
+
const retrievedEvent = await client.events.retrieve(event.eventKey)
|
|
63
|
+
expect(retrievedEvent.key).toEqual(event.eventKey)
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
test('supports tableBookingConfig custom', async () => {
|
|
68
|
+
const { client, user } = await testUtils.createTestUserAndClient()
|
|
69
|
+
const chartKey = testUtils.getChartKey()
|
|
70
|
+
await testUtils.createTestChartWithTables(chartKey, user.secretKey)
|
|
71
|
+
const tableBookingConfig = TableBookingConfig.custom({ T1: 'BY_TABLE', T2: 'BY_SEAT' })
|
|
72
|
+
|
|
73
|
+
const events = await client.events.createMultiple(chartKey, [
|
|
74
|
+
Events.eventCreationParams(null, tableBookingConfig)
|
|
75
|
+
])
|
|
76
|
+
|
|
77
|
+
expect(events[0].key).toBeTruthy()
|
|
78
|
+
expect(events[0].tableBookingConfig).toEqual(tableBookingConfig)
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
test('supports tableBookingConfig inherit', async () => {
|
|
82
|
+
const { client, user } = await testUtils.createTestUserAndClient()
|
|
83
|
+
const chartKey = testUtils.getChartKey()
|
|
84
|
+
await testUtils.createTestChartWithTables(chartKey, user.secretKey)
|
|
85
|
+
|
|
86
|
+
const events = await client.events.createMultiple(chartKey, [
|
|
87
|
+
Events.eventCreationParams(null, TableBookingConfig.inherit())
|
|
88
|
+
])
|
|
89
|
+
|
|
90
|
+
expect(events[0].key).toBeTruthy()
|
|
91
|
+
expect(events[0].tableBookingConfig).toEqual(TableBookingConfig.inherit())
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
test('it supports a social distancing ruleset key', async () => {
|
|
95
|
+
const { client } = await testUtils.createTestUserAndClient()
|
|
96
|
+
const chart = await client.charts.create()
|
|
97
|
+
const rulesets = { ruleset1: SocialDistancingRuleset.ruleBased('My ruleset').build() }
|
|
98
|
+
await client.charts.saveSocialDistancingRulesets(chart.key, rulesets)
|
|
99
|
+
|
|
100
|
+
const events = await client.events.createMultiple(chart.key, [
|
|
101
|
+
Events.eventCreationParams(null, null, 'ruleset1')
|
|
102
|
+
])
|
|
103
|
+
|
|
104
|
+
expect(events[0].socialDistancingRulesetKey).toBe('ruleset1')
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
test('it supports object categories', async () => {
|
|
108
|
+
const { client, user } = await testUtils.createTestUserAndClient()
|
|
109
|
+
const chartKey = testUtils.getChartKey()
|
|
110
|
+
await testUtils.createTestChart(chartKey, user.secretKey)
|
|
111
|
+
|
|
112
|
+
const events = await client.events.createMultiple(chartKey, [
|
|
113
|
+
Events.eventCreationParams(null, null, null, { 'A-1': 10 })
|
|
114
|
+
])
|
|
115
|
+
|
|
116
|
+
expect(events[0].objectCategories).toEqual({ 'A-1': 10 })
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
test('it supports categories', async () => {
|
|
120
|
+
const { client, user } = await testUtils.createTestUserAndClient()
|
|
121
|
+
const chartKey = testUtils.getChartKey()
|
|
122
|
+
await testUtils.createTestChart(chartKey, user.secretKey)
|
|
123
|
+
|
|
124
|
+
const eventCategory = new Category('eventCat1', 'Event Level Category', '#AAABBB')
|
|
125
|
+
|
|
126
|
+
const events = await client.events.createMultiple(chartKey, [
|
|
127
|
+
Events.eventCreationParams(null, null, null, null, [eventCategory])
|
|
128
|
+
])
|
|
129
|
+
|
|
130
|
+
expect(events[0].categories.length).toEqual(4) // 3 from sampleChart.json, 1 event level category
|
|
131
|
+
expect(events[0].categories.filter(cat => cat.key === 'eventCat1').length).toEqual(1)
|
|
132
|
+
expect(events[0].categories.filter(cat => cat.key === 'eventCat1')[0].label).toEqual('Event Level Category')
|
|
133
|
+
expect(events[0].categories.filter(cat => cat.key === 'eventCat1')[0].color).toEqual('#AAABBB')
|
|
134
|
+
})
|