@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.
- package/lib/cjs/sdk.d.ts +1 -0
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/sdk.js +1 -0
- package/lib/cjs/sdk.js.map +1 -1
- package/lib/cjs/tests/tests.js +722 -91
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/sdk.d.ts +3 -2
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/sdk.js +1 -0
- package/lib/esm/sdk.js.map +1 -1
- package/lib/esm/session.d.ts +0 -1
- package/lib/esm/session.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +722 -91
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/sdk.ts +4 -0
- package/src/tests/tests.ts +681 -1
- package/test_generated.pdf +0 -0
package/src/tests/tests.ts
CHANGED
|
@@ -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()
|