@tellescope/sdk 1.251.0 → 1.252.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/tests/api_tests/calendar_canvas_coding_clear.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/calendar_canvas_coding_clear.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/calendar_canvas_coding_clear.test.js +139 -0
- package/lib/cjs/tests/api_tests/calendar_canvas_coding_clear.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/calendar_event_webhook_template.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/calendar_event_webhook_template.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/calendar_event_webhook_template.test.js +337 -0
- package/lib/cjs/tests/api_tests/calendar_event_webhook_template.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.js +287 -0
- package/lib/cjs/tests/api_tests/enduser_login_rate_limits.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/integrations_redacted.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/integrations_redacted.test.js +30 -20
- package/lib/cjs/tests/api_tests/integrations_redacted.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.js +234 -198
- package/lib/cjs/tests/api_tests/push_forms_to_portal_group_completion.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.d.ts +28 -0
- package/lib/cjs/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.js +349 -0
- package/lib/cjs/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0005-ai-conversations-rbac.test.d.ts +28 -0
- package/lib/cjs/tests/api_tests/security/F-0005-ai-conversations-rbac.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0005-ai-conversations-rbac.test.js +247 -0
- package/lib/cjs/tests/api_tests/security/F-0005-ai-conversations-rbac.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0007-invite-user-enumeration.test.d.ts +29 -0
- package/lib/cjs/tests/api_tests/security/F-0007-invite-user-enumeration.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0007-invite-user-enumeration.test.js +278 -0
- package/lib/cjs/tests/api_tests/security/F-0007-invite-user-enumeration.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.d.ts +24 -0
- package/lib/cjs/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.js +201 -0
- package/lib/cjs/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html.test.d.ts +2 -0
- package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html.test.js +148 -0
- package/lib/cjs/tests/api_tests/security/F-0013-sanitize-user-html.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0016-prototype-pollution.test.d.ts +2 -0
- package/lib/cjs/tests/api_tests/security/F-0016-prototype-pollution.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0016-prototype-pollution.test.js +88 -0
- package/lib/cjs/tests/api_tests/security/F-0016-prototype-pollution.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0053-cascade-role-rename-cross-tenant.test.d.ts +32 -0
- package/lib/cjs/tests/api_tests/security/F-0053-cascade-role-rename-cross-tenant.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0053-cascade-role-rename-cross-tenant.test.js +237 -0
- package/lib/cjs/tests/api_tests/security/F-0053-cascade-role-rename-cross-tenant.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0076-self-admin-role-assignment.test.d.ts +38 -0
- package/lib/cjs/tests/api_tests/security/F-0076-self-admin-role-assignment.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0076-self-admin-role-assignment.test.js +222 -0
- package/lib/cjs/tests/api_tests/security/F-0076-self-admin-role-assignment.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/user_portal_settings.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/user_portal_settings.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/user_portal_settings.test.js +301 -0
- package/lib/cjs/tests/api_tests/user_portal_settings.test.js.map +1 -0
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +198 -151
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/tests/api_tests/calendar_canvas_coding_clear.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/calendar_canvas_coding_clear.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/calendar_canvas_coding_clear.test.js +135 -0
- package/lib/esm/tests/api_tests/calendar_canvas_coding_clear.test.js.map +1 -0
- package/lib/esm/tests/api_tests/calendar_event_webhook_template.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/calendar_event_webhook_template.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/calendar_event_webhook_template.test.js +333 -0
- package/lib/esm/tests/api_tests/calendar_event_webhook_template.test.js.map +1 -0
- package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.js +280 -0
- package/lib/esm/tests/api_tests/enduser_login_rate_limits.test.js.map +1 -0
- package/lib/esm/tests/api_tests/integrations_redacted.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/integrations_redacted.test.js +30 -20
- package/lib/esm/tests/api_tests/integrations_redacted.test.js.map +1 -1
- package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.js +235 -199
- package/lib/esm/tests/api_tests/push_forms_to_portal_group_completion.test.js.map +1 -1
- package/lib/esm/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.d.ts +28 -0
- package/lib/esm/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.js +345 -0
- package/lib/esm/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0005-ai-conversations-rbac.test.d.ts +28 -0
- package/lib/esm/tests/api_tests/security/F-0005-ai-conversations-rbac.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0005-ai-conversations-rbac.test.js +243 -0
- package/lib/esm/tests/api_tests/security/F-0005-ai-conversations-rbac.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0007-invite-user-enumeration.test.d.ts +29 -0
- package/lib/esm/tests/api_tests/security/F-0007-invite-user-enumeration.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0007-invite-user-enumeration.test.js +271 -0
- package/lib/esm/tests/api_tests/security/F-0007-invite-user-enumeration.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.d.ts +24 -0
- package/lib/esm/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.js +194 -0
- package/lib/esm/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html.test.js +144 -0
- package/lib/esm/tests/api_tests/security/F-0013-sanitize-user-html.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0016-prototype-pollution.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/security/F-0016-prototype-pollution.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0016-prototype-pollution.test.js +84 -0
- package/lib/esm/tests/api_tests/security/F-0016-prototype-pollution.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0053-cascade-role-rename-cross-tenant.test.d.ts +32 -0
- package/lib/esm/tests/api_tests/security/F-0053-cascade-role-rename-cross-tenant.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0053-cascade-role-rename-cross-tenant.test.js +233 -0
- package/lib/esm/tests/api_tests/security/F-0053-cascade-role-rename-cross-tenant.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0076-self-admin-role-assignment.test.d.ts +38 -0
- package/lib/esm/tests/api_tests/security/F-0076-self-admin-role-assignment.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0076-self-admin-role-assignment.test.js +218 -0
- package/lib/esm/tests/api_tests/security/F-0076-self-admin-role-assignment.test.js.map +1 -0
- package/lib/esm/tests/api_tests/user_portal_settings.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/user_portal_settings.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/user_portal_settings.test.js +297 -0
- package/lib/esm/tests/api_tests/user_portal_settings.test.js.map +1 -0
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +198 -151
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/tests/api_tests/calendar_event_webhook_template.test.ts +204 -0
- package/src/tests/api_tests/enduser_login_rate_limits.test.ts +178 -0
- package/src/tests/api_tests/integrations_redacted.test.ts +8 -0
- package/src/tests/api_tests/push_forms_to_portal_group_completion.test.ts +113 -88
- package/src/tests/api_tests/security/F-0001-data-sync-redaction-bypass.test.ts +236 -0
- package/src/tests/api_tests/security/F-0005-ai-conversations-rbac.test.ts +154 -0
- package/src/tests/api_tests/security/F-0007-invite-user-enumeration.test.ts +198 -0
- package/src/tests/api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test.ts +130 -0
- package/src/tests/api_tests/security/F-0013-sanitize-user-html.test.ts +109 -0
- package/src/tests/api_tests/security/F-0016-prototype-pollution.test.ts +50 -0
- package/src/tests/api_tests/security/F-0053-cascade-role-rename-cross-tenant.test.ts +161 -0
- package/src/tests/api_tests/security/F-0076-self-admin-role-assignment.test.ts +165 -0
- package/src/tests/api_tests/user_portal_settings.test.ts +217 -0
- package/src/tests/tests.ts +25 -2
- package/test_generated.pdf +0 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
require('source-map-support').install();
|
|
2
|
+
|
|
3
|
+
import { Session, EnduserSession } from "../../sdk"
|
|
4
|
+
import {
|
|
5
|
+
assert,
|
|
6
|
+
async_test,
|
|
7
|
+
handleAnyError,
|
|
8
|
+
log_header,
|
|
9
|
+
} from "@tellescope/testing"
|
|
10
|
+
import { setup_tests } from "../setup"
|
|
11
|
+
|
|
12
|
+
const host = process.env.API_URL || 'http://localhost:8080' as const
|
|
13
|
+
const businessId = '60398b1131a295e64f084ff6'
|
|
14
|
+
|
|
15
|
+
// Main test function that can be called independently
|
|
16
|
+
export const user_portal_settings_tests = async ({ sdk, sdkNonAdmin }: { sdk: Session, sdkNonAdmin: Session }) => {
|
|
17
|
+
log_header("User portalSettings Tests")
|
|
18
|
+
|
|
19
|
+
// Operate on a throwaway user so we never mutate existing users' records.
|
|
20
|
+
const testUser = await sdk.api.users.createOne({
|
|
21
|
+
email: `portal_settings_test_${Date.now()}@test.tellescope.com`,
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
// throwaway enduser used to confirm enduser-visibility of portalSettings
|
|
25
|
+
let testEnduserId: string | undefined
|
|
26
|
+
let enduserSDK: EnduserSession | undefined
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
// ===== Valid: string values =====
|
|
30
|
+
await async_test(
|
|
31
|
+
'portalSettings - string values accepted',
|
|
32
|
+
async () => {
|
|
33
|
+
await sdk.api.users.updateOne(testUser.id, { portalSettings: { theme: 'dark' } }, { replaceObjectFields: true })
|
|
34
|
+
const updated = await sdk.api.users.getOne(testUser.id)
|
|
35
|
+
return updated.portalSettings?.theme
|
|
36
|
+
},
|
|
37
|
+
{ onResult: (r) => r === 'dark' }
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
// ===== Valid: boolean values + round-trip as real booleans =====
|
|
41
|
+
await async_test(
|
|
42
|
+
'portalSettings - boolean values accepted and round-trip as booleans',
|
|
43
|
+
async () => {
|
|
44
|
+
await sdk.api.users.updateOne(
|
|
45
|
+
testUser.id,
|
|
46
|
+
{ portalSettings: { showNameInSecureMessaging: true, showAvatar: false } },
|
|
47
|
+
{ replaceObjectFields: true }
|
|
48
|
+
)
|
|
49
|
+
const updated = await sdk.api.users.getOne(testUser.id)
|
|
50
|
+
return updated.portalSettings
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
onResult: (r) =>
|
|
54
|
+
r?.showNameInSecureMessaging === true &&
|
|
55
|
+
r?.showAvatar === false &&
|
|
56
|
+
// assert real booleans, not coerced strings
|
|
57
|
+
typeof r?.showNameInSecureMessaging === 'boolean' &&
|
|
58
|
+
typeof r?.showAvatar === 'boolean',
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
// ===== Valid: mixed string + boolean values, strings stay strings =====
|
|
63
|
+
await async_test(
|
|
64
|
+
'portalSettings - mixed string and boolean values',
|
|
65
|
+
async () => {
|
|
66
|
+
await sdk.api.users.updateOne(
|
|
67
|
+
testUser.id,
|
|
68
|
+
{ portalSettings: { theme: 'light', showAvatar: true } },
|
|
69
|
+
{ replaceObjectFields: true }
|
|
70
|
+
)
|
|
71
|
+
const updated = await sdk.api.users.getOne(testUser.id)
|
|
72
|
+
return updated.portalSettings
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
onResult: (r) =>
|
|
76
|
+
r?.theme === 'light' &&
|
|
77
|
+
typeof r?.theme === 'string' &&
|
|
78
|
+
r?.showAvatar === true &&
|
|
79
|
+
typeof r?.showAvatar === 'boolean',
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
// ===== Valid: empty object (zero-iteration loop passes) =====
|
|
84
|
+
await async_test(
|
|
85
|
+
'portalSettings - empty object accepted',
|
|
86
|
+
async () => {
|
|
87
|
+
await sdk.api.users.updateOne(testUser.id, { portalSettings: {} }, { replaceObjectFields: true })
|
|
88
|
+
const updated = await sdk.api.users.getOne(testUser.id)
|
|
89
|
+
return updated.portalSettings
|
|
90
|
+
},
|
|
91
|
+
{ onResult: (r) => !!r && typeof r === 'object' && Object.keys(r).length === 0 }
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
// ===== Invalid: value string > 250 chars =====
|
|
95
|
+
await async_test(
|
|
96
|
+
'portalSettings - value string > 250 chars rejected',
|
|
97
|
+
() => sdk.api.users.updateOne(
|
|
98
|
+
testUser.id,
|
|
99
|
+
{ portalSettings: { tooLong: 'a'.repeat(251) } },
|
|
100
|
+
{ replaceObjectFields: true }
|
|
101
|
+
),
|
|
102
|
+
handleAnyError
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
// ===== Invalid: key > 250 chars =====
|
|
106
|
+
await async_test(
|
|
107
|
+
'portalSettings - key > 250 chars rejected',
|
|
108
|
+
() => sdk.api.users.updateOne(
|
|
109
|
+
testUser.id,
|
|
110
|
+
{ portalSettings: { ['a'.repeat(251)]: 'x' } },
|
|
111
|
+
{ replaceObjectFields: true }
|
|
112
|
+
),
|
|
113
|
+
handleAnyError
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
// ===== Invalid: nested object value (disallowed type) =====
|
|
117
|
+
await async_test(
|
|
118
|
+
'portalSettings - nested object value rejected',
|
|
119
|
+
() => sdk.api.users.updateOne(
|
|
120
|
+
testUser.id,
|
|
121
|
+
{ portalSettings: { k: { nested: 1 } as any } },
|
|
122
|
+
{ replaceObjectFields: true }
|
|
123
|
+
),
|
|
124
|
+
handleAnyError
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
// ===== Invalid: array value (disallowed type) =====
|
|
128
|
+
await async_test(
|
|
129
|
+
'portalSettings - array value rejected',
|
|
130
|
+
() => sdk.api.users.updateOne(
|
|
131
|
+
testUser.id,
|
|
132
|
+
{ portalSettings: { k: [1, 2] as any } },
|
|
133
|
+
{ replaceObjectFields: true }
|
|
134
|
+
),
|
|
135
|
+
handleAnyError
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
// ===== Number value (secondary): orValidator tries boolean then string;
|
|
139
|
+
// stringValidator250's escapeString throws on non-strings, so a number is
|
|
140
|
+
// rejected by both branches => API validation error. =====
|
|
141
|
+
await async_test(
|
|
142
|
+
'portalSettings - number value rejected',
|
|
143
|
+
() => sdk.api.users.updateOne(
|
|
144
|
+
testUser.id,
|
|
145
|
+
{ portalSettings: { k: 1 as any } },
|
|
146
|
+
{ replaceObjectFields: true }
|
|
147
|
+
),
|
|
148
|
+
handleAnyError
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
// ===== Enduser visibility: portalSettings readable by endusers, un-redacted =====
|
|
152
|
+
await async_test(
|
|
153
|
+
'portalSettings - readable by enduser (un-redacted)',
|
|
154
|
+
async () => {
|
|
155
|
+
// set a known value on the throwaway user
|
|
156
|
+
await sdk.api.users.updateOne(
|
|
157
|
+
testUser.id,
|
|
158
|
+
{ portalSettings: { showNameInSecureMessaging: true, theme: 'dark' } },
|
|
159
|
+
{ replaceObjectFields: true }
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
// create + authenticate a throwaway enduser to read as a patient
|
|
163
|
+
const testEnduser = await sdk.api.endusers.createOne({
|
|
164
|
+
email: `portal_settings_enduser_${Date.now()}@test.tellescope.com`,
|
|
165
|
+
})
|
|
166
|
+
testEnduserId = testEnduser.id
|
|
167
|
+
await sdk.api.endusers.set_password({ id: testEnduser.id, password: 'TestPassword123!' })
|
|
168
|
+
|
|
169
|
+
enduserSDK = new EnduserSession({ host, businessId })
|
|
170
|
+
await enduserSDK.authenticate(testEnduser.email!, 'TestPassword123!')
|
|
171
|
+
|
|
172
|
+
const asEnduser = await enduserSDK.api.users.getOne(testUser.id)
|
|
173
|
+
return asEnduser.portalSettings
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
onResult: (r) =>
|
|
177
|
+
// field is present and un-redacted for endusers
|
|
178
|
+
r?.showNameInSecureMessaging === true && r?.theme === 'dark',
|
|
179
|
+
}
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
console.log("✅ All User portalSettings tests passed!")
|
|
183
|
+
} finally {
|
|
184
|
+
try {
|
|
185
|
+
if (enduserSDK) {
|
|
186
|
+
await enduserSDK.api.endusers.logout().catch(() => {})
|
|
187
|
+
}
|
|
188
|
+
if (testEnduserId) {
|
|
189
|
+
await sdk.api.endusers.deleteOne(testEnduserId)
|
|
190
|
+
}
|
|
191
|
+
} finally {
|
|
192
|
+
await sdk.api.users.deleteOne(testUser.id)
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Allow running this test file independently
|
|
198
|
+
if (require.main === module) {
|
|
199
|
+
console.log(`🌐 Using API URL: ${host}`)
|
|
200
|
+
const sdk = new Session({ host })
|
|
201
|
+
const sdkNonAdmin = new Session({ host })
|
|
202
|
+
|
|
203
|
+
const runTests = async () => {
|
|
204
|
+
await setup_tests(sdk, sdkNonAdmin)
|
|
205
|
+
await user_portal_settings_tests({ sdk, sdkNonAdmin })
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
runTests()
|
|
209
|
+
.then(() => {
|
|
210
|
+
console.log("✅ User portalSettings test suite completed successfully")
|
|
211
|
+
process.exit(0)
|
|
212
|
+
})
|
|
213
|
+
.catch((error) => {
|
|
214
|
+
console.error("❌ User portalSettings test suite failed:", error)
|
|
215
|
+
process.exit(1)
|
|
216
|
+
})
|
|
217
|
+
}
|
package/src/tests/tests.ts
CHANGED
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
|
|
37
37
|
import { Session, APIQuery, EnduserSession } from "../sdk"
|
|
38
38
|
import { enduser_observations_acknowledge_tests } from "./api_tests/enduser_observations_acknowledge.test"
|
|
39
|
+
import { user_portal_settings_tests } from "./api_tests/user_portal_settings.test"
|
|
39
40
|
import { integrations_redacted_tests } from "./api_tests/integrations_redacted.test"
|
|
40
41
|
import { get_some_projection_tests } from "./api_tests/get_some_projection.test"
|
|
41
42
|
import { mdb_sort_tests } from "./api_tests/mdb_sort.test"
|
|
@@ -76,6 +77,7 @@ import {
|
|
|
76
77
|
import fs from "fs"
|
|
77
78
|
import { load_inbox_data_tests } from "./api_tests/load_inbox_data.test";
|
|
78
79
|
import { enduser_login_tests } from "./api_tests/enduser_login.test";
|
|
80
|
+
import { enduser_login_rate_limits_tests } from "./api_tests/enduser_login_rate_limits.test";
|
|
79
81
|
import { eom_procedure_codes_tests } from "./api_tests/eom_procedure_codes.test";
|
|
80
82
|
import { cross_org_api_key_tests } from "./api_tests/cross_org_api_key.test";
|
|
81
83
|
import { custom_dashboards_tests } from "./api_tests/custom_dashboards.test";
|
|
@@ -88,6 +90,14 @@ import { custom_aggregation_tests } from "./api_tests/custom_aggregation.test";
|
|
|
88
90
|
import { chats_analytics_tests } from "./api_tests/chats_analytics.test";
|
|
89
91
|
import { no_access_permission_checks_tests } from "./api_tests/no_access_permission_checks.test";
|
|
90
92
|
import { field_redaction_tests } from "./api_tests/field_redaction.test";
|
|
93
|
+
import { data_sync_redaction_bypass_tests } from "./api_tests/security/F-0001-data-sync-redaction-bypass.test";
|
|
94
|
+
import { ai_conversations_rbac_tests } from "./api_tests/security/F-0005-ai-conversations-rbac.test";
|
|
95
|
+
import { cascade_role_rename_cross_tenant_tests } from "./api_tests/security/F-0053-cascade-role-rename-cross-tenant.test";
|
|
96
|
+
import { self_admin_role_assignment_tests } from "./api_tests/security/F-0076-self-admin-role-assignment.test";
|
|
97
|
+
import { invite_user_enumeration_tests } from "./api_tests/security/F-0007-invite-user-enumeration.test";
|
|
98
|
+
import { handle_incoming_communication_cross_tenant_tests } from "./api_tests/security/F-0008-handle-incoming-communication-cross-tenant.test";
|
|
99
|
+
import { sanitize_user_html_xss_tests } from "./api_tests/security/F-0013-sanitize-user-html.test";
|
|
100
|
+
import { prototype_pollution_tests } from "./api_tests/security/F-0016-prototype-pollution.test";
|
|
91
101
|
import { bulk_assignment_tests } from "./api_tests/bulk_assignment.test";
|
|
92
102
|
import { managed_content_enduser_access_tests } from "./api_tests/managed_content_enduser_access.test";
|
|
93
103
|
import { managed_content_file_access_tests } from "./api_tests/managed_content_file_access.test";
|
|
@@ -109,6 +119,7 @@ import { set_fields_order_templates_tests } from "./api_tests/set_fields_order_t
|
|
|
109
119
|
import { date_string_validation_tests } from "./api_tests/date_string_validation.test";
|
|
110
120
|
import { enduser_session_invalidation_tests } from "./api_tests/enduser_session_invalidation.test";
|
|
111
121
|
import { enduser_cross_access_isolation_tests } from "./api_tests/enduser_cross_access_isolation.test";
|
|
122
|
+
import { calendar_event_webhook_template_tests } from "./api_tests/calendar_event_webhook_template.test";
|
|
112
123
|
|
|
113
124
|
const UniquenessViolationMessage = 'Uniqueness Violation'
|
|
114
125
|
|
|
@@ -5092,6 +5103,7 @@ const trigger_events_api_tests = async () => {
|
|
|
5092
5103
|
const automation_trigger_tests = async () => {
|
|
5093
5104
|
log_header("Automation Trigger Tests")
|
|
5094
5105
|
|
|
5106
|
+
await push_forms_to_portal_group_completion_tests({ sdk, sdkNonAdmin })
|
|
5095
5107
|
await order_status_equals_tests()
|
|
5096
5108
|
await set_fields_order_templates_tests({ sdk, sdkNonAdmin })
|
|
5097
5109
|
await medication_added_trigger_tests({ sdk, sdkNonAdmin })
|
|
@@ -5102,7 +5114,6 @@ const automation_trigger_tests = async () => {
|
|
|
5102
5114
|
await form_response_set_fields_trigger_tests()
|
|
5103
5115
|
await form_response_set_fields_journey_tests()
|
|
5104
5116
|
await appointment_completed_trigger_tests({ sdk, sdkNonAdmin })
|
|
5105
|
-
await push_forms_to_portal_group_completion_tests({ sdk, sdkNonAdmin })
|
|
5106
5117
|
await trigger_events_api_tests()
|
|
5107
5118
|
await fields_changed_tests()
|
|
5108
5119
|
await field_equals_trigger_tests()
|
|
@@ -14321,10 +14332,21 @@ const ip_address_form_tests = async () => {
|
|
|
14321
14332
|
await replace_form_field_template_values_tests()
|
|
14322
14333
|
await mfa_tests()
|
|
14323
14334
|
await setup_tests(sdk, sdkNonAdmin)
|
|
14335
|
+
await invite_user_enumeration_tests({ sdk, sdkNonAdmin })
|
|
14336
|
+
await handle_incoming_communication_cross_tenant_tests({ sdk, sdkNonAdmin })
|
|
14337
|
+
await calendar_event_webhook_template_tests({ sdk, sdkNonAdmin })
|
|
14338
|
+
await outbound_chat_sent_trigger_tests({ sdk })
|
|
14339
|
+
await enduser_login_rate_limits_tests({ sdk, sdkNonAdmin })
|
|
14340
|
+
await data_sync_redaction_bypass_tests({ sdk, sdkNonAdmin })
|
|
14341
|
+
await ai_conversations_rbac_tests({ sdk, sdkNonAdmin })
|
|
14342
|
+
await cascade_role_rename_cross_tenant_tests({ sdk, sdkNonAdmin })
|
|
14343
|
+
await self_admin_role_assignment_tests({ sdk, sdkNonAdmin })
|
|
14344
|
+
await sanitize_user_html_xss_tests()
|
|
14345
|
+
await prototype_pollution_tests()
|
|
14346
|
+
await automation_trigger_tests()
|
|
14324
14347
|
await account_switcher_tests({ sdk, sdkNonAdmin })
|
|
14325
14348
|
await enduser_login_tests({ sdk, sdkNonAdmin })
|
|
14326
14349
|
await outbound_chat_sent_trigger_tests({ sdk })
|
|
14327
|
-
await automation_trigger_tests()
|
|
14328
14350
|
await enduser_cross_access_isolation_tests({ sdk, sdkNonAdmin })
|
|
14329
14351
|
await eom_procedure_codes_tests({ sdk, sdkNonAdmin })
|
|
14330
14352
|
await cross_org_api_key_tests({ sdk, sdkNonAdmin })
|
|
@@ -14376,6 +14398,7 @@ const ip_address_form_tests = async () => {
|
|
|
14376
14398
|
await inbox_threads_loading_tests()
|
|
14377
14399
|
await load_inbox_data_tests({ sdk, sdkNonAdmin })
|
|
14378
14400
|
await enduser_observations_acknowledge_tests({ sdk, sdkNonAdmin })
|
|
14401
|
+
await user_portal_settings_tests({ sdk, sdkNonAdmin })
|
|
14379
14402
|
await create_user_notifications_trigger_tests({ sdk })
|
|
14380
14403
|
await group_mms_active_tests()
|
|
14381
14404
|
await auto_reply_tests()
|
package/test_generated.pdf
CHANGED
|
Binary file
|