@tellescope/sdk 1.67.11 → 1.67.13

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.
@@ -2752,7 +2752,7 @@ const addToJourneyTests = async () => {
2752
2752
  sdk.api.automated_actions.getSome,
2753
2753
  es => es.length === 2,
2754
2754
  100,
2755
- 50,
2755
+ 100,
2756
2756
  ),
2757
2757
 
2758
2758
  await sdk.api.endusers.add_to_journey({ enduserIds: [enduser.id], journeyId: journey.id })
@@ -4850,7 +4850,7 @@ const remove_from_journey_on_incoming_comms_tests = async () => {
4850
4850
  )
4851
4851
  ),
4852
4852
  100,
4853
- 20,
4853
+ 10,
4854
4854
  ),
4855
4855
  passOnAnyResult
4856
4856
  )
@@ -5106,6 +5106,8 @@ const test_ticket_automation_assignment_and_optimization = async () => {
5106
5106
 
5107
5107
  const journey = await sdk.api.journeys.createOne({ title: "Testing" })
5108
5108
 
5109
+ const queue = await sdk.api.ticket_queues.createOne({ title: 'test queue', userIds: [] })
5110
+
5109
5111
  let foregroundTestCounter = 0
5110
5112
  const testForegroundTicket = async ({
5111
5113
  assignedTo,
@@ -5122,6 +5124,7 @@ const test_ticket_automation_assignment_and_optimization = async () => {
5122
5124
  enduser?: Enduser,
5123
5125
  testDelayedChild?: boolean,
5124
5126
  }) => {
5127
+
5125
5128
  const e = enduser || await sdk.api.endusers.createOne({ assignedTo, journeys: { [journey.id]: '' } })
5126
5129
 
5127
5130
  const step = await sdk.api.automation_steps.createOne({
@@ -5164,7 +5167,10 @@ const test_ticket_automation_assignment_and_optimization = async () => {
5164
5167
  await async_test(
5165
5168
  `Foreground ticket assignment ${++foregroundTestCounter}`,
5166
5169
  () => sdk.api.tickets.close_ticket({ ticketId: ticket.id, closedForReason }),
5167
- { onResult: ({ generated }) => !!generated?.owner && validOwners.includes(generated.owner) }
5170
+ { onResult: ({ generated }) =>
5171
+ (validOwners.length === 0 && generated?.queueId === queue.id && !generated.owner)
5172
+ || (!!generated?.owner && validOwners.includes(generated.owner) )
5173
+ }
5168
5174
  )
5169
5175
  await async_test(
5170
5176
  `Foreground ticket nop, no duplicates`,
@@ -5196,6 +5202,15 @@ const test_ticket_automation_assignment_and_optimization = async () => {
5196
5202
  ])
5197
5203
  }
5198
5204
 
5205
+ await testForegroundTicket({
5206
+ assignedTo: [],
5207
+ info: {
5208
+ assignmentStrategy: { type: 'queue', info: { queueId: queue.id } } ,
5209
+ defaultAssignee: sdk.userInfo.id
5210
+ },
5211
+ validOwners: [],
5212
+ testDelayedChild: true,
5213
+ })
5199
5214
  await testForegroundTicket({
5200
5215
  assignedTo: [],
5201
5216
  info: {
@@ -5298,13 +5313,28 @@ const test_ticket_automation_assignment_and_optimization = async () => {
5298
5313
 
5299
5314
  await async_test(
5300
5315
  `Background ticket assignment ${++backgroundTestCounter}`,
5301
- () => pollForResults(() => sdk.api.tickets.getSome({ filter: { enduserId: e.id, title: 'background ticket' } }), t => !!t.length),
5302
- { onResult: ts => ts.length === 1 && !!ts[0].owner && validOwners.includes(ts[0].owner) }
5316
+ () => pollForResults(() => sdk.api.tickets.getSome({ filter: { enduserId: e.id, title: 'background ticket' } }), t => !!t.length, 500, 20),
5317
+ {
5318
+ onResult: ts => (
5319
+ ts.length === 1 && (
5320
+ (validOwners.length === 0 && ts[0].queueId === queue.id && !ts[0].owner)
5321
+ ||(!!ts[0].owner && validOwners.includes(ts[0].owner) )
5322
+ )
5323
+ )
5324
+ }
5303
5325
  )
5304
5326
 
5305
5327
  await sdk.api.endusers.deleteOne(e.id)
5306
5328
  }
5307
5329
 
5330
+ await testBackgroundTicket({
5331
+ assignedTo: [],
5332
+ info: {
5333
+ assignmentStrategy: { type: 'queue', info: { queueId: queue.id } } ,
5334
+ defaultAssignee: sdk.userInfo.id
5335
+ },
5336
+ validOwners: [],
5337
+ })
5308
5338
  await testBackgroundTicket({
5309
5339
  assignedTo: [],
5310
5340
  info: {
@@ -5380,7 +5410,8 @@ const test_ticket_automation_assignment_and_optimization = async () => {
5380
5410
  })
5381
5411
 
5382
5412
  return Promise.all([
5383
- await sdk.api.journeys.deleteOne(journey.id)
5413
+ await sdk.api.journeys.deleteOne(journey.id),
5414
+ await sdk.api.ticket_queues.deleteOne(queue.id),
5384
5415
  ])
5385
5416
  }
5386
5417
 
@@ -5555,8 +5586,107 @@ export const no_chained_triggers_tests = async () => {
5555
5586
  ])
5556
5587
  }
5557
5588
 
5589
+ export const ticket_queue_tests = async () => {
5590
+ log_header("Ticket Queue Tests")
5591
+
5592
+ const queue = await sdk.api.ticket_queues.createOne({ title: 'queue', userIds: [sdkNonAdmin.userInfo.id] })
5593
+ const queueUnshared = await sdk.api.ticket_queues.createOne({ title: 'queue unshared', userIds: [] })
5594
+
5595
+ const enduser = await sdk.api.endusers.createOne({ fname: 'ticket' })
5596
+
5597
+ const ticket = await sdk.api.tickets.createOne({ title: 'ticket in queue', queueId: queue.id, enduserId: enduser.id })
5598
+ const ticketUnshared = await sdk.api.tickets.createOne({ title: 'ticket no access', queueId: queueUnshared.id })
5599
+
5600
+ await async_test(
5601
+ `Admin ticket access`,
5602
+ sdk.api.tickets.getSome,
5603
+ { onResult: ts => ts.length === 2 },
5604
+ )
5605
+ await async_test(
5606
+ `Admin ticket access (specified queue)`,
5607
+ () => sdk.api.tickets.getSome({ filter: { queueId: queue.id }}),
5608
+ { onResult: ts => ts.length === 1 },
5609
+ )
5610
+ await async_test(
5611
+ `Admin ticket access (specified queue, other)`,
5612
+ () => sdk.api.tickets.getSome({ filter: { queueId: queueUnshared.id }}),
5613
+ { onResult: ts => ts.length === 1 },
5614
+ )
5615
+ await async_test(
5616
+ `Non-Admin ticket access (unspecified queue)`,
5617
+ sdkNonAdmin.api.tickets.getSome,
5618
+ { onResult: ts => ts.length === 0 },
5619
+ )
5620
+ await async_test(
5621
+ `Non-Admin ticket access (specified queue)`,
5622
+ () => sdkNonAdmin.api.tickets.getSome({ filter: { queueId: queue.id }}),
5623
+ { onResult: ts => ts.length === 1 },
5624
+ )
5625
+ await async_test(
5626
+ `Non-Admin ticket access (specified queue, no access)`,
5627
+ () => sdkNonAdmin.api.tickets.getSome({ filter: { queueId: queueUnshared.id }}),
5628
+ handleAnyError
5629
+ )
5630
+
5631
+ await async_test(
5632
+ `Queue caches number of tickets on add`,
5633
+ () => sdk.api.ticket_queues.getOne(queue.id),
5634
+ { onResult: q => q.count === 1 },
5635
+ )
5636
+ await async_test(
5637
+ `Non-Admin can assign ticket to self`,
5638
+ () => sdkNonAdmin.api.tickets.assign_from_queue({ ticketId: ticket.id }),
5639
+ { onResult: ({ ticket }) => ticket.owner === sdkNonAdmin.userInfo.id && !ticket.queueId && !!ticket.dequeuedAt }
5640
+ )
5641
+ await async_test(
5642
+ `Ticket can't be double-assigned ticket to self`,
5643
+ () => sdk.api.tickets.assign_from_queue({ ticketId: ticket.id }),
5644
+ handleAnyError
5645
+ )
5646
+ await async_test(
5647
+ `Non-Admin ticket cannot assign ticket to self when can't access queue`,
5648
+ () => sdkNonAdmin.api.tickets.assign_from_queue({ ticketId: ticketUnshared.id }),
5649
+ handleAnyError
5650
+ )
5651
+ await async_test(
5652
+ `Non-Admin can access ticket after assignment`,
5653
+ () => sdkNonAdmin.api.tickets.getOne(ticket.id),
5654
+ { onResult: ticket => ticket.owner === sdkNonAdmin.userInfo.id && !ticket.queueId && !!ticket }
5655
+ )
5656
+
5657
+ await async_test(
5658
+ `Queue caches number of tickets on assignment`,
5659
+ () => pollForResults(
5660
+ () => sdk.api.ticket_queues.getOne(queue.id),
5661
+ q => q.count === 0,
5662
+ 50,
5663
+ 10
5664
+ ),
5665
+ passOnAnyResult
5666
+ )
5667
+ await async_test(
5668
+ `Queue caches number of tickets on assignment`,
5669
+ () => pollForResults(
5670
+ () => sdkNonAdmin.api.endusers.getOne(enduser.id),
5671
+ e => !!e.assignedTo?.includes(sdkNonAdmin.userInfo.id),
5672
+ 50,
5673
+ 10
5674
+ ),
5675
+ passOnAnyResult
5676
+ )
5677
+
5678
+
5679
+ await Promise.all([
5680
+ sdk.api.ticket_queues.deleteOne(queue.id),
5681
+ sdk.api.ticket_queues.deleteOne(queueUnshared.id),
5682
+ sdk.api.endusers.deleteOne(enduser.id), // cleans up ticket
5683
+ sdk.api.tickets.deleteOne(ticketUnshared.id),
5684
+ ])
5685
+ }
5686
+
5558
5687
  const NO_TEST = () => {}
5559
5688
  const tests: { [K in keyof ClientModelForName]: () => void } = {
5689
+ ticket_queues: NO_TEST,
5560
5690
  phone_trees: NO_TEST,
5561
5691
  enduser_medications: NO_TEST,
5562
5692
  automation_triggers: NO_TEST,
@@ -5695,6 +5825,7 @@ const validate_schema = () => {
5695
5825
  await mfa_tests()
5696
5826
  await setup_tests()
5697
5827
  await multi_tenant_tests() // should come right after setup tests
5828
+ await ticket_queue_tests()
5698
5829
  await no_chained_triggers_tests()
5699
5830
  await field_equals_trigger_tests()
5700
5831
  await test_ticket_automation_assignment_and_optimization()
Binary file