@tellescope/sdk 1.63.1 → 1.64.1

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.
@@ -1205,6 +1205,21 @@ const chat_room_tests = async () => {
1205
1205
  () => sdk2.api.chat_rooms.getOne(emptyRoom.id),
1206
1206
  { onResult: r => r.id === emptyRoom.id }
1207
1207
  )
1208
+ await async_test(
1209
+ `create-chat (join successful)`,
1210
+ () => sdk2.api.chats.createOne({ roomId: emptyRoom.id, message: 'test' }),
1211
+ passOnAnyResult
1212
+ )
1213
+ await async_test(
1214
+ `get-chat (join successful)`,
1215
+ () => sdk2.api.chats.getSome({ filter: { roomId: emptyRoom.id } }),
1216
+ { onResult: r => r.length > 0 }
1217
+ )
1218
+ await async_test(
1219
+ `[bulk] get-chat-room (join successful)`,
1220
+ () => sdk2.bulk_load({ load: [{ model: 'chat_rooms' }] }),
1221
+ { onResult: r => r.results?.[0]?.records?.find(r => r.id === emptyRoom.id )}
1222
+ )
1208
1223
 
1209
1224
  await enduserSDK.logout()
1210
1225
  const loggedOutEnduser = await sdk.api.endusers.getOne(enduser.id)
@@ -3018,6 +3033,21 @@ const role_based_access_tests = async () => {
3018
3033
  `non-admin for enduser ticket bad`,
3019
3034
  () => sdkNonAdmin.api.tickets.getOne(adminTicket.id), handleAnyError,
3020
3035
  )
3036
+ await async_test(
3037
+ `[bulkd] Admin / creator can access enduser without being assigned`,
3038
+ () => sdk.bulk_load({ load: [{ model: 'endusers' }] }),
3039
+ { onResult: r => r.results[0]?.records !== undefined && r.results[0].records?.find(r => r.id === e.id) }
3040
+ )
3041
+ await async_test(
3042
+ `[bulk] Unassigned non-admin can't access enduser without being assigned`,
3043
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'endusers' }] }),
3044
+ { onResult: r => r.results[0]?.records !== undefined && !r.results[0].records?.find(r => r.id === e.id) }
3045
+ )
3046
+ await async_test(
3047
+ `non-admin for enduser ticket bad`,
3048
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'tickets' }] }),
3049
+ { onResult: r => r.results[0]?.records !== undefined && !r.results[0].records?.find(r => r.id === adminTicket.id) }
3050
+ )
3021
3051
 
3022
3052
  await async_test(
3023
3053
  `Non-admin for own ticket`, () => sdkNonAdmin.api.tickets.getOne(ticketCreatedByNonAdmin.id), passOnAnyResult
@@ -3025,9 +3055,19 @@ const role_based_access_tests = async () => {
3025
3055
  await async_test(
3026
3056
  `Non-admin for tickets`, () => sdkNonAdmin.api.tickets.getSome(), { onResult: ts => ts.length === 1 }
3027
3057
  )
3058
+ await async_test(
3059
+ `[bulk] Non-admin for tickets`,
3060
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'tickets' }] }),
3061
+ { onResult: r => r.results?.[0]?.records?.length === 1 }
3062
+ )
3028
3063
  await async_test(
3029
3064
  `non-admin for email bad`, () => sdkNonAdmin.api.emails.getOne(email.id), handleAnyError,
3030
3065
  )
3066
+ await async_test(
3067
+ `[bulk] non-admin for email bad`,
3068
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'emails' }] }),
3069
+ { onResult: r => r.results?.[0]?.records?.length === 0 }
3070
+ )
3031
3071
  await async_test(
3032
3072
  `non-admin for sms bad`, () => sdkNonAdmin.api.sms_messages.getOne(sms.id), handleAnyError,
3033
3073
  )
@@ -3037,15 +3077,35 @@ const role_based_access_tests = async () => {
3037
3077
  await async_test(
3038
3078
  `non-admin for calendar bad`, () => sdkNonAdmin.api.calendar_events.getOne(calendarEvent.id), handleAnyError,
3039
3079
  )
3080
+ await async_test(
3081
+ `[bulk] non-admin for calendar bad`,
3082
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'calendar_events' }] }),
3083
+ { onResult: r => r.results?.[0]?.records?.length === 0 }
3084
+ )
3040
3085
  await async_test(
3041
3086
  `non-admin for chat room bad`, () => sdkNonAdmin.api.chat_rooms.getOne(chatRoom.id), handleAnyError,
3042
3087
  )
3088
+ await async_test(
3089
+ `[bulk] non-admin for chat room bad`,
3090
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'chat_rooms' }] }),
3091
+ { onResult: r => r.results?.[0]?.records?.length === 0 }
3092
+ )
3043
3093
  await async_test(
3044
3094
  `non-admin for chat message bad`, () => sdkNonAdmin.api.chats.getOne(chatMessage.id), handleAnyError,
3045
3095
  )
3096
+ await async_test(
3097
+ `[bulk] non-admin for chat message bad`,
3098
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'chats' }] }),
3099
+ handleAnyError // throws error in this case in enforceForeignAccessConstraints because there are no accessible chats
3100
+ )
3046
3101
  await async_test(
3047
3102
  `Non-admin for chats`, () => sdkNonAdmin.api.chats.getSome({ filter: { roomId: chatRoom.id } }), handleAnyError,
3048
3103
  )
3104
+ await async_test(
3105
+ `Non-admin for tickets with enduserId in filter`,
3106
+ () => sdkNonAdmin.api.tickets.getSome({ filter: { enduserId: e.id } }),
3107
+ { onResult: r => !r.find(t => t.id === adminTicket.id)}
3108
+ )
3049
3109
 
3050
3110
  // unassigned update / delete coverage
3051
3111
  await async_test(
@@ -3070,6 +3130,11 @@ const role_based_access_tests = async () => {
3070
3130
  await async_test(
3071
3131
  `non-admin for enduser ticket`, () => sdkNonAdmin.api.tickets.getOne(adminTicket.id), passOnAnyResult,
3072
3132
  )
3133
+ await async_test(
3134
+ `[bulk] non-admin for enduser ticket`,
3135
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'tickets' }] }),
3136
+ { onResult: r => r.results?.[0]?.records?.find(r => r.id === adminTicket.id )}
3137
+ )
3073
3138
 
3074
3139
  await async_test(
3075
3140
  `Non-admin for tickets`, () => sdkNonAdmin.api.tickets.getSome(), { onResult: ts => ts.length === 2 }
@@ -3077,18 +3142,38 @@ const role_based_access_tests = async () => {
3077
3142
  await async_test(
3078
3143
  `non-admin for email`, () => sdkNonAdmin.api.emails.getOne(email.id), passOnAnyResult,
3079
3144
  )
3145
+ await async_test(
3146
+ `[bulk] non-admin for email`,
3147
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'emails' }] }),
3148
+ { onResult: r => r.results?.[0]?.records?.find(r => r.id === email.id )}
3149
+ )
3080
3150
  await async_test(
3081
3151
  `non-admin for sms`, () => sdkNonAdmin.api.sms_messages.getOne(sms.id), passOnAnyResult,
3082
3152
  )
3083
3153
  await async_test(
3084
3154
  `non-admin for calendar`, () => sdkNonAdmin.api.calendar_events.getOne(calendarEvent.id), passOnAnyResult,
3085
3155
  )
3156
+ await async_test(
3157
+ `[bulk] non-admin for calendar`,
3158
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'calendar_events' }] }),
3159
+ { onResult: r => r.results?.[0]?.records?.find(r => r.id === calendarEvent.id )}
3160
+ )
3086
3161
  await async_test(
3087
3162
  `non-admin for chat room`, () => sdkNonAdmin.api.chat_rooms.getOne(chatRoom.id), passOnAnyResult,
3088
3163
  )
3164
+ await async_test(
3165
+ `[bulk] non-admin for chat room`,
3166
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'chat_rooms' }] }),
3167
+ { onResult: r => r.results?.[0]?.records?.find(r => r.id === chatRoom.id )}
3168
+ )
3089
3169
  await async_test(
3090
3170
  `non-admin for chat message`, () => sdkNonAdmin.api.chats.getOne(chatMessage.id), passOnAnyResult,
3091
3171
  )
3172
+ await async_test(
3173
+ `[bulk] non-admin for chat message`,
3174
+ () => sdkNonAdmin.bulk_load({ load: [{ model: 'chats' }] }),
3175
+ { onResult: r => r.results?.[0]?.records?.find(r => r.id === chatMessage.id )}
3176
+ )
3092
3177
  await async_test(
3093
3178
  `Non-admin for chats`, () => sdkNonAdmin.api.chats.getSome({ filter: { roomId: chatRoom.id } }),
3094
3179
  { onResult: cs => cs.length === 2 },
@@ -4198,7 +4283,7 @@ const wait_for_trigger_tests = async () => {
4198
4283
  })
4199
4284
 
4200
4285
  await sdk.api.endusers.add_to_journey({ enduserIds: [eTrigger.id], journeyId: journey.id })
4201
- await wait(undefined, 3000)
4286
+ await wait(undefined, 8000)
4202
4287
 
4203
4288
  await async_test(
4204
4289
  "Journey started",
@@ -4208,7 +4293,7 @@ const wait_for_trigger_tests = async () => {
4208
4293
 
4209
4294
  await sdk.api.endusers.updateOne(eTrigger.id, { fields: { Test: 'Trigger' } })
4210
4295
  await sdk.api.endusers.updateOne(eNoTrigger.id, { fields: { Test: 'Trigger' } })
4211
- await wait(undefined, 2222)
4296
+ await wait(undefined, 3000)
4212
4297
 
4213
4298
  // TODO - Test a delayed action which comes after the triggered action
4214
4299
 
@@ -4379,37 +4464,38 @@ const remove_from_journey_on_incoming_comms_tests = async () => {
4379
4464
 
4380
4465
  await sdk.api.endusers.updateOne(e1.id, { journeys: { [jRemove.id]: '', [jDontRemove.id]: '' } })
4381
4466
  await sdk.api.endusers.updateOne(e2.id, { journeys: { [jRemove.id]: '', [jDontRemove.id]: '' } })
4382
- await wait(undefined, 2000)
4467
+ await wait(undefined, 100)
4383
4468
 
4384
4469
  const room = await sdk.api.chat_rooms.createOne({ })
4385
4470
  await sdk.api.chats.createOne({ roomId: room.id, senderId: e1.id, message: 'cancel' })
4386
- await wait(undefined, 1000)
4471
+ await wait(undefined, 100)
4387
4472
 
4473
+ console.log(jRemove.id, removeStep2.id, e1.id)
4388
4474
  await async_test(
4389
4475
  "Appropriate Automated Actions are cancelled on incoming message",
4390
4476
  () => sdk.api.automated_actions.getSome(),
4391
4477
  { onResult: actions => (
4392
4478
  !!actions.find(a =>
4393
4479
  a.journeyId === jRemove.id
4394
- && a.automationStepId === removeStep2.id
4480
+ && a.automationStepId === removeStep1.id
4395
4481
  && a.enduserId === e1.id
4396
4482
  && a.status === 'cancelled'
4397
4483
  )
4398
4484
  && !!actions.find(a =>
4399
4485
  a.journeyId === jRemove.id
4400
- && a.automationStepId === removeStep2.id
4486
+ && a.automationStepId === removeStep1.id
4401
4487
  && a.enduserId === e2.id
4402
4488
  && a.status === 'active'
4403
4489
  )
4404
4490
  && !!actions.find(a =>
4405
4491
  a.journeyId === jDontRemove.id
4406
- && a.automationStepId === dontRemoveStep2.id
4492
+ && a.automationStepId === dontRemoveStep1.id
4407
4493
  && a.enduserId === e1.id
4408
4494
  && a.status === 'active'
4409
4495
  )
4410
4496
  && !!actions.find(a =>
4411
4497
  a.journeyId === jDontRemove.id
4412
- && a.automationStepId === dontRemoveStep2.id
4498
+ && a.automationStepId === dontRemoveStep1.id
4413
4499
  && a.enduserId === e2.id
4414
4500
  && a.status === 'active'
4415
4501
  )
@@ -4424,7 +4510,7 @@ const remove_from_journey_on_incoming_comms_tests = async () => {
4424
4510
  { onResult: actions => (
4425
4511
  !!actions.find(a =>
4426
4512
  a.journeyId === jRemove.id
4427
- && a.automationStepId === removeStep2.id
4513
+ && a.automationStepId === removeStep1.id
4428
4514
  && a.enduserId === e2.id
4429
4515
  && a.status === 'cancelled'
4430
4516
  )
@@ -4587,6 +4673,8 @@ const TRACK_OPEN_IMAGE = Buffer.from(
4587
4673
  sdkSubSub.authenticate(subSubUserEmail, password),
4588
4674
  sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword),
4589
4675
  ])
4676
+
4677
+ // console.log(JSON.stringify(await sdk.bulk_load({ load: [{ model: 'users' }]}), null, 2))
4590
4678
 
4591
4679
  await async_test(
4592
4680
  "count exists",
@@ -4603,12 +4691,12 @@ const TRACK_OPEN_IMAGE = Buffer.from(
4603
4691
 
4604
4692
  await mfa_tests()
4605
4693
  await setup_tests()
4694
+ await wait_for_trigger_tests()
4695
+ await role_based_access_tests()
4606
4696
  await multi_tenant_tests() // should come right after setup tests
4607
4697
  await pdf_generation()
4608
4698
  await remove_from_journey_on_incoming_comms_tests()
4609
4699
  await rate_limit_tests()
4610
- await role_based_access_tests()
4611
- await wait_for_trigger_tests()
4612
4700
  await merge_enduser_tests()
4613
4701
  await self_serve_appointment_booking_tests()
4614
4702
  await auto_reply_tests()
Binary file