@tellescope/sdk 1.2.0 → 1.2.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.
- package/lib/cjs/enduser.d.ts +52 -2
- package/lib/cjs/enduser.d.ts.map +1 -1
- package/lib/cjs/enduser.js +4 -0
- package/lib/cjs/enduser.js.map +1 -1
- package/lib/cjs/sdk.d.ts +51 -1
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/sdk.js +3 -0
- package/lib/cjs/sdk.js.map +1 -1
- package/lib/cjs/session.d.ts +0 -1
- package/lib/cjs/session.d.ts.map +1 -1
- package/lib/cjs/session.js.map +1 -1
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +191 -33
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/enduser.d.ts +52 -1
- package/lib/esm/enduser.d.ts.map +1 -1
- package/lib/esm/enduser.js +4 -0
- package/lib/esm/enduser.js.map +1 -1
- package/lib/esm/sdk.d.ts +51 -0
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/sdk.js +3 -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/session.js.map +1 -1
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +191 -33
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/enduser.ts +11 -0
- package/src/sdk.ts +9 -0
- package/src/session.ts +1 -0
- package/src/tests/tests.ts +147 -14
package/src/tests/tests.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
} from "@tellescope/types-client"
|
|
11
11
|
import {
|
|
12
12
|
AutomationAction,
|
|
13
|
+
FormResponseValue,
|
|
13
14
|
ModelName,
|
|
14
15
|
} from "@tellescope/types-models"
|
|
15
16
|
|
|
@@ -1432,7 +1433,12 @@ const formEventTests = async () => {
|
|
|
1432
1433
|
const journey = await sdk.api.journeys.createOne({ title: 'test journey '})
|
|
1433
1434
|
const form = await sdk.api.forms.createOne({
|
|
1434
1435
|
title: 'test form',
|
|
1435
|
-
|
|
1436
|
+
})
|
|
1437
|
+
const field = await sdk.api.form_fields.createOne({
|
|
1438
|
+
formId: form.id,
|
|
1439
|
+
title: 'question',
|
|
1440
|
+
type: 'string',
|
|
1441
|
+
previousFields: [{ type: 'root', info: {} }]
|
|
1436
1442
|
})
|
|
1437
1443
|
|
|
1438
1444
|
const triggerStep = await sdk.api.automation_steps.createOne({
|
|
@@ -1460,8 +1466,19 @@ const formEventTests = async () => {
|
|
|
1460
1466
|
const { accessCode: acNoStep } = await sdk.api.form_responses.prepare_form_response({ formId: form.id, enduserId: enduser.id })
|
|
1461
1467
|
const { accessCode: acStep } = await sdk.api.form_responses.prepare_form_response({ formId: form.id, enduserId: enduser.id })
|
|
1462
1468
|
|
|
1463
|
-
|
|
1464
|
-
|
|
1469
|
+
const testResponse: FormResponseValue = {
|
|
1470
|
+
answer: {
|
|
1471
|
+
type: 'string',
|
|
1472
|
+
value: 'answer'
|
|
1473
|
+
},
|
|
1474
|
+
fieldId: field.id,
|
|
1475
|
+
fieldTitle: field.title,
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
const { formResponse } = await sdk.api.form_responses.submit_form_response({ accessCode: acNoStep, responses: [testResponse] })
|
|
1479
|
+
assert(objects_equivalent(formResponse.responses, [testResponse]), 'bad form resonse returned', 'form response returned correctly')
|
|
1480
|
+
|
|
1481
|
+
await sdk.api.form_responses.submit_form_response({ accessCode: acStep, automationStepId: triggerStep.id, responses: [testResponse] })
|
|
1465
1482
|
await wait(undefined, 250) // allow background creation with generous pause
|
|
1466
1483
|
|
|
1467
1484
|
await async_test(
|
|
@@ -1606,10 +1623,81 @@ const ticketEventTests = async () => {
|
|
|
1606
1623
|
])
|
|
1607
1624
|
}
|
|
1608
1625
|
|
|
1626
|
+
const removeFromJourneyTests = async () => {
|
|
1627
|
+
log_header("Remove from Journey")
|
|
1628
|
+
|
|
1629
|
+
const journey = await sdk.api.journeys.createOne({ title: 'test journey'})
|
|
1630
|
+
const journey2 = await sdk.api.journeys.createOne({ title: 'other journey'})
|
|
1631
|
+
|
|
1632
|
+
const enduser = await sdk.api.endusers.createOne({ email: 'test@tellescope.com' })
|
|
1633
|
+
const enduser2 = await sdk.api.endusers.createOne({ email: 'test2@tellescope.com' })
|
|
1634
|
+
await sdk.api.endusers.updateOne(enduser.id, { journeys: { [journey.id]: 'Added', [journey2.id]: 'Added2' }})
|
|
1635
|
+
|
|
1636
|
+
const step = await (
|
|
1637
|
+
sdk.api.automation_steps.createOne({
|
|
1638
|
+
journeyId: journey.id,
|
|
1639
|
+
event: { type: 'onJourneyStart', info: { } },
|
|
1640
|
+
action: { type: 'setEnduserStatus', info: { status: 'Root' }, },
|
|
1641
|
+
})
|
|
1642
|
+
)
|
|
1643
|
+
const step2 = await (
|
|
1644
|
+
sdk.api.automation_steps.createOne({
|
|
1645
|
+
journeyId: journey2.id,
|
|
1646
|
+
event: { type: 'onJourneyStart', info: { } },
|
|
1647
|
+
action: { type: 'setEnduserStatus', info: { status: 'Root' }, },
|
|
1648
|
+
})
|
|
1649
|
+
)
|
|
1650
|
+
|
|
1651
|
+
const createAction = (journeyId: string, step: { id: string }, enduserId?: string) => (
|
|
1652
|
+
sdk.api.automated_actions.createOne({
|
|
1653
|
+
journeyId,
|
|
1654
|
+
automationStepId: step.id,
|
|
1655
|
+
cancelConditions: [],
|
|
1656
|
+
enduserId: enduserId ?? enduser.id,
|
|
1657
|
+
processAfter: Date.now() + 1000000, // add delay to make sure it doesn't happen
|
|
1658
|
+
status: 'active',
|
|
1659
|
+
event: { type: 'onJourneyStart', info: { } },
|
|
1660
|
+
action: { type: 'setEnduserStatus', info: { status: 'Test Status' }, },
|
|
1661
|
+
})
|
|
1662
|
+
)
|
|
1663
|
+
|
|
1664
|
+
const numberOfActions = 4
|
|
1665
|
+
for (let i = 0; i < numberOfActions; i++) {
|
|
1666
|
+
await createAction(journey.id, step);
|
|
1667
|
+
await createAction(journey2.id, step2);
|
|
1668
|
+
await createAction(journey.id, step, enduser2.id);
|
|
1669
|
+
}
|
|
1670
|
+
|
|
1671
|
+
// remove from journey, should set all statuses to cancelled
|
|
1672
|
+
await sdk.api.endusers.updateOne(enduser.id, { journeys: { } }, { replaceObjectFields: true })
|
|
1673
|
+
await wait(undefined, 250)
|
|
1674
|
+
|
|
1675
|
+
await async_test(
|
|
1676
|
+
`Automated actions for handle ticket created`,
|
|
1677
|
+
() => sdk.api.automated_actions.getSome(),
|
|
1678
|
+
{ onResult: (actions => (
|
|
1679
|
+
// enduser removed from multiple journeys
|
|
1680
|
+
actions.filter(a => a.status === 'cancelled').length === numberOfActions * 2
|
|
1681
|
+
|
|
1682
|
+
// other enduser is unaffected
|
|
1683
|
+
&& actions.filter(a => a.status === 'active').length === numberOfActions
|
|
1684
|
+
))}
|
|
1685
|
+
)
|
|
1686
|
+
|
|
1687
|
+
|
|
1688
|
+
await Promise.all([
|
|
1689
|
+
sdk.api.journeys.deleteOne(journey.id),
|
|
1690
|
+
sdk.api.journeys.deleteOne(journey2.id),
|
|
1691
|
+
sdk.api.endusers.deleteOne(enduser.id),
|
|
1692
|
+
sdk.api.endusers.deleteOne(enduser2.id),
|
|
1693
|
+
])
|
|
1694
|
+
}
|
|
1695
|
+
|
|
1609
1696
|
const automation_events_tests = async () => {
|
|
1610
1697
|
log_header("Automation Events")
|
|
1611
1698
|
await formEventTests()
|
|
1612
1699
|
await ticketEventTests()
|
|
1700
|
+
await removeFromJourneyTests()
|
|
1613
1701
|
|
|
1614
1702
|
}
|
|
1615
1703
|
|
|
@@ -1622,21 +1710,60 @@ const form_response_tests = async () => {
|
|
|
1622
1710
|
const enduser = await sdk.api.endusers.createOne({ email: "formresponse@tellescope.com" })
|
|
1623
1711
|
const form = await sdk.api.forms.createOne({
|
|
1624
1712
|
title: 'test form',
|
|
1625
|
-
fields: [{
|
|
1626
|
-
title: stringTitle,
|
|
1627
|
-
description: 'Enter a string',
|
|
1628
|
-
type: 'string',
|
|
1629
|
-
isOptional: false,
|
|
1630
|
-
intakeField: stringIntakeField
|
|
1631
|
-
}]
|
|
1632
1713
|
})
|
|
1714
|
+
assert(form.numFields === 0, 'numFields bad init', 'num fields on init')
|
|
1715
|
+
|
|
1716
|
+
const field = await sdk.api.form_fields.createOne({
|
|
1717
|
+
formId: form.id,
|
|
1718
|
+
title: stringTitle,
|
|
1719
|
+
description: 'Enter a string',
|
|
1720
|
+
type: 'string',
|
|
1721
|
+
isOptional: false,
|
|
1722
|
+
intakeField: stringIntakeField,
|
|
1723
|
+
previousFields: [{ type: 'root', info: {} }]
|
|
1724
|
+
})
|
|
1725
|
+
const field2 = await sdk.api.form_fields.createOne({
|
|
1726
|
+
formId: form.id,
|
|
1727
|
+
title: stringTitle,
|
|
1728
|
+
description: 'Enter a string',
|
|
1729
|
+
type: 'string',
|
|
1730
|
+
isOptional: false,
|
|
1731
|
+
intakeField: stringIntakeField,
|
|
1732
|
+
previousFields: [{ type: 'root', info: {} }]
|
|
1733
|
+
})
|
|
1734
|
+
await wait(undefined, 250)
|
|
1735
|
+
|
|
1736
|
+
await async_test(
|
|
1737
|
+
`numFields incremented on new field`,
|
|
1738
|
+
() => sdk.api.forms.getOne(form.id),
|
|
1739
|
+
{ onResult: f => f.numFields === 2},
|
|
1740
|
+
)
|
|
1741
|
+
|
|
1742
|
+
await sdk.api.form_fields.deleteOne(field2.id)
|
|
1743
|
+
await wait(undefined, 250)
|
|
1744
|
+
await async_test(
|
|
1745
|
+
`numFields decremented after delete`,
|
|
1746
|
+
() => sdk.api.forms.getOne(form.id),
|
|
1747
|
+
{ onResult: f => f.numFields === 1},
|
|
1748
|
+
)
|
|
1749
|
+
|
|
1750
|
+
|
|
1633
1751
|
// await sdk.api.automation_steps.createOne({
|
|
1634
1752
|
// event: { type: "formResponse", info: { formId: form.id } },
|
|
1635
1753
|
// action: { type: 'sendWebhook', info: { message: 'test' } },
|
|
1636
1754
|
// })
|
|
1637
1755
|
|
|
1638
1756
|
const { accessCode } = await sdk.api.form_responses.prepare_form_response({ formId: form.id, enduserId: enduser.id })
|
|
1639
|
-
await sdk.api.form_responses.submit_form_response({ accessCode, responses: [
|
|
1757
|
+
await sdk.api.form_responses.submit_form_response({ accessCode, responses: [
|
|
1758
|
+
{
|
|
1759
|
+
fieldTitle: 'doesnot matter',
|
|
1760
|
+
fieldId: field.id,
|
|
1761
|
+
answer: {
|
|
1762
|
+
type: 'string',
|
|
1763
|
+
value: stringResponse,
|
|
1764
|
+
},
|
|
1765
|
+
}
|
|
1766
|
+
]})
|
|
1640
1767
|
|
|
1641
1768
|
// const [triggeredAutomation] = await sdk.api.automated_actions.getSome()
|
|
1642
1769
|
const enduserWithUpdate = await sdk.api.endusers.getOne(enduser.id)
|
|
@@ -1645,7 +1772,7 @@ const form_response_tests = async () => {
|
|
|
1645
1772
|
// assert(triggeredAutomation?.event?.type === 'formResponse', 'no form response event', 'form response event triggered')
|
|
1646
1773
|
assert(enduserWithUpdate?.fields?.[stringIntakeField] === stringResponse, 'no enduser update', 'enduser updated')
|
|
1647
1774
|
assert(
|
|
1648
|
-
recordedResponse?.responses?.length === 1 && recordedResponse.responses[0]?.
|
|
1775
|
+
recordedResponse?.responses?.length === 1 && recordedResponse.responses[0]?.answer.value === stringResponse,
|
|
1649
1776
|
'response not recorded',
|
|
1650
1777
|
'response recorded'
|
|
1651
1778
|
)
|
|
@@ -2118,6 +2245,7 @@ const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
|
2118
2245
|
meetings: meetings_tests,
|
|
2119
2246
|
notes: NO_TEST,
|
|
2120
2247
|
forms: NO_TEST,
|
|
2248
|
+
form_fields: NO_TEST,
|
|
2121
2249
|
form_responses: form_response_tests,
|
|
2122
2250
|
calendar_events: calendar_events_tests,
|
|
2123
2251
|
webhooks: NO_TEST, // tested separately,
|
|
@@ -2133,6 +2261,7 @@ const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
|
2133
2261
|
managed_content_records: NO_TEST,
|
|
2134
2262
|
post_comments: NO_TEST,
|
|
2135
2263
|
post_likes: NO_TEST,
|
|
2264
|
+
organizations: NO_TEST,
|
|
2136
2265
|
};
|
|
2137
2266
|
|
|
2138
2267
|
(async () => {
|
|
@@ -2155,9 +2284,13 @@ const tests: { [K in keyof ClientModelForName]: () => void } = {
|
|
|
2155
2284
|
await enduser_session_tests()
|
|
2156
2285
|
await role_based_access_tests()
|
|
2157
2286
|
await enduser_redaction_tests()
|
|
2158
|
-
} catch(err) {
|
|
2287
|
+
} catch(err: any) {
|
|
2159
2288
|
console.error("Failed during custom test")
|
|
2160
|
-
|
|
2289
|
+
if (err.message && err.info) {
|
|
2290
|
+
console.error(err.message, JSON.stringify(err.info, null, 2))
|
|
2291
|
+
} else {
|
|
2292
|
+
console.error(err)
|
|
2293
|
+
}
|
|
2161
2294
|
process.exit(1)
|
|
2162
2295
|
}
|
|
2163
2296
|
|