@tellescope/sdk 1.200.2 → 1.201.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.
@@ -10428,6 +10428,7 @@ const get_templated_message_tests = async () => {
10428
10428
 
10429
10429
  const enduser = await sdk.api.endusers.createOne({ fname: "Main", fields: { CustomField: "Enduser" } })
10430
10430
  const related = await sdk.api.endusers.createOne({ lname: "Related", fields: { OtherCustomField: "Contact" } })
10431
+ const form = await sdk.api.forms.createOne({ title: 'test form for templated message' })
10431
10432
 
10432
10433
  await async_test(
10433
10434
  "Fields are templated correctly for enduser and relatedcontact",
@@ -10457,9 +10458,93 @@ const get_templated_message_tests = async () => {
10457
10458
  }
10458
10459
  )
10459
10460
 
10461
+ await async_test(
10462
+ "Unformatted link",
10463
+ () => sdk.api.templates.get_templated_message({
10464
+ enduserId: enduser.id,
10465
+ channel: 'Email',
10466
+ message: `https://www.tellescope.com`,
10467
+ html: `https://www.tellescope.com`,
10468
+ userId: sdk.userInfo.id,
10469
+ }),
10470
+ {
10471
+ onResult: r => (
10472
+ r.plaintext === 'https://www.tellescope.com'
10473
+ && r.html === 'https://www.tellescope.com'
10474
+ )
10475
+ }
10476
+ )
10477
+
10478
+ await async_test(
10479
+ "link format",
10480
+ () => sdk.api.templates.get_templated_message({
10481
+ enduserId: enduser.id,
10482
+ channel: 'Email',
10483
+ message: `{https://www.tellescope.com}[click here]`,
10484
+ html: `{https://www.tellescope.com}[click here]`,
10485
+ userId: sdk.userInfo.id,
10486
+ }),
10487
+ { onResult:
10488
+ r => (
10489
+ r.plaintext.includes('/r/') && r.plaintext.includes('click here')
10490
+ && r.html.includes('/r/') && r.html.includes('<a') && r.html.includes('click here') && r.html.includes("</a>")
10491
+ )
10492
+ }
10493
+ )
10494
+ await async_test(
10495
+ "plain $LINK_ONLY",
10496
+ () => sdk.api.templates.get_templated_message({
10497
+ enduserId: enduser.id,
10498
+ channel: 'Email',
10499
+ message: `{https://www.tellescope.com}[$LINK_ONLY]`,
10500
+ html: `{https://www.tellescope.com}[$LINK_ONLY]`,
10501
+ userId: sdk.userInfo.id,
10502
+ }),
10503
+ { onResult:
10504
+ r => (
10505
+ r.plaintext.includes('/r/') && !r.plaintext.includes('$LINK_ONLY')
10506
+ && r.html.includes('/r/') && !r.html.includes('$LINK_ONLY')
10507
+ )
10508
+ }
10509
+ )
10510
+
10511
+ await async_test(
10512
+ "form link",
10513
+ () => sdk.api.templates.get_templated_message({
10514
+ enduserId: enduser.id,
10515
+ channel: 'Email',
10516
+ message: `{{forms.${form.id}.link:click here}}`,
10517
+ html: `{{forms.${form.id}.link:click here}}`,
10518
+ userId: sdk.userInfo.id,
10519
+ }),
10520
+ { onResult:
10521
+ r => (
10522
+ r.plaintext.includes('/r/') && r.plaintext.includes('click here')
10523
+ && r.html.includes('/r/') && r.html.includes('<a') && r.html.includes('click here') && r.html.includes("</a>")
10524
+ )
10525
+ }
10526
+ )
10527
+ await async_test(
10528
+ "form $LINK_ONLY",
10529
+ () => sdk.api.templates.get_templated_message({
10530
+ enduserId: enduser.id,
10531
+ channel: 'Email',
10532
+ message: `{{forms.${form.id}.link:$LINK_ONLY}}`,
10533
+ html: `{{forms.${form.id}.link:$LINK_ONLY}}`,
10534
+ userId: sdk.userInfo.id,
10535
+ }),
10536
+ { onResult:
10537
+ r => (
10538
+ r.plaintext.includes('/r/') && !r.plaintext.includes('$LINK_ONLY')
10539
+ && r.html.includes('/r/') && !r.html.includes('$LINK_ONLY')
10540
+ )
10541
+ }
10542
+ )
10543
+
10460
10544
  await Promise.all([
10461
10545
  sdk.api.endusers.deleteOne(enduser.id),
10462
10546
  sdk.api.endusers.deleteOne(related.id),
10547
+ sdk.api.forms.deleteOne(form.id),
10463
10548
  ])
10464
10549
  }
10465
10550
 
@@ -10567,6 +10652,600 @@ const replace_enduser_template_values_tests = async () => {
10567
10652
  await sdk.api.endusers.deleteOne(enduser.id)
10568
10653
  }
10569
10654
 
10655
+ const inbox_loading_tests = async () => {
10656
+ log_header("Inbox Loading Tests")
10657
+ const e = await sdk.api.endusers.createOne({ fname: 'Test', lname: 'Testson' })
10658
+
10659
+ const email = await sdk.api.emails.createOne({
10660
+ logOnly: true,
10661
+ subject: 'Test Email',
10662
+ enduserId: e.id,
10663
+ textContent: 'This is a test email',
10664
+ inbound: true,
10665
+ userId: sdk.userInfo.id,
10666
+ })
10667
+ const sms = await sdk.api.sms_messages.createOne({
10668
+ logOnly: true,
10669
+ inbound: true,
10670
+ enduserId: e.id,
10671
+ message: 'This is a test SMS',
10672
+ userId: sdk.userInfo.id,
10673
+ })
10674
+ const groupMMS = await sdk.api.group_mms_conversations.createOne({
10675
+ enduserIds: [e.id],
10676
+ userIds: [sdk.userInfo.id],
10677
+ userStates: [],
10678
+ })
10679
+ const call = await sdk.api.phone_calls.createOne({ enduserId: e.id, inbound: true, userId: sdk.userInfo.id })
10680
+ const thread = await sdk.api.ticket_threads.createOne({ enduserId: e.id, subject: 'test thread' })
10681
+ const comment = await sdk.api.ticket_thread_comments.createOne({
10682
+ enduserId: e.id,
10683
+ html: '',
10684
+ inbound: false,
10685
+ plaintext: '',
10686
+ public: false,
10687
+ ticketThreadId: thread.id,
10688
+ userId: sdk.userInfo.id,
10689
+ })
10690
+ const room = await sdk.api.chat_rooms.createOne({ enduserIds: [e.id], userIds: [], title: 'Test Chat Room' })
10691
+
10692
+ await async_test(
10693
+ "Inbox loads emails",
10694
+ () => sdk.api.endusers.load_inbox_data({ }),
10695
+ { onResult: r => (
10696
+ r.chat_rooms.length === 1
10697
+ && r.emails.length === 1
10698
+ && r.sms_messages.length === 1
10699
+ && r.group_mms_conversations.length === 1
10700
+ && r.phone_calls.length === 1
10701
+ && r.ticket_thread_comments.length === 1
10702
+ && r.endusers.length === 1
10703
+ ) }
10704
+ )
10705
+
10706
+ await async_test(
10707
+ "Inbox loads emails (filter by self when no threads are assigned)",
10708
+ () => sdk.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
10709
+ { onResult: r => (
10710
+ r.chat_rooms.length === 1
10711
+ && r.emails.length === 1
10712
+ && r.sms_messages.length === 1
10713
+ && r.group_mms_conversations.length === 1
10714
+ && r.phone_calls.length === 1
10715
+ && r.ticket_thread_comments.length === 1
10716
+ && r.endusers.length === 1
10717
+ ) }
10718
+ )
10719
+
10720
+ await async_test(
10721
+ "Inbox loads emails (filter by other when no threads are assigned)",
10722
+ () => sdk.api.endusers.load_inbox_data({ userId: sdkNonAdmin.userInfo.id }),
10723
+ { onResult: r => (
10724
+ r.chat_rooms.length === 1
10725
+ && r.emails.length === 1
10726
+ && r.sms_messages.length === 1
10727
+ && r.group_mms_conversations.length === 1
10728
+ && r.phone_calls.length === 1
10729
+ && r.ticket_thread_comments.length === 1
10730
+ && r.endusers.length === 1
10731
+ ) }
10732
+ )
10733
+
10734
+ await async_test(
10735
+ 'Non-admin cannot load inbox data without assignment',
10736
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ }),
10737
+ {
10738
+ onResult: r => (
10739
+ r.chat_rooms.length === 0
10740
+ && r.emails.length === 0
10741
+ && r.sms_messages.length === 0
10742
+ && r.group_mms_conversations.length === 0
10743
+ && r.phone_calls.length === 0
10744
+ && r.ticket_thread_comments.length === 0
10745
+ && r.endusers.length === 0
10746
+ )
10747
+ }
10748
+ )
10749
+
10750
+ await async_test(
10751
+ 'Non-admin cannot load inbox data without assignment (self as filter)',
10752
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ userId: sdkNonAdmin.userInfo.id }),
10753
+ {
10754
+ onResult: r => (
10755
+ r.chat_rooms.length === 0
10756
+ && r.emails.length === 0
10757
+ && r.sms_messages.length === 0
10758
+ && r.group_mms_conversations.length === 0
10759
+ && r.phone_calls.length === 0
10760
+ && r.ticket_thread_comments.length === 0
10761
+ && r.endusers.length === 0
10762
+ )
10763
+ }
10764
+ )
10765
+
10766
+ await async_test(
10767
+ 'Non-admin cannot load inbox data without assignment (other user as filter)',
10768
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
10769
+ {
10770
+ onResult: r => (
10771
+ r.chat_rooms.length === 0
10772
+ && r.emails.length === 0
10773
+ && r.sms_messages.length === 0
10774
+ && r.group_mms_conversations.length === 0
10775
+ && r.phone_calls.length === 0
10776
+ && r.ticket_thread_comments.length === 0
10777
+ && r.endusers.length === 0
10778
+ )
10779
+ }
10780
+ )
10781
+
10782
+ // assign to Enduser
10783
+ await sdk.api.endusers.updateOne(e.id, { assignedTo: [sdkNonAdmin.userInfo.id] }, { replaceObjectFields: true })
10784
+ await async_test(
10785
+ 'Non-admin can load inbox data with assignment',
10786
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ }),
10787
+ {
10788
+ onResult: r => (
10789
+ r.chat_rooms.length === 1
10790
+ && r.emails.length === 1
10791
+ && r.sms_messages.length === 1
10792
+ && r.group_mms_conversations.length === 1
10793
+ && r.phone_calls.length === 1
10794
+ && r.ticket_thread_comments.length === 1
10795
+ && r.endusers.length === 1
10796
+ )
10797
+ }
10798
+ )
10799
+ await async_test(
10800
+ 'Non-admin can load inbox data with assignment (self as filter)',
10801
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ userId: sdkNonAdmin.userInfo.id }),
10802
+ {
10803
+ onResult: r => (
10804
+ r.chat_rooms.length === 1
10805
+ && r.emails.length === 1
10806
+ && r.sms_messages.length === 1
10807
+ && r.group_mms_conversations.length === 1
10808
+ && r.phone_calls.length === 1
10809
+ && r.ticket_thread_comments.length === 1
10810
+ && r.endusers.length === 1
10811
+ )
10812
+ }
10813
+ )
10814
+ await async_test(
10815
+ 'Non-admin can load inbox data with assignment (other user as filter, not assigned)',
10816
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
10817
+ {
10818
+ onResult: r => (
10819
+ r.chat_rooms.length === 0
10820
+ && r.emails.length === 0
10821
+ && r.sms_messages.length === 0
10822
+ && r.group_mms_conversations.length === 0
10823
+ && r.phone_calls.length === 0
10824
+ && r.ticket_thread_comments.length === 0
10825
+ && r.endusers.length === 0
10826
+ )
10827
+ }
10828
+ )
10829
+ await sdk.api.endusers.updateOne(e.id, { assignedTo: [sdk.userInfo.id] }, { }) // add other assignment
10830
+ await async_test(
10831
+ 'Non-admin can load inbox data with assignment (other user as filter, assigned)',
10832
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
10833
+ {
10834
+ onResult: r => (
10835
+ r.chat_rooms.length === 1
10836
+ && r.emails.length === 1
10837
+ && r.sms_messages.length === 1
10838
+ && r.group_mms_conversations.length === 1
10839
+ && r.phone_calls.length === 1
10840
+ && r.ticket_thread_comments.length === 1
10841
+ && r.endusers.length === 1
10842
+ )
10843
+ }
10844
+ )
10845
+
10846
+
10847
+ // assign admin to all threads
10848
+ await sdk.api.emails.updateOne(email.id, { assignedTo: [sdk.userInfo.id] }, { replaceObjectFields: true })
10849
+ await sdk.api.sms_messages.updateOne(sms.id, { assignedTo: [sdk.userInfo.id] }, { replaceObjectFields: true })
10850
+ await sdk.api.group_mms_conversations.updateOne(groupMMS.id, { assignedTo: [sdk.userInfo.id] }, { replaceObjectFields: true })
10851
+ await sdk.api.phone_calls.updateOne(call.id, { assignedTo: [sdk.userInfo.id] }, { replaceObjectFields: true })
10852
+ await sdk.api.ticket_threads.updateOne(thread.id, { assignedTo: [sdk.userInfo.id] }, { replaceObjectFields: true })
10853
+ await sdk.api.ticket_thread_comments.updateOne(comment.id, { assignedTo: [sdk.userInfo.id] }, { replaceObjectFields: true })
10854
+ await sdk.api.chat_rooms.updateOne(room.id, { assignedTo: [sdk.userInfo.id] }, { replaceObjectFields: true })
10855
+
10856
+ await async_test(
10857
+ 'admin doesnt load inbox data with assignedTo as other filter',
10858
+ () => sdk.api.endusers.load_inbox_data({ userId: sdkNonAdmin.userInfo.id }),
10859
+ {
10860
+ onResult: r => (
10861
+ r.chat_rooms.length === 0
10862
+ && r.emails.length === 0
10863
+ && r.sms_messages.length === 0
10864
+ && r.group_mms_conversations.length === 0
10865
+ && r.phone_calls.length === 0
10866
+ && r.ticket_thread_comments.length === 0
10867
+ && r.endusers.length === 0
10868
+ )
10869
+ }
10870
+ )
10871
+ await async_test(
10872
+ 'admin loads inbox data for other user as filter assignedTo',
10873
+ () => sdk.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
10874
+ {
10875
+ onResult: r => (
10876
+ r.chat_rooms.length === 1
10877
+ && r.emails.length === 1
10878
+ && r.sms_messages.length === 1
10879
+ && r.group_mms_conversations.length === 1
10880
+ && r.phone_calls.length === 1
10881
+ && r.ticket_thread_comments.length === 1
10882
+ && r.endusers.length === 1
10883
+ )
10884
+ }
10885
+ )
10886
+ await async_test(
10887
+ 'admin loads inbox data with no user',
10888
+ () => sdk.api.endusers.load_inbox_data({ }),
10889
+ {
10890
+ onResult: r => (
10891
+ r.chat_rooms.length === 1
10892
+ && r.emails.length === 1
10893
+ && r.sms_messages.length === 1
10894
+ && r.group_mms_conversations.length === 1
10895
+ && r.phone_calls.length === 1
10896
+ && r.ticket_thread_comments.length === 1
10897
+ && r.endusers.length === 1
10898
+ )
10899
+ }
10900
+ )
10901
+
10902
+ await async_test(
10903
+ 'Non-admin cant load inbox data with assignedTo as other (self as filter)',
10904
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ userId: sdkNonAdmin.userInfo.id }),
10905
+ {
10906
+ onResult: r => (
10907
+ r.chat_rooms.length === 0
10908
+ && r.emails.length === 0
10909
+ && r.sms_messages.length === 0
10910
+ && r.group_mms_conversations.length === 0
10911
+ && r.phone_calls.length === 0
10912
+ && r.ticket_thread_comments.length === 0
10913
+ && r.endusers.length === 0
10914
+ )
10915
+ }
10916
+ )
10917
+ await async_test(
10918
+ 'Non-admin can load inbox data for other user as filter, assignedTo',
10919
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
10920
+ {
10921
+ onResult: r => (
10922
+ r.chat_rooms.length === 1
10923
+ && r.emails.length === 1
10924
+ && r.sms_messages.length === 1
10925
+ && r.group_mms_conversations.length === 1
10926
+ && r.phone_calls.length === 1
10927
+ && r.ticket_thread_comments.length === 1
10928
+ && r.endusers.length === 1
10929
+ )
10930
+ }
10931
+ )
10932
+ await async_test(
10933
+ 'Non-admin can load inbox data with no user',
10934
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ }),
10935
+ {
10936
+ onResult: r => (
10937
+ r.chat_rooms.length === 1
10938
+ && r.emails.length === 1
10939
+ && r.sms_messages.length === 1
10940
+ && r.group_mms_conversations.length === 1
10941
+ && r.phone_calls.length === 1
10942
+ && r.ticket_thread_comments.length === 1
10943
+ && r.endusers.length === 1
10944
+ )
10945
+ }
10946
+ )
10947
+
10948
+ // assign other user to all threads
10949
+ await sdk.api.emails.updateOne(email.id, { assignedTo: [sdkNonAdmin.userInfo.id] })
10950
+ await sdk.api.sms_messages.updateOne(sms.id, { assignedTo: [sdkNonAdmin.userInfo.id] })
10951
+ await sdk.api.group_mms_conversations.updateOne(groupMMS.id, { assignedTo: [sdkNonAdmin.userInfo.id] })
10952
+ await sdk.api.phone_calls.updateOne(call.id, { assignedTo: [sdkNonAdmin.userInfo.id] })
10953
+ await sdk.api.ticket_threads.updateOne(thread.id, { assignedTo: [sdkNonAdmin.userInfo.id] })
10954
+ await sdk.api.ticket_thread_comments.updateOne(comment.id, { assignedTo: [sdkNonAdmin.userInfo.id] })
10955
+ await sdk.api.chat_rooms.updateOne(room.id, { assignedTo: [sdkNonAdmin.userInfo.id] })
10956
+
10957
+ await async_test(
10958
+ '[both assigned] admin does load inbox data with assignedTo as other filter',
10959
+ () => sdk.api.endusers.load_inbox_data({ userId: sdkNonAdmin.userInfo.id }),
10960
+ {
10961
+ onResult: r => (
10962
+ r.chat_rooms.length === 1
10963
+ && r.emails.length === 1
10964
+ && r.sms_messages.length === 1
10965
+ && r.group_mms_conversations.length === 1
10966
+ && r.phone_calls.length === 1
10967
+ && r.ticket_thread_comments.length === 1
10968
+ && r.endusers.length === 1
10969
+ )
10970
+ }
10971
+ )
10972
+ await async_test(
10973
+ '[both assigned] admin loads inbox data for other user as filter assignedTo',
10974
+ () => sdk.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
10975
+ {
10976
+ onResult: r => (
10977
+ r.chat_rooms.length === 1
10978
+ && r.emails.length === 1
10979
+ && r.sms_messages.length === 1
10980
+ && r.group_mms_conversations.length === 1
10981
+ && r.phone_calls.length === 1
10982
+ && r.ticket_thread_comments.length === 1
10983
+ && r.endusers.length === 1
10984
+ )
10985
+ }
10986
+ )
10987
+ await async_test(
10988
+ '[both assigned] admin loads inbox data with no user',
10989
+ () => sdk.api.endusers.load_inbox_data({ }),
10990
+ {
10991
+ onResult: r => (
10992
+ r.chat_rooms.length === 1
10993
+ && r.emails.length === 1
10994
+ && r.sms_messages.length === 1
10995
+ && r.group_mms_conversations.length === 1
10996
+ && r.phone_calls.length === 1
10997
+ && r.ticket_thread_comments.length === 1
10998
+ && r.endusers.length === 1
10999
+ )
11000
+ }
11001
+ )
11002
+
11003
+ await async_test(
11004
+ '[both assigned] Non-admin can load inbox data with assignedTo as other (self as filter)',
11005
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ userId: sdkNonAdmin.userInfo.id }),
11006
+ {
11007
+ onResult: r => (
11008
+ r.chat_rooms.length === 1
11009
+ && r.emails.length === 1
11010
+ && r.sms_messages.length === 1
11011
+ && r.group_mms_conversations.length === 1
11012
+ && r.phone_calls.length === 1
11013
+ && r.ticket_thread_comments.length === 1
11014
+ && r.endusers.length === 1
11015
+ )
11016
+ }
11017
+ )
11018
+ await async_test(
11019
+ '[both assigned] Non-admin can load inbox data for other user as filter, assignedTo',
11020
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
11021
+ {
11022
+ onResult: r => (
11023
+ r.chat_rooms.length === 1
11024
+ && r.emails.length === 1
11025
+ && r.sms_messages.length === 1
11026
+ && r.group_mms_conversations.length === 1
11027
+ && r.phone_calls.length === 1
11028
+ && r.ticket_thread_comments.length === 1
11029
+ && r.endusers.length === 1
11030
+ )
11031
+ }
11032
+ )
11033
+ await async_test(
11034
+ '[both assigned] Non-admin can load inbox data with no user',
11035
+ () => sdkNonAdmin.api.endusers.load_inbox_data({ }),
11036
+ {
11037
+ onResult: r => (
11038
+ r.chat_rooms.length === 1
11039
+ && r.emails.length === 1
11040
+ && r.sms_messages.length === 1
11041
+ && r.group_mms_conversations.length === 1
11042
+ && r.phone_calls.length === 1
11043
+ && r.ticket_thread_comments.length === 1
11044
+ && r.endusers.length === 1
11045
+ )
11046
+ }
11047
+ )
11048
+
11049
+ const noAccessRole = await sdk.api.role_based_access_permissions.createOne({
11050
+ role: 'No Access',
11051
+ permissions: {
11052
+ emails: { read: null, create: null, update: null, delete: null },
11053
+ sms_messages: { read: null, create: null, update: null, delete: null },
11054
+ group_mms_conversations: { read: null, create: null, update: null, delete: null },
11055
+ phone_calls: { read: null, create: null, update: null, delete: null },
11056
+ ticket_threads: { read: null, create: null, update: null, delete: null },
11057
+ ticket_thread_comments: { read: null, create: null, update: null, delete: null },
11058
+ chat_rooms: { read: null, create: null, update: null, delete: null },
11059
+ // read must be default for endpoint to return non 403
11060
+ endusers: { read: 'Default', create: null, update: null, delete: null },
11061
+ },
11062
+ })
11063
+
11064
+ const roleTestUserEmail = 'inbox.role.test@tellescope.com'
11065
+ const roleTestUser = (
11066
+ await sdk.api.users.getOne({ email: roleTestUserEmail }).catch(() => null) // throws error on none found
11067
+ ) || (
11068
+ await sdk.api.users.createOne({ email: roleTestUserEmail })
11069
+ )
11070
+ // ensure role is set, in case GET returned a user without a role or with a different role
11071
+ await sdk.api.users.updateOne(roleTestUser.id, { roles: [noAccessRole.role] }, { replaceObjectFields: true })
11072
+
11073
+ // add to care team to ensure this doesn't grant unexpected access
11074
+ await sdk.api.endusers.updateOne(e.id, { assignedTo: [roleTestUser.id] })
11075
+ await wait(undefined, 2000) // role change triggers a logout
11076
+
11077
+ const sdkNoAccess = new Session({
11078
+ host,
11079
+ authToken: (await sdk.api.users.generate_auth_token({ id: roleTestUser.id })).authToken,
11080
+ })
11081
+ await async_test('test_authenticated (no access)', sdkNoAccess.test_authenticated, { expectedResult: 'Authenticated!' })
11082
+ await async_test('verify no-read on direct API call', sdkNoAccess.api.emails.getSome, handleAnyError) // ensures role is set up correctly
11083
+
11084
+ await async_test(
11085
+ "No access reads nothing",
11086
+ () => sdkNoAccess.api.endusers.load_inbox_data({ }),
11087
+ {
11088
+ onResult: r => (
11089
+ r.chat_rooms.length === 0
11090
+ && r.emails.length === 0
11091
+ && r.sms_messages.length === 0
11092
+ && r.group_mms_conversations.length === 0
11093
+ && r.phone_calls.length === 0
11094
+ && r.ticket_thread_comments.length === 0
11095
+ && r.endusers.length === 0
11096
+ )
11097
+ }
11098
+ )
11099
+ await async_test(
11100
+ "No access reads nothing (for self)",
11101
+ () => sdkNoAccess.api.endusers.load_inbox_data({ userId: roleTestUser.id }),
11102
+ {
11103
+ onResult: r => (
11104
+ r.chat_rooms.length === 0
11105
+ && r.emails.length === 0
11106
+ && r.sms_messages.length === 0
11107
+ && r.group_mms_conversations.length === 0
11108
+ && r.phone_calls.length === 0
11109
+ && r.ticket_thread_comments.length === 0
11110
+ && r.endusers.length === 0
11111
+ )
11112
+ }
11113
+ )
11114
+ await async_test(
11115
+ "No access reads nothing (for assigned admin)",
11116
+ () => sdkNoAccess.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
11117
+ {
11118
+ onResult: r => (
11119
+ r.chat_rooms.length === 0
11120
+ && r.emails.length === 0
11121
+ && r.sms_messages.length === 0
11122
+ && r.group_mms_conversations.length === 0
11123
+ && r.phone_calls.length === 0
11124
+ && r.ticket_thread_comments.length === 0
11125
+ && r.endusers.length === 0
11126
+ )
11127
+ }
11128
+ )
11129
+
11130
+ const defaultAccessRole = await sdk.api.role_based_access_permissions.createOne({
11131
+ role: 'Default Access',
11132
+ permissions: {
11133
+ emails: { read: 'Default', create: 'Default', update: 'Default', delete: 'Default' },
11134
+ sms_messages: { read: 'Default', create: 'Default', update: 'Default', delete: 'Default' },
11135
+ group_mms_conversations: { read: 'Default', create: 'Default', update: 'Default', delete: 'Default' },
11136
+ phone_calls: { read: 'Default', create: 'Default', update: 'Default', delete: 'Default' },
11137
+ ticket_threads: { read: 'Default', create: 'Default', update: 'Default', delete: 'Default' },
11138
+ ticket_thread_comments: { read: 'Default', create: 'Default', update: 'Default', delete: 'Default' },
11139
+ chat_rooms: { read: 'Default', create: 'Default', update: 'Default', delete: 'Default' },
11140
+ endusers: { read: 'Default', create: 'Default', update: 'Default', delete: 'Default' },
11141
+ },
11142
+ })
11143
+ await sdk.api.users.updateOne(roleTestUser.id, { roles: [defaultAccessRole.role] }, { replaceObjectFields: true })
11144
+ await wait(undefined, 2000) // role change triggers a logout
11145
+ const sdkDefaultAccess = new Session({
11146
+ host,
11147
+ authToken: (await sdk.api.users.generate_auth_token({ id: roleTestUser.id })).authToken,
11148
+ })
11149
+
11150
+ await async_test('test_authenticated (default access)', sdkDefaultAccess.test_authenticated, { expectedResult: 'Authenticated!' })
11151
+
11152
+ await async_test(
11153
+ "Default access reads nothing",
11154
+ () => sdkDefaultAccess.api.endusers.load_inbox_data({ }),
11155
+ {
11156
+ onResult: r => (
11157
+ r.chat_rooms.length === 0
11158
+ && r.emails.length === 0
11159
+ && r.sms_messages.length === 0
11160
+ && r.group_mms_conversations.length === 0
11161
+ && r.phone_calls.length === 0
11162
+ && r.ticket_thread_comments.length === 0
11163
+ && r.endusers.length === 0
11164
+ )
11165
+ }
11166
+ )
11167
+ await async_test(
11168
+ "Default access reads nothing (for self)",
11169
+ () => sdkDefaultAccess.api.endusers.load_inbox_data({ userId: roleTestUser.id }),
11170
+ {
11171
+ onResult: r => (
11172
+ r.chat_rooms.length === 0
11173
+ && r.emails.length === 0
11174
+ && r.sms_messages.length === 0
11175
+ && r.group_mms_conversations.length === 0
11176
+ && r.phone_calls.length === 0
11177
+ && r.ticket_thread_comments.length === 0
11178
+ && r.endusers.length === 0
11179
+ )
11180
+ }
11181
+ )
11182
+ await async_test(
11183
+ "Default access reads nothing (for assigned admin)",
11184
+ () => sdkDefaultAccess.api.endusers.load_inbox_data({ userId: sdk.userInfo.id }),
11185
+ {
11186
+ onResult: r => (
11187
+ r.chat_rooms.length === 0
11188
+ && r.emails.length === 0
11189
+ && r.sms_messages.length === 0
11190
+ && r.group_mms_conversations.length === 0
11191
+ && r.phone_calls.length === 0
11192
+ && r.ticket_thread_comments.length === 0
11193
+ && r.endusers.length === 0
11194
+ )
11195
+ }
11196
+ )
11197
+
11198
+
11199
+ // assign default user to the specific messages by setting userId, userIds, etc.
11200
+ await sdk.api.emails.updateOne(email.id, { assignedTo: [], userId: roleTestUser.id }, { replaceObjectFields: true })
11201
+ await sdk.api.sms_messages.updateOne(sms.id, { assignedTo: [], userId: roleTestUser.id }, { replaceObjectFields: true })
11202
+ await sdk.api.group_mms_conversations.updateOne(groupMMS.id, { assignedTo: [], userIds: [roleTestUser.id] }, { replaceObjectFields: true })
11203
+ await sdk.api.phone_calls.updateOne(call.id, { assignedTo: [], userId: roleTestUser.id }, { replaceObjectFields: true })
11204
+ await sdk.api.ticket_thread_comments.updateOne(comment.id, {assignedTo: [], userId: roleTestUser.id }, { replaceObjectFields: true })
11205
+ // need to replace assignedTo for userIds to take precedent
11206
+ await sdk.api.chat_rooms.updateOne(room.id, { assignedTo: [], userIds: [roleTestUser.id] }, { replaceObjectFields: true})
11207
+
11208
+ await async_test(
11209
+ "Default access reads stuff when assigned",
11210
+ () => sdkDefaultAccess.api.endusers.load_inbox_data({ }),
11211
+ {
11212
+ onResult: r => (
11213
+ r.chat_rooms.length === 1
11214
+ && r.emails.length === 1
11215
+ && r.sms_messages.length === 1
11216
+ && r.group_mms_conversations.length === 1
11217
+ && r.phone_calls.length === 1
11218
+ && r.ticket_thread_comments.length === 1
11219
+ && r.endusers.length === 1
11220
+ )
11221
+ }
11222
+ )
11223
+ await async_test(
11224
+ "Default access reads stuff when assigned (for self)",
11225
+ () => sdkDefaultAccess.api.endusers.load_inbox_data({ userId: roleTestUser.id }),
11226
+ {
11227
+ onResult: r => (
11228
+ r.chat_rooms.length === 1
11229
+ && r.emails.length === 1
11230
+ && r.sms_messages.length === 1
11231
+ && r.group_mms_conversations.length === 1
11232
+ && r.phone_calls.length === 1
11233
+ && r.ticket_thread_comments.length === 1
11234
+ && r.endusers.length === 1
11235
+ )
11236
+ }
11237
+ )
11238
+
11239
+
11240
+ await Promise.all([
11241
+ sdk.api.endusers.deleteOne(e.id),
11242
+ sdk.api.chat_rooms.deleteOne(room.id),
11243
+ sdk.api.role_based_access_permissions.deleteOne(noAccessRole.id),
11244
+ sdk.api.role_based_access_permissions.deleteOne(defaultAccessRole.id),
11245
+ sdk.api.users.deleteOne(roleTestUser.id),
11246
+ ])
11247
+ }
11248
+
10570
11249
  (async () => {
10571
11250
  log_header("API")
10572
11251
 
@@ -10680,13 +11359,14 @@ const replace_enduser_template_values_tests = async () => {
10680
11359
  await replace_enduser_template_values_tests()
10681
11360
  await mfa_tests()
10682
11361
  await setup_tests()
11362
+ await inbox_loading_tests()
10683
11363
  await multi_tenant_tests() // should come right after setup tests
10684
11364
  await sync_tests_with_access_tags() // should come directly after setup to avoid extra sync values
10685
11365
  await sync_tests() // should come directly after setup to avoid extra sync values
11366
+ await get_templated_message_tests()
10686
11367
  await updatedAt_tests()
10687
11368
  await automation_trigger_tests()
10688
11369
  await file_source_tests()
10689
- await get_templated_message_tests()
10690
11370
  await enduser_access_tags_tests()
10691
11371
  await enduserAccessTests()
10692
11372
  await test_form_response_search()