@tellescope/sdk 1.0.0 → 1.1.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/enduser.d.ts +149 -1
- package/lib/cjs/enduser.d.ts.map +1 -1
- package/lib/cjs/enduser.js +8 -0
- package/lib/cjs/enduser.js.map +1 -1
- package/lib/cjs/sdk.d.ts +148 -0
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/sdk.js +24 -16
- package/lib/cjs/sdk.js.map +1 -1
- package/lib/cjs/tests/socket_tests.js +1 -0
- package/lib/cjs/tests/socket_tests.js.map +1 -1
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +221 -15
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/enduser.d.ts +149 -2
- package/lib/esm/enduser.d.ts.map +1 -1
- package/lib/esm/enduser.js +8 -0
- package/lib/esm/enduser.js.map +1 -1
- package/lib/esm/sdk.d.ts +148 -1
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/sdk.js +24 -16
- package/lib/esm/sdk.js.map +1 -1
- package/lib/esm/tests/socket_tests.js +1 -0
- package/lib/esm/tests/socket_tests.js.map +1 -1
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +221 -15
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
- package/src/enduser.ts +34 -2
- package/src/sdk.ts +30 -13
- package/src/tests/socket_tests.ts +1 -1
- package/src/tests/tests.ts +190 -7
package/src/tests/tests.ts
CHANGED
|
@@ -431,6 +431,7 @@ const validateReturnType = <N extends ModelName, T=ClientModelForName[N]>(fs: Mo
|
|
|
431
431
|
|
|
432
432
|
let defaultEnduser = undefined as Enduser | undefined
|
|
433
433
|
const run_generated_tests = async <N extends ModelName>({ queries, model, name, returns } : GeneratedTest<N>) => {
|
|
434
|
+
if (name === 'post_likes') return // all custom
|
|
434
435
|
if (!defaultEnduser) defaultEnduser = await sdk.api.endusers.createOne({ email: 'default@tellescope.com', phone: "5555555555" })
|
|
435
436
|
|
|
436
437
|
const { instance, updates, filter } = instanceForModel(model)
|
|
@@ -456,9 +457,10 @@ const run_generated_tests = async <N extends ModelName>({ queries, model, name,
|
|
|
456
457
|
await async_test(
|
|
457
458
|
`create-${singularName} (missing a required field)`,
|
|
458
459
|
() => queries.createOne({} as any),
|
|
459
|
-
{ shouldError: true, onError: e => e.message.endsWith('is required') },
|
|
460
|
+
{ shouldError: true, onError: e => e.message.endsWith('is required') || e.message.includes('Value not provided') },
|
|
460
461
|
)
|
|
461
462
|
}
|
|
463
|
+
|
|
462
464
|
await async_test(
|
|
463
465
|
`create-${singularName}`,
|
|
464
466
|
() => queries.createOne(instance),
|
|
@@ -1341,6 +1343,8 @@ const users_tests = async () => {
|
|
|
1341
1343
|
}
|
|
1342
1344
|
|
|
1343
1345
|
const calendar_events_tests = async () => {
|
|
1346
|
+
log_header("Calendar Events")
|
|
1347
|
+
|
|
1344
1348
|
const { id } = await sdk.api.endusers.createOne({ email })
|
|
1345
1349
|
const { authToken, enduser } = await sdk.api.endusers.generate_auth_token({ id })
|
|
1346
1350
|
const enduserSDK = new EnduserSession({ host, authToken, enduser, businessId: sdk.userInfo.businessId })
|
|
@@ -1351,6 +1355,9 @@ const calendar_events_tests = async () => {
|
|
|
1351
1355
|
const eventWithEnduser = await sdk.api.calendar_events.createOne({
|
|
1352
1356
|
title: "Event with Enduser", durationInMinutes: 30, startTimeInMS: Date.now(), attendees: [{ id, type: 'enduser' }]
|
|
1353
1357
|
})
|
|
1358
|
+
const publicEvent = await sdk.api.calendar_events.createOne({
|
|
1359
|
+
title: "Event", durationInMinutes: 30, startTimeInMS: Date.now(), publicRead: true,
|
|
1360
|
+
})
|
|
1354
1361
|
|
|
1355
1362
|
await async_test(
|
|
1356
1363
|
`user can access own event`,
|
|
@@ -1358,9 +1365,20 @@ const calendar_events_tests = async () => {
|
|
|
1358
1365
|
{ onResult: e => e && e.id === event.id }
|
|
1359
1366
|
)
|
|
1360
1367
|
await async_test(
|
|
1361
|
-
`user can access
|
|
1368
|
+
`user can access public event`,
|
|
1369
|
+
() => sdk.api.calendar_events.getOne(publicEvent.id),
|
|
1370
|
+
{ onResult: e => e && e.id === publicEvent.id }
|
|
1371
|
+
)
|
|
1372
|
+
// TODO: implement support for publicRead for users,
|
|
1373
|
+
// await async_test(
|
|
1374
|
+
// `non-creator, non-admin user can access public event`,
|
|
1375
|
+
// () => sdkNonAdmin.api.calendar_events.getOne(publicEvent.id),
|
|
1376
|
+
// { onResult: e => e && e.id === event.id }
|
|
1377
|
+
// )
|
|
1378
|
+
await async_test(
|
|
1379
|
+
`user can access own events and public events`,
|
|
1362
1380
|
() => sdk.api.calendar_events.getSome(),
|
|
1363
|
-
{ onResult: es => es && es.length ===
|
|
1381
|
+
{ onResult: es => es && es.length === 3 }
|
|
1364
1382
|
)
|
|
1365
1383
|
await async_test(
|
|
1366
1384
|
`user can access own event with enduser attendee`,
|
|
@@ -1379,12 +1397,32 @@ const calendar_events_tests = async () => {
|
|
|
1379
1397
|
{ onResult: e => e && e.id === eventWithEnduser.id }
|
|
1380
1398
|
)
|
|
1381
1399
|
await async_test(
|
|
1382
|
-
`enduser can access
|
|
1400
|
+
`enduser can access public event`,
|
|
1401
|
+
() => enduserSDK.api.calendar_events.getOne(publicEvent.id),
|
|
1402
|
+
{ onResult: e => e && e.id === publicEvent.id }
|
|
1403
|
+
)
|
|
1404
|
+
await async_test(
|
|
1405
|
+
`enduser can access own events and public events`,
|
|
1383
1406
|
() => enduserSDK.api.calendar_events.getSome(),
|
|
1384
|
-
{ onResult: es => es && es.length ===
|
|
1407
|
+
{ onResult: es => es && es.length === 2 }
|
|
1408
|
+
)
|
|
1409
|
+
await async_test(
|
|
1410
|
+
`enduser cannot update publicEvent `,
|
|
1411
|
+
() => enduserSDK.api.calendar_events.updateOne(publicEvent.id, { title: "CHANGED "}),
|
|
1412
|
+
handleAnyError
|
|
1413
|
+
)
|
|
1414
|
+
await async_test(
|
|
1415
|
+
`enduser cannot delete publicEvent`,
|
|
1416
|
+
() => enduserSDK.api.calendar_events.deleteOne(publicEvent.id),
|
|
1417
|
+
handleAnyError
|
|
1385
1418
|
)
|
|
1386
1419
|
|
|
1387
|
-
await
|
|
1420
|
+
await Promise.all([
|
|
1421
|
+
sdk.api.endusers.deleteOne(enduser.id),
|
|
1422
|
+
sdk.api.calendar_events.deleteOne(event.id),
|
|
1423
|
+
sdk.api.calendar_events.deleteOne(eventWithEnduser.id),
|
|
1424
|
+
sdk.api.calendar_events.deleteOne(publicEvent.id),
|
|
1425
|
+
])
|
|
1388
1426
|
}
|
|
1389
1427
|
|
|
1390
1428
|
const automation_events_tests = async () => {
|
|
@@ -1436,6 +1474,13 @@ const form_response_tests = async () => {
|
|
|
1436
1474
|
export const meetings_tests = async () => {
|
|
1437
1475
|
log_header("Meetings")
|
|
1438
1476
|
|
|
1477
|
+
const enduser = await sdk.api.endusers.createOne({ email })
|
|
1478
|
+
await sdk.api.endusers.set_password({ id: enduser.id, password }).catch(console.error)
|
|
1479
|
+
await enduserSDK.authenticate(email, password).catch(console.error)
|
|
1480
|
+
|
|
1481
|
+
const privateMeeting = await sdk.api.meetings.start_meeting({ })
|
|
1482
|
+
const publicMeeting = await sdk.api.meetings.start_meeting({ publicRead: true })
|
|
1483
|
+
|
|
1439
1484
|
await async_test(
|
|
1440
1485
|
`Admin can get meetings`,
|
|
1441
1486
|
sdk.api.meetings.getSome,
|
|
@@ -1446,6 +1491,23 @@ export const meetings_tests = async () => {
|
|
|
1446
1491
|
sdkNonAdmin.api.meetings.getSome,
|
|
1447
1492
|
{ shouldError: true, onError: e => e.message === "Admin access only" },
|
|
1448
1493
|
)
|
|
1494
|
+
|
|
1495
|
+
await async_test(
|
|
1496
|
+
`Enduser can access public meeting, not private meeting`,
|
|
1497
|
+
enduserSDK.api.meetings.my_meetings,
|
|
1498
|
+
{ onResult: ms => ms.length === 1 && !!ms.find(m => m.id === publicMeeting.id) }
|
|
1499
|
+
)
|
|
1500
|
+
|
|
1501
|
+
await Promise.all([
|
|
1502
|
+
sdk.api.meetings.end_meeting({ id: publicMeeting.id }),
|
|
1503
|
+
sdk.api.meetings.end_meeting({ id: privateMeeting.id }),
|
|
1504
|
+
sdk.api.endusers.deleteOne(enduser.id),
|
|
1505
|
+
])
|
|
1506
|
+
|
|
1507
|
+
// await Promise.all([
|
|
1508
|
+
// sdk.api.meetings.deleteOne(publicMeeting.id),
|
|
1509
|
+
// sdk.api.meetings.deleteOne(privateMeeting.id),
|
|
1510
|
+
// ])
|
|
1449
1511
|
}
|
|
1450
1512
|
|
|
1451
1513
|
const search_tests = async () => {
|
|
@@ -1533,7 +1595,7 @@ const role_based_access_tests = async () => {
|
|
|
1533
1595
|
|
|
1534
1596
|
const chatRoom = await sdk.api.chat_rooms.createOne({ enduserIds: [e.id ]})
|
|
1535
1597
|
const chatMessage = await sdk.api.chats.createOne({ roomId: chatRoom.id, message: 'test chat access' })
|
|
1536
|
-
|
|
1598
|
+
await sdk.api.chats.createOne({ roomId: chatRoom.id, message: 'test chat access 2' })
|
|
1537
1599
|
|
|
1538
1600
|
// unassigned to enduser access tests
|
|
1539
1601
|
await async_test(
|
|
@@ -1683,6 +1745,121 @@ const status_update_tests = async () => {
|
|
|
1683
1745
|
])
|
|
1684
1746
|
}
|
|
1685
1747
|
|
|
1748
|
+
const community_tests = async () => {
|
|
1749
|
+
log_header("Community")
|
|
1750
|
+
|
|
1751
|
+
const enduser = await sdk.api.endusers.createOne({ email })
|
|
1752
|
+
await sdk.api.endusers.set_password({ id: enduser.id, password }).catch(console.error)
|
|
1753
|
+
await enduserSDK.authenticate(email, password).catch(console.error)
|
|
1754
|
+
|
|
1755
|
+
const forum = await sdk.api.forums.createOne({ title: 'test', publicRead: true })
|
|
1756
|
+
const privateForum = await sdk.api.forums.createOne({ title: 'test', publicRead: false })
|
|
1757
|
+
|
|
1758
|
+
await async_test(
|
|
1759
|
+
`enduser access forum`, () => enduserSDK.api.forums.getOne(forum.id), { onResult: f => f.id === forum.id }
|
|
1760
|
+
)
|
|
1761
|
+
await async_test(`enduser access privateForum error`, () => enduserSDK.api.forums.getOne(privateForum.id), handleAnyError)
|
|
1762
|
+
|
|
1763
|
+
const enduserPost = await enduserSDK.api.forum_posts.createOne({ forumId: forum.id, htmlContent: 'enduser', textContent: 'enduser' })
|
|
1764
|
+
assert(!!enduserPost, 'enduser post failed', 'enduser post successful')
|
|
1765
|
+
const userPost = await sdk.api.forum_posts.createOne({ forumId: forum.id, htmlContent: 'user', textContent: 'user' })
|
|
1766
|
+
assert(!!userPost, 'user post failed', 'user post successful')
|
|
1767
|
+
|
|
1768
|
+
assert(enduserPost.numComments === 0 && enduserPost.numLikes === 0, 'counts not initialized', 'counts initialized at 0')
|
|
1769
|
+
|
|
1770
|
+
await async_test(
|
|
1771
|
+
`enduser post private errors`,
|
|
1772
|
+
() => enduserSDK.api.forum_posts.createOne({ forumId: privateForum.id, htmlContent: 'enduser', textContent: 'enduser' }),
|
|
1773
|
+
handleAnyError
|
|
1774
|
+
)
|
|
1775
|
+
|
|
1776
|
+
const enduserSelfComment = await enduserSDK.api.post_comments.createOne({ forumId: forum.id, postId: enduserPost.id, htmlContent: 'enduser', textContent: 'enduser' })
|
|
1777
|
+
const userComment = await sdk.api.post_comments.createOne({ forumId: forum.id, postId: enduserPost.id, htmlContent: 'user', textContent: 'user' })
|
|
1778
|
+
assert(!!enduserSelfComment, 'enduser comment failed', 'enduser comment successful')
|
|
1779
|
+
assert(!!userComment, 'user comment failed', 'user comment successful')
|
|
1780
|
+
|
|
1781
|
+
await enduserSDK.api.post_likes.createOne({ forumId: forum.id, postId: enduserPost.id })
|
|
1782
|
+
await async_test(
|
|
1783
|
+
`double-like not allowed`,
|
|
1784
|
+
() => enduserSDK.api.post_likes.createOne({ forumId: forum.id, postId: enduserPost.id }),
|
|
1785
|
+
handleAnyError
|
|
1786
|
+
)
|
|
1787
|
+
|
|
1788
|
+
await wait(undefined, 50)
|
|
1789
|
+
await async_test(
|
|
1790
|
+
`post and like counts on create`,
|
|
1791
|
+
() => sdk.api.forum_posts.getOne(enduserPost.id),
|
|
1792
|
+
{ onResult: p => p.numComments === 2 && p.numLikes === 1}
|
|
1793
|
+
)
|
|
1794
|
+
|
|
1795
|
+
await enduserSDK.api.post_likes.unlike_post({ postId: enduserPost.id, forumId: enduserPost.forumId })
|
|
1796
|
+
await wait(undefined, 50)
|
|
1797
|
+
await async_test(
|
|
1798
|
+
`post and like counts after unlike`,
|
|
1799
|
+
() => sdk.api.forum_posts.getOne(enduserPost.id),
|
|
1800
|
+
{ onResult: p => p.numComments === 2 && p.numLikes === 0 }
|
|
1801
|
+
)
|
|
1802
|
+
|
|
1803
|
+
|
|
1804
|
+
const userSelfPost = await sdk.api.forum_posts.createOne({ forumId: privateForum.id, htmlContent: 'user', textContent: 'user' })
|
|
1805
|
+
assert(!!userSelfPost, 'user private post failed', 'user private post successful')
|
|
1806
|
+
|
|
1807
|
+
const userSelfPostComment = await sdk.api.post_comments.createOne({ forumId: privateForum.id, postId: userSelfPost.id, htmlContent: 'user', textContent: 'user' })
|
|
1808
|
+
assert(!!userSelfPostComment, 'user private post comment failed', 'user private post comment successful')
|
|
1809
|
+
|
|
1810
|
+
await async_test(
|
|
1811
|
+
`enduser comment private errors`,
|
|
1812
|
+
() => enduserSDK.api.post_comments.createOne({ forumId: privateForum.id, postId: userSelfPost.id, htmlContent: 'enduser', textContent: 'enduser' }),
|
|
1813
|
+
handleAnyError
|
|
1814
|
+
)
|
|
1815
|
+
await async_test(
|
|
1816
|
+
'enduser cannot access private post by id',
|
|
1817
|
+
() => enduserSDK.api.forum_posts.getOne(userSelfPost.id),
|
|
1818
|
+
handleAnyError,
|
|
1819
|
+
)
|
|
1820
|
+
await async_test(
|
|
1821
|
+
'enduser cannot access private post by filter',
|
|
1822
|
+
() => enduserSDK.api.forum_posts.getOne({ forumId: privateForum.id }),
|
|
1823
|
+
handleAnyError,
|
|
1824
|
+
)
|
|
1825
|
+
await async_test(
|
|
1826
|
+
'enduser cannot access private comment by id',
|
|
1827
|
+
() => enduserSDK.api.post_comments.getOne(userSelfPostComment.id),
|
|
1828
|
+
handleAnyError,
|
|
1829
|
+
)
|
|
1830
|
+
await async_test(
|
|
1831
|
+
'enduser cannot access private comment by filter (forum id)',
|
|
1832
|
+
() => enduserSDK.api.post_comments.getOne({ forumId: privateForum.id }),
|
|
1833
|
+
handleAnyError,
|
|
1834
|
+
)
|
|
1835
|
+
await async_test(
|
|
1836
|
+
'enduser cannot access private comment by filter (post id)',
|
|
1837
|
+
() => enduserSDK.api.post_comments.getOne({ postId: userSelfPost.id }),
|
|
1838
|
+
handleAnyError,
|
|
1839
|
+
)
|
|
1840
|
+
await async_test(
|
|
1841
|
+
'enduser cannot access private comment by filter (forum and post id)',
|
|
1842
|
+
() => enduserSDK.api.post_comments.getOne({ forumId: privateForum.id, postId: userSelfPost.id }),
|
|
1843
|
+
handleAnyError,
|
|
1844
|
+
)
|
|
1845
|
+
await async_test(
|
|
1846
|
+
'enduser cannot access private posts',
|
|
1847
|
+
() => enduserSDK.api.forum_posts.getSome({ filter: { forumId: privateForum.id }}),
|
|
1848
|
+
{ onResult: posts => posts.length === 0 },
|
|
1849
|
+
)
|
|
1850
|
+
await async_test(
|
|
1851
|
+
'enduser cannot access private comments',
|
|
1852
|
+
() => enduserSDK.api.post_comments.getSome({ filter: { forumId: privateForum.id }}),
|
|
1853
|
+
{ onResult: comments => comments.length === 0 },
|
|
1854
|
+
)
|
|
1855
|
+
|
|
1856
|
+
await Promise.all([
|
|
1857
|
+
await sdk.api.endusers.deleteOne(enduser.id),
|
|
1858
|
+
await sdk.api.forums.deleteOne(forum.id),
|
|
1859
|
+
await sdk.api.forums.deleteOne(privateForum.id),
|
|
1860
|
+
])
|
|
1861
|
+
}
|
|
1862
|
+
|
|
1686
1863
|
const NO_TEST = () => {}
|
|
1687
1864
|
const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
1688
1865
|
chats: chat_tests,
|
|
@@ -1710,6 +1887,12 @@ const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
|
1710
1887
|
enduser_status_updates: status_update_tests,
|
|
1711
1888
|
user_logs: NO_TEST,
|
|
1712
1889
|
user_notifications: notifications_tests,
|
|
1890
|
+
enduser_observations: NO_TEST,
|
|
1891
|
+
forum_posts: NO_TEST,
|
|
1892
|
+
forums: community_tests,
|
|
1893
|
+
managed_content_records: NO_TEST,
|
|
1894
|
+
post_comments: NO_TEST,
|
|
1895
|
+
post_likes: NO_TEST,
|
|
1713
1896
|
};
|
|
1714
1897
|
|
|
1715
1898
|
(async () => {
|