@tellescope/sdk 1.185.2 → 1.187.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.
@@ -223,6 +223,8 @@ const setup_tests = async () => {
223
223
  // ensure that going to "Non-Admin" triggers a role change
224
224
  await sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: ['Test'] }, { replaceObjectFields: true })
225
225
 
226
+ await wait(undefined, 1000) // wait for role change to propagate so authenticate does fail next
227
+
226
228
  await sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)
227
229
  await async_test('non admin authenticated', sdkNonAdmin.test_authenticated, { expectedResult: 'Authenticated!' })
228
230
 
@@ -1276,6 +1278,28 @@ const chat_room_tests = async () => {
1276
1278
  () => enduserSDK.api.chat_rooms.display_info({ id: room.id }),
1277
1279
  { onResult: r => r.id === room.id && verifyRoomDisplayInfo(r.display_info) }
1278
1280
  )
1281
+ await async_test(
1282
+ "non admin can't get room without enduser",
1283
+ () => sdkNonAdmin.api.chat_rooms.getOne({ id: room.id }),
1284
+ handleAnyError
1285
+ )
1286
+ await async_test(
1287
+ "non admin can't get chats from room without enduser",
1288
+ () => sdkNonAdmin.api.chats.getSome({ filter: { roomId: room.id } }),
1289
+ handleAnyError
1290
+ )
1291
+ await sdk.api.endusers.updateOne(enduser.id, { assignedTo: [sdkNonAdmin.userInfo.id] })
1292
+ await async_test(
1293
+ "non admin can get room with enduser",
1294
+ () => sdkNonAdmin.api.chat_rooms.getOne(room.id),
1295
+ passOnAnyResult
1296
+ )
1297
+ await async_test(
1298
+ "non admin can get chats from room with enduser",
1299
+ () => sdkNonAdmin.api.chats.getSome({ filter: { roomId: room.id } }),
1300
+ passOnAnyResult
1301
+ )
1302
+
1279
1303
  await sdk.api.chat_rooms.deleteOne(room.id)
1280
1304
 
1281
1305
 
@@ -3281,10 +3305,190 @@ const formSubmittedTriggerTests = async () => {
3281
3305
  ])
3282
3306
  }
3283
3307
 
3308
+ const order_created_tests = async () => {
3309
+ log_header("Automation Trigger Tests (Order Created)")
3310
+
3311
+ const t1 = await sdk.api.automation_triggers.createOne({
3312
+ event: { type: 'Order Created', info: {} },
3313
+ action: { type: 'Add Tags', info: { tags: ['No conditions'] }},
3314
+ status: 'Active',
3315
+ title: "No conditions"
3316
+ })
3317
+ const t2 = await sdk.api.automation_triggers.createOne({
3318
+ event: { type: 'Order Created', info: { titles: ['Title'] } },
3319
+ action: { type: 'Add Tags', info: { tags: ['Title'] }},
3320
+ status: 'Active',
3321
+ title: "Title Condition"
3322
+ })
3323
+ const t3 = await sdk.api.automation_triggers.createOne({
3324
+ event: { type: 'Order Created', info: { fills: ['Fill'] } },
3325
+ action: { type: 'Add Tags', info: { tags: ['Fill'] }},
3326
+ status: 'Active',
3327
+ title: "Fill Condition"
3328
+ })
3329
+ const t4 = await sdk.api.automation_triggers.createOne({
3330
+ event: { type: 'Order Created', info: { partialFrequency: 'freq' } },
3331
+ action: { type: 'Add Tags', info: { tags: ['Frequency'] }},
3332
+ status: 'Active',
3333
+ title: "Frequency Condition"
3334
+ })
3335
+
3336
+ const e = await sdk.api.endusers.createOne({})
3337
+
3338
+ await sdk.api.enduser_orders.createOne({ status: 'test', source: 'test', title: 'nomatch', fill: 'nomatch', frequency: 'nomatch', externalId: '1', enduserId: e.id })
3339
+ await wait(undefined, 500) // allow triggers to happen
3340
+ await async_test(
3341
+ "First tag is added",
3342
+ () => sdk.api.endusers.getOne(e.id),
3343
+ { onResult: e => !!(
3344
+ e.tags?.length === 1
3345
+ && e.tags?.includes('No conditions')
3346
+ && !e.tags?.includes('Title')
3347
+ && !e.tags?.includes('Fill')
3348
+ && !e.tags?.includes('Frequency')
3349
+ ) }
3350
+ )
3351
+
3352
+ await sdk.api.enduser_orders.createOne({ status: 'test', source: 'test', externalId: '2', enduserId: e.id, title: "Title" })
3353
+ await wait(undefined, 500) // allow triggers to happen
3354
+ await async_test(
3355
+ "Second tag is added",
3356
+ () => sdk.api.endusers.getOne(e.id),
3357
+ { onResult: e => !!(
3358
+ e.tags?.length === 2
3359
+ && e.tags?.includes('No conditions')
3360
+ && e.tags?.includes('Title')
3361
+ && !e.tags?.includes('Fill')
3362
+ && !e.tags?.includes('Frequency')
3363
+ ) }
3364
+ )
3365
+
3366
+ await sdk.api.enduser_orders.createOne({ status: 'test', source: 'test', externalId: '3', enduserId: e.id, title: "Title", fill: "Fill" })
3367
+ await wait(undefined, 500) // allow triggers to happen
3368
+ await async_test(
3369
+ "Third tag is added",
3370
+ () => sdk.api.endusers.getOne(e.id),
3371
+ { onResult: e => !!(
3372
+ e.tags?.length === 3
3373
+ && e.tags?.includes('No conditions')
3374
+ && e.tags?.includes('Title')
3375
+ && e.tags?.includes('Fill')
3376
+ && !e.tags?.includes('Frequency')
3377
+ ) }
3378
+ )
3379
+
3380
+ await sdk.api.enduser_orders.createOne({ status: 'test', source: 'test', externalId: '4', enduserId: e.id, title: "Title", fill: "Fill", frequency: '1029freq--29' })
3381
+ await wait(undefined, 500) // allow triggers to happen
3382
+ await async_test(
3383
+ "Fourth tag is added",
3384
+ () => sdk.api.endusers.getOne(e.id),
3385
+ { onResult: e => !!(
3386
+ e.tags?.length === 4
3387
+ && e.tags?.includes('No conditions')
3388
+ && e.tags?.includes('Title')
3389
+ && e.tags?.includes('Fill')
3390
+ && e.tags?.includes('Frequency')
3391
+ ) }
3392
+ )
3393
+
3394
+ await Promise.all([
3395
+ sdk.api.automation_triggers.deleteOne(t1.id),
3396
+ sdk.api.automation_triggers.deleteOne(t2.id),
3397
+ sdk.api.automation_triggers.deleteOne(t3.id),
3398
+ sdk.api.automation_triggers.deleteOne(t4.id),
3399
+ sdk.api.endusers.deleteOne(e.id),
3400
+ ])
3401
+ }
3402
+
3403
+ const tag_added_tests = async () => {
3404
+ log_header("Automation Trigger Tests (Tag Added)")
3405
+
3406
+ const t1 = await sdk.api.automation_triggers.createOne({
3407
+ event: { type: 'Tag Added', info: { tag: "1" } },
3408
+ action: { type: 'Add Tags', info: { tags: ['1 Added'] }},
3409
+ status: 'Active',
3410
+ title: "No conditions"
3411
+ })
3412
+ const t2 = await sdk.api.automation_triggers.createOne({
3413
+ event: { type: 'Tag Added', info: { tag: "2" } },
3414
+ action: { type: 'Add Tags', info: { tags: ['2 Added'] }},
3415
+ status: 'Active',
3416
+ title: "Title Condition"
3417
+ })
3418
+ const t3 = await sdk.api.automation_triggers.createOne({
3419
+ event: { type: 'Tag Added', info: { tag: "3" } },
3420
+ action: { type: 'Add Tags', info: { tags: ['3 Added'] }},
3421
+ status: 'Active',
3422
+ title: "Fill Condition"
3423
+ })
3424
+
3425
+ const e = await sdk.api.endusers.createOne({})
3426
+
3427
+ await sdk.api.endusers.updateOne(e.id, { fname: 'no tags added'})
3428
+ await wait(undefined, 500) // allow triggers to happen
3429
+ await async_test(
3430
+ "No tags added",
3431
+ () => sdk.api.endusers.getOne(e.id),
3432
+ { onResult: e => !e.tags?.length }
3433
+ )
3434
+
3435
+ await sdk.api.endusers.updateOne(e.id, { tags: ['1'] })
3436
+ await wait(undefined, 500) // allow triggers to happen
3437
+ await async_test(
3438
+ "Tag 1 added",
3439
+ () => sdk.api.endusers.getOne(e.id),
3440
+ { onResult: e => !!(
3441
+ e.tags?.length === 2
3442
+ && e.tags.includes('1')
3443
+ && e.tags.includes('1 Added')
3444
+ ) }
3445
+ )
3446
+
3447
+ await sdk.api.endusers.updateOne(e.id, { tags: ['4'] })
3448
+ await wait(undefined, 500) // allow triggers to happen
3449
+ await async_test(
3450
+ 'Unrecognized tag added',
3451
+ () => sdk.api.endusers.getOne(e.id),
3452
+ { onResult: e => !!(
3453
+ e.tags?.length === 3
3454
+ && e.tags.includes('1')
3455
+ && e.tags.includes('1 Added')
3456
+ && e.tags.includes('4')
3457
+ )}
3458
+ )
3459
+
3460
+ await sdk.api.endusers.updateOne(e.id, { tags: ['2', '3'] })
3461
+ await wait(undefined, 500) // allow triggers to happen
3462
+ await async_test(
3463
+ "Tag 2 and 3 added",
3464
+ () => sdk.api.endusers.getOne(e.id),
3465
+ { onResult: e => !!(
3466
+ e.tags?.length === 7
3467
+ && e.tags.includes('1')
3468
+ && e.tags.includes('1 Added')
3469
+ && e.tags.includes('4')
3470
+ && e.tags.includes('2')
3471
+ && e.tags.includes('3')
3472
+ && e.tags.includes('2 Added')
3473
+ && e.tags.includes('3 Added')
3474
+ )}
3475
+ )
3476
+
3477
+
3478
+ await Promise.all([
3479
+ sdk.api.automation_triggers.deleteOne(t1.id),
3480
+ sdk.api.automation_triggers.deleteOne(t2.id),
3481
+ sdk.api.automation_triggers.deleteOne(t3.id),
3482
+ sdk.api.endusers.deleteOne(e.id),
3483
+ ])
3484
+ }
3485
+
3284
3486
  const automation_trigger_tests = async () => {
3285
3487
  log_header("Automation Trigger Tests")
3286
3488
 
3287
- await formSubmittedTriggerTests()
3489
+ await tag_added_tests()
3490
+ await order_created_tests()
3491
+ await formSubmittedTriggerTests()
3288
3492
  }
3289
3493
 
3290
3494
  const form_response_tests = async () => {
@@ -3363,6 +3567,18 @@ const form_response_tests = async () => {
3363
3567
  'response recorded'
3364
3568
  )
3365
3569
 
3570
+ await async_test(
3571
+ "Can set lockedAt field on form response",
3572
+ () => sdk.api.form_responses.updateOne(recordedResponse.id, { lockedAt: new Date() }),
3573
+ { onResult: r => !!r.lockedAt }
3574
+ )
3575
+
3576
+ await async_test(
3577
+ "Can unset lockedAt",
3578
+ () => sdk.api.form_responses.updateOne(recordedResponse.id, { lockedAt: '' }),
3579
+ { onResult: r => !r.lockedAt }
3580
+ )
3581
+
3366
3582
  await sdk.api.endusers.deleteOne(enduser.id)
3367
3583
  await sdk.api.forms.deleteOne(form.id)
3368
3584
  }
@@ -5118,7 +5334,7 @@ const wait_for_trigger_tests = async () => {
5118
5334
 
5119
5335
  await sdk.api.endusers.updateOne(eTrigger.id, { fields: { Test: 'Trigger' } })
5120
5336
  await sdk.api.endusers.updateOne(eNoTrigger.id, { fields: { Test: 'Trigger' } })
5121
- await wait(undefined, 5000)
5337
+ await wait(undefined, 8000)
5122
5338
 
5123
5339
  // TODO - Test a delayed action which comes after the triggered action
5124
5340
 
@@ -9462,6 +9678,7 @@ const test_form_response_search = async () => {
9462
9678
  await setup_tests()
9463
9679
  await multi_tenant_tests() // should come right after setup tests
9464
9680
  await sync_tests() // should come directly after setup to avoid extra sync values
9681
+ await enduser_access_tags_tests()
9465
9682
  await enduserAccessTests()
9466
9683
  await test_form_response_search()
9467
9684
  await date_parsing_tests()
@@ -9490,7 +9707,6 @@ const test_form_response_search = async () => {
9490
9707
  // await test_send_with_template()
9491
9708
  await bulk_read_tests()
9492
9709
  await ticket_reminder_tests()
9493
- await enduser_access_tags_tests()
9494
9710
  await marketing_email_unsubscribe_tests()
9495
9711
  await unique_strings_tests()
9496
9712
  await alternate_phones_tests()
Binary file