@tellescope/sdk 1.253.0 → 1.254.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 +4 -0
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/_tmp_bc_verify.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/_tmp_blank_status_verify.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/_tmp_followup_verify.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/_tmp_nonmatch_verify.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/beluga_manual_sync.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/beluga_manual_sync.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/beluga_manual_sync.test.js +256 -0
- package/lib/cjs/tests/api_tests/beluga_manual_sync.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/field_redaction.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/field_redaction.test.js +112 -99
- package/lib/cjs/tests/api_tests/field_redaction.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/gcal_sync_retry.test.d.ts +43 -0
- package/lib/cjs/tests/api_tests/gcal_sync_retry.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/gcal_sync_retry.test.js +168 -0
- package/lib/cjs/tests/api_tests/gcal_sync_retry.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/journey_error_branching.test.js +7 -2
- package/lib/cjs/tests/api_tests/journey_error_branching.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/resource_access_tags.test.d.ts +22 -0
- package/lib/cjs/tests/api_tests/resource_access_tags.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/resource_access_tags.test.js +488 -0
- package/lib/cjs/tests/api_tests/resource_access_tags.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.d.ts +23 -0
- package/lib/cjs/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.js +325 -0
- package/lib/cjs/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/time_tracks.test.d.ts +8 -0
- package/lib/cjs/tests/api_tests/time_tracks.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/time_tracks.test.js +638 -1
- package/lib/cjs/tests/api_tests/time_tracks.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/user_portal_settings.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/user_portal_settings.test.js +104 -28
- package/lib/cjs/tests/api_tests/user_portal_settings.test.js.map +1 -1
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +878 -200
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/sdk.d.ts +4 -0
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/_tmp_bc_verify.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/_tmp_bc_verify.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_bc_verify.test.js +120 -0
- package/lib/esm/tests/api_tests/_tmp_bc_verify.test.js.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.js +200 -0
- package/lib/esm/tests/api_tests/_tmp_blank_status_verify.test.js.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_followup_verify.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/_tmp_followup_verify.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_followup_verify.test.js +194 -0
- package/lib/esm/tests/api_tests/_tmp_followup_verify.test.js.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.d.ts +2 -0
- package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.js +115 -0
- package/lib/esm/tests/api_tests/_tmp_nonmatch_verify.test.js.map +1 -0
- package/lib/esm/tests/api_tests/beluga_manual_sync.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/beluga_manual_sync.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/beluga_manual_sync.test.js +252 -0
- package/lib/esm/tests/api_tests/beluga_manual_sync.test.js.map +1 -0
- package/lib/esm/tests/api_tests/field_redaction.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/field_redaction.test.js +112 -99
- package/lib/esm/tests/api_tests/field_redaction.test.js.map +1 -1
- package/lib/esm/tests/api_tests/gcal_sync_retry.test.d.ts +43 -0
- package/lib/esm/tests/api_tests/gcal_sync_retry.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/gcal_sync_retry.test.js +164 -0
- package/lib/esm/tests/api_tests/gcal_sync_retry.test.js.map +1 -0
- package/lib/esm/tests/api_tests/journey_error_branching.test.js +7 -2
- package/lib/esm/tests/api_tests/journey_error_branching.test.js.map +1 -1
- package/lib/esm/tests/api_tests/resource_access_tags.test.d.ts +22 -0
- package/lib/esm/tests/api_tests/resource_access_tags.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/resource_access_tags.test.js +484 -0
- package/lib/esm/tests/api_tests/resource_access_tags.test.js.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.d.ts +23 -0
- package/lib/esm/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.js +321 -0
- package/lib/esm/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.js.map +1 -0
- package/lib/esm/tests/api_tests/time_tracks.test.d.ts +8 -0
- package/lib/esm/tests/api_tests/time_tracks.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/time_tracks.test.js +635 -0
- package/lib/esm/tests/api_tests/time_tracks.test.js.map +1 -1
- package/lib/esm/tests/api_tests/user_portal_settings.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/user_portal_settings.test.js +104 -28
- package/lib/esm/tests/api_tests/user_portal_settings.test.js.map +1 -1
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +879 -201
- 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/beluga_manual_sync.test.ts +159 -0
- package/src/tests/api_tests/field_redaction.test.ts +13 -0
- package/src/tests/api_tests/gcal_sync_retry.test.ts +104 -0
- package/src/tests/api_tests/journey_error_branching.test.ts +5 -1
- package/src/tests/api_tests/resource_access_tags.test.ts +303 -0
- package/src/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.ts +214 -0
- package/src/tests/api_tests/time_tracks.test.ts +420 -0
- package/src/tests/api_tests/user_portal_settings.test.ts +71 -1
- package/src/tests/tests.ts +520 -11
- package/test_generated.pdf +0 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.enduser_write_restrictions_tests = void 0;
|
|
40
|
+
require('source-map-support').install();
|
|
41
|
+
var sdk_1 = require("../../../sdk");
|
|
42
|
+
var testing_1 = require("@tellescope/testing");
|
|
43
|
+
var setup_1 = require("../../setup");
|
|
44
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
45
|
+
var businessId = '60398b1131a295e64f084ff6';
|
|
46
|
+
var ENDUSER_PASSWORD = 'F0106TestPassword!123';
|
|
47
|
+
// Every endusers field marked enduserUpdatesDisabled in schema.ts, with a
|
|
48
|
+
// validator-passing sample value so the only rejection in play is the
|
|
49
|
+
// write-restriction (not input validation).
|
|
50
|
+
var restrictedEnduserUpdates = function (staffId, mongoId) {
|
|
51
|
+
var _a;
|
|
52
|
+
return ({
|
|
53
|
+
externalId: 'f0106-attacker-external-id',
|
|
54
|
+
tags: ['f0106-attacker-tag'],
|
|
55
|
+
accessTags: ['f0106-attacker-access-tag'],
|
|
56
|
+
assignedTo: [staffId],
|
|
57
|
+
customTypeId: mongoId,
|
|
58
|
+
references: [{ type: 'Vital', id: 'f0106-attacker-reference' }],
|
|
59
|
+
sharedWithOrganizations: [],
|
|
60
|
+
journeys: (_a = {}, _a[mongoId] = 'Added', _a),
|
|
61
|
+
primaryAssignee: staffId,
|
|
62
|
+
fields: { f0106AttackerField: 'true' },
|
|
63
|
+
unread: true,
|
|
64
|
+
source: 'f0106-attacker-source',
|
|
65
|
+
note: 'f0106 attacker note',
|
|
66
|
+
insurance: { memberId: 'f0106-attacker-member' },
|
|
67
|
+
insuranceSecondary: { memberId: 'f0106-attacker-member-2' },
|
|
68
|
+
diagnoses: [{ code: 'I10' }],
|
|
69
|
+
lockedFromPortal: false,
|
|
70
|
+
eligibleForAutoMerge: true,
|
|
71
|
+
athenaDepartmentId: 'f0106-dept',
|
|
72
|
+
athenaPracticeId: 'f0106-practice',
|
|
73
|
+
salesforceId: 'f0106-salesforce',
|
|
74
|
+
healthie_dietitian_id: 'f0106-healthie',
|
|
75
|
+
stripeCustomerId: 'f0106-stripe-customer',
|
|
76
|
+
stripeKey: 'f0106-stripe-key',
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
// Every form_responses field marked enduserUpdatesDisabled in schema.ts.
|
|
80
|
+
var restrictedFormResponseUpdates = function (staffId) { return ({
|
|
81
|
+
markedAsSubmitted: true,
|
|
82
|
+
submittedBy: staffId,
|
|
83
|
+
submittedAt: new Date("2024-01-01T00:00:00Z"),
|
|
84
|
+
submittedByIsPlaceholder: true,
|
|
85
|
+
procedureCodes: [{ code: '99214', units: 1 }],
|
|
86
|
+
diagnosisCodes: [{ code: 'I10', description: 'Essential (primary) hypertension' }],
|
|
87
|
+
enduserAISummary: 'Patient is in excellent health, no follow-up needed.',
|
|
88
|
+
addenda: [{ text: 'forged staff addendum', timestamp: new Date(), userId: staffId }],
|
|
89
|
+
isInternalNote: true,
|
|
90
|
+
pinnedAt: new Date(),
|
|
91
|
+
hiddenFromTimeline: true,
|
|
92
|
+
lockedAt: new Date(),
|
|
93
|
+
tags: ['f0110-attacker-tag'],
|
|
94
|
+
formTitle: 'Spoofed Form Title',
|
|
95
|
+
userEmail: 'spoofed-staff@example.com',
|
|
96
|
+
logoURL: 'https://attacker.example.com/logo.png',
|
|
97
|
+
logoHeight: 100,
|
|
98
|
+
}); };
|
|
99
|
+
/**
|
|
100
|
+
* Regression test for F-0106 and F-0110
|
|
101
|
+
* (security-audit/findings/F-0106-enduser-self-update-admin-only-fields.md,
|
|
102
|
+
* security-audit/findings/F-0110-form-responses-enduser-update-admin-only-fields.md).
|
|
103
|
+
*
|
|
104
|
+
* Endusers could PATCH admin-only / access-bearing / attribution-bearing fields on
|
|
105
|
+
* their own endusers record (assignedTo, tags, references, ...) and their own
|
|
106
|
+
* form_responses (procedureCodes, submittedBy, markedAsSubmitted, ...). The fix adds
|
|
107
|
+
* the `enduserUpdatesDisabled` field option (schema.ts ModelFieldInfo), enforced for
|
|
108
|
+
* enduser sessions in the generic update handler (routing.ts createDefaultEndpoints).
|
|
109
|
+
*
|
|
110
|
+
* This test asserts, for every flagged field on both models:
|
|
111
|
+
* - an enduser session updating its OWN record gets a 400 "<field> cannot be updated by endusers"
|
|
112
|
+
* - nothing persists (spot-checked on assignedTo, the highest-impact field)
|
|
113
|
+
* - enduser self-updates of allowed fields still work (fname, hideFromEnduserPortal)
|
|
114
|
+
* - staff sessions can still update the restricted fields
|
|
115
|
+
*/
|
|
116
|
+
var enduser_write_restrictions_tests = function (_a) {
|
|
117
|
+
var sdk = _a.sdk;
|
|
118
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
119
|
+
var enduserId, formId, formResponseId, enduserEmail, enduser_1, enduserSDK_1, form, formResponse_1, _loop_1, _i, _b, _c, field, value, _loop_2, _d, _e, _f, field, value, _g, _h, _j;
|
|
120
|
+
return __generator(this, function (_k) {
|
|
121
|
+
switch (_k.label) {
|
|
122
|
+
case 0:
|
|
123
|
+
(0, testing_1.log_header)("F-0106/F-0110: enduser write restrictions (enduserUpdatesDisabled)");
|
|
124
|
+
_k.label = 1;
|
|
125
|
+
case 1:
|
|
126
|
+
_k.trys.push([1, , 21, 34]);
|
|
127
|
+
enduserEmail = "f0106-enduser-".concat(Date.now(), "@example.com");
|
|
128
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({ email: enduserEmail, fname: 'F0106', lname: 'Restricted' })];
|
|
129
|
+
case 2:
|
|
130
|
+
enduser_1 = _k.sent();
|
|
131
|
+
enduserId = enduser_1.id;
|
|
132
|
+
return [4 /*yield*/, sdk.api.endusers.set_password({ id: enduser_1.id, password: ENDUSER_PASSWORD })];
|
|
133
|
+
case 3:
|
|
134
|
+
_k.sent();
|
|
135
|
+
enduserSDK_1 = new sdk_1.EnduserSession({ host: host, businessId: businessId });
|
|
136
|
+
return [4 /*yield*/, enduserSDK_1.authenticate(enduserEmail, ENDUSER_PASSWORD)];
|
|
137
|
+
case 4:
|
|
138
|
+
_k.sent();
|
|
139
|
+
return [4 /*yield*/, sdk.api.forms.createOne({ title: 'F-0106/F-0110 Write Restriction Test Form' })];
|
|
140
|
+
case 5:
|
|
141
|
+
form = _k.sent();
|
|
142
|
+
formId = form.id;
|
|
143
|
+
return [4 /*yield*/, sdk.api.form_responses.prepare_form_response({
|
|
144
|
+
formId: form.id,
|
|
145
|
+
enduserId: enduser_1.id,
|
|
146
|
+
})];
|
|
147
|
+
case 6:
|
|
148
|
+
formResponse_1 = (_k.sent()).response;
|
|
149
|
+
formResponseId = formResponse_1.id;
|
|
150
|
+
_loop_1 = function (field, value) {
|
|
151
|
+
return __generator(this, function (_l) {
|
|
152
|
+
switch (_l.label) {
|
|
153
|
+
case 0: return [4 /*yield*/, (0, testing_1.async_test)("F-0106: enduser cannot self-update endusers.".concat(field), function () {
|
|
154
|
+
var _a;
|
|
155
|
+
return enduserSDK_1.api.endusers.updateOne(enduser_1.id, (_a = {}, _a[field] = value, _a));
|
|
156
|
+
}, { shouldError: true, onError: function (e) { return e.message === "".concat(field, " cannot be updated by endusers"); } })];
|
|
157
|
+
case 1:
|
|
158
|
+
_l.sent();
|
|
159
|
+
return [2 /*return*/];
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
_i = 0, _b = Object.entries(restrictedEnduserUpdates(sdk.userInfo.id, enduser_1.id));
|
|
164
|
+
_k.label = 7;
|
|
165
|
+
case 7:
|
|
166
|
+
if (!(_i < _b.length)) return [3 /*break*/, 10];
|
|
167
|
+
_c = _b[_i], field = _c[0], value = _c[1];
|
|
168
|
+
return [5 /*yield**/, _loop_1(field, value)];
|
|
169
|
+
case 8:
|
|
170
|
+
_k.sent();
|
|
171
|
+
_k.label = 9;
|
|
172
|
+
case 9:
|
|
173
|
+
_i++;
|
|
174
|
+
return [3 /*break*/, 7];
|
|
175
|
+
case 10:
|
|
176
|
+
// F-0106 Variant A persistence check: the rejected assignedTo write must not
|
|
177
|
+
// have granted the staff read-filter match.
|
|
178
|
+
return [4 /*yield*/, (0, testing_1.async_test)('F-0106: rejected assignedTo write did not persist', function () { return sdk.api.endusers.getOne(enduser_1.id); }, { onResult: function (e) { var _a, _b; return !((_a = e.assignedTo) === null || _a === void 0 ? void 0 : _a.length) && !((_b = e.tags) === null || _b === void 0 ? void 0 : _b.length) && e.externalId === undefined; } })
|
|
179
|
+
// ---- F-0110: enduser self-update of restricted form_responses fields must 400 ----
|
|
180
|
+
];
|
|
181
|
+
case 11:
|
|
182
|
+
// F-0106 Variant A persistence check: the rejected assignedTo write must not
|
|
183
|
+
// have granted the staff read-filter match.
|
|
184
|
+
_k.sent();
|
|
185
|
+
_loop_2 = function (field, value) {
|
|
186
|
+
return __generator(this, function (_m) {
|
|
187
|
+
switch (_m.label) {
|
|
188
|
+
case 0: return [4 /*yield*/, (0, testing_1.async_test)("F-0110: enduser cannot self-update form_responses.".concat(field), function () {
|
|
189
|
+
var _a;
|
|
190
|
+
return enduserSDK_1.api.form_responses.updateOne(formResponse_1.id, (_a = {}, _a[field] = value, _a));
|
|
191
|
+
}, { shouldError: true, onError: function (e) { return e.message === "".concat(field, " cannot be updated by endusers"); } })];
|
|
192
|
+
case 1:
|
|
193
|
+
_m.sent();
|
|
194
|
+
return [2 /*return*/];
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
_d = 0, _e = Object.entries(restrictedFormResponseUpdates(sdk.userInfo.id));
|
|
199
|
+
_k.label = 12;
|
|
200
|
+
case 12:
|
|
201
|
+
if (!(_d < _e.length)) return [3 /*break*/, 15];
|
|
202
|
+
_f = _e[_d], field = _f[0], value = _f[1];
|
|
203
|
+
return [5 /*yield**/, _loop_2(field, value)];
|
|
204
|
+
case 13:
|
|
205
|
+
_k.sent();
|
|
206
|
+
_k.label = 14;
|
|
207
|
+
case 14:
|
|
208
|
+
_d++;
|
|
209
|
+
return [3 /*break*/, 12];
|
|
210
|
+
case 15: return [4 /*yield*/, (0, testing_1.async_test)('F-0110: rejected writes did not persist (markedAsSubmitted, procedureCodes, submittedBy)', function () { return sdk.api.form_responses.getOne(formResponse_1.id); }, { onResult: function (fr) { var _a; return !fr.markedAsSubmitted && !((_a = fr.procedureCodes) === null || _a === void 0 ? void 0 : _a.length) && fr.submittedBy === undefined; } })
|
|
211
|
+
// ---- Positive controls: intended enduser self-updates still work ----
|
|
212
|
+
];
|
|
213
|
+
case 16:
|
|
214
|
+
_k.sent();
|
|
215
|
+
// ---- Positive controls: intended enduser self-updates still work ----
|
|
216
|
+
return [4 /*yield*/, (0, testing_1.async_test)('enduser can still update own profile fields (fname/lname)', function () { return enduserSDK_1.api.endusers.updateOne(enduser_1.id, { fname: 'StillAllowed', lname: 'Patient' }); }, { onResult: function (e) { return e.fname === 'StillAllowed' && e.lname === 'Patient'; } })];
|
|
217
|
+
case 17:
|
|
218
|
+
// ---- Positive controls: intended enduser self-updates still work ----
|
|
219
|
+
_k.sent();
|
|
220
|
+
return [4 /*yield*/, (0, testing_1.async_test)('enduser can still update own form_response (hideFromEnduserPortal — intended per schema)', function () { return enduserSDK_1.api.form_responses.updateOne(formResponse_1.id, { hideFromEnduserPortal: true }); }, { onResult: function (fr) { return fr.hideFromEnduserPortal === true; } })
|
|
221
|
+
// ---- Positive controls: staff sessions are unaffected by enduserUpdatesDisabled ----
|
|
222
|
+
];
|
|
223
|
+
case 18:
|
|
224
|
+
_k.sent();
|
|
225
|
+
// ---- Positive controls: staff sessions are unaffected by enduserUpdatesDisabled ----
|
|
226
|
+
return [4 /*yield*/, (0, testing_1.async_test)('staff can still update restricted endusers fields (tags, assignedTo, externalId, note, source)', function () { return sdk.api.endusers.updateOne(enduser_1.id, {
|
|
227
|
+
tags: ['staff-set-tag'],
|
|
228
|
+
assignedTo: [sdk.userInfo.id],
|
|
229
|
+
externalId: 'staff-set-external-id',
|
|
230
|
+
note: 'staff-set note',
|
|
231
|
+
source: 'staff-set-source',
|
|
232
|
+
}); }, { onResult: function (e) {
|
|
233
|
+
var _a, _b;
|
|
234
|
+
return (!!((_a = e.tags) === null || _a === void 0 ? void 0 : _a.includes('staff-set-tag'))
|
|
235
|
+
&& !!((_b = e.assignedTo) === null || _b === void 0 ? void 0 : _b.includes(sdk.userInfo.id))
|
|
236
|
+
&& e.externalId === 'staff-set-external-id');
|
|
237
|
+
} })];
|
|
238
|
+
case 19:
|
|
239
|
+
// ---- Positive controls: staff sessions are unaffected by enduserUpdatesDisabled ----
|
|
240
|
+
_k.sent();
|
|
241
|
+
return [4 /*yield*/, (0, testing_1.async_test)('staff can still update restricted form_responses fields (procedureCodes, diagnosisCodes, tags)', function () { return sdk.api.form_responses.updateOne(formResponse_1.id, {
|
|
242
|
+
procedureCodes: [{ code: 'G0019', units: 1 }],
|
|
243
|
+
diagnosisCodes: [{ code: 'Z71.3', description: 'Dietary counseling and surveillance' }],
|
|
244
|
+
tags: ['staff-set-tag'],
|
|
245
|
+
}); }, { onResult: function (fr) {
|
|
246
|
+
var _a, _b, _c, _d, _e;
|
|
247
|
+
return (((_b = (_a = fr.procedureCodes) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.code) === 'G0019'
|
|
248
|
+
&& ((_d = (_c = fr.diagnosisCodes) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.code) === 'Z71.3'
|
|
249
|
+
&& !!((_e = fr.tags) === null || _e === void 0 ? void 0 : _e.includes('staff-set-tag')));
|
|
250
|
+
} })];
|
|
251
|
+
case 20:
|
|
252
|
+
_k.sent();
|
|
253
|
+
return [3 /*break*/, 34];
|
|
254
|
+
case 21:
|
|
255
|
+
if (!formResponseId) return [3 /*break*/, 25];
|
|
256
|
+
_k.label = 22;
|
|
257
|
+
case 22:
|
|
258
|
+
_k.trys.push([22, 24, , 25]);
|
|
259
|
+
return [4 /*yield*/, sdk.api.form_responses.deleteOne(formResponseId)];
|
|
260
|
+
case 23:
|
|
261
|
+
_k.sent();
|
|
262
|
+
return [3 /*break*/, 25];
|
|
263
|
+
case 24:
|
|
264
|
+
_g = _k.sent();
|
|
265
|
+
return [3 /*break*/, 25];
|
|
266
|
+
case 25:
|
|
267
|
+
if (!formId) return [3 /*break*/, 29];
|
|
268
|
+
_k.label = 26;
|
|
269
|
+
case 26:
|
|
270
|
+
_k.trys.push([26, 28, , 29]);
|
|
271
|
+
return [4 /*yield*/, sdk.api.forms.deleteOne(formId)];
|
|
272
|
+
case 27:
|
|
273
|
+
_k.sent();
|
|
274
|
+
return [3 /*break*/, 29];
|
|
275
|
+
case 28:
|
|
276
|
+
_h = _k.sent();
|
|
277
|
+
return [3 /*break*/, 29];
|
|
278
|
+
case 29:
|
|
279
|
+
if (!enduserId) return [3 /*break*/, 33];
|
|
280
|
+
_k.label = 30;
|
|
281
|
+
case 30:
|
|
282
|
+
_k.trys.push([30, 32, , 33]);
|
|
283
|
+
return [4 /*yield*/, sdk.api.endusers.deleteOne(enduserId)];
|
|
284
|
+
case 31:
|
|
285
|
+
_k.sent();
|
|
286
|
+
return [3 /*break*/, 33];
|
|
287
|
+
case 32:
|
|
288
|
+
_j = _k.sent();
|
|
289
|
+
return [3 /*break*/, 33];
|
|
290
|
+
case 33: return [7 /*endfinally*/];
|
|
291
|
+
case 34: return [2 /*return*/];
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
};
|
|
296
|
+
exports.enduser_write_restrictions_tests = enduser_write_restrictions_tests;
|
|
297
|
+
// Allow running this test file independently
|
|
298
|
+
if (require.main === module) {
|
|
299
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
300
|
+
var sdk_2 = new sdk_1.Session({ host: host });
|
|
301
|
+
var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
|
|
302
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
303
|
+
return __generator(this, function (_a) {
|
|
304
|
+
switch (_a.label) {
|
|
305
|
+
case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
|
|
306
|
+
case 1:
|
|
307
|
+
_a.sent();
|
|
308
|
+
return [4 /*yield*/, (0, exports.enduser_write_restrictions_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
309
|
+
case 2:
|
|
310
|
+
_a.sent();
|
|
311
|
+
return [2 /*return*/];
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
}); };
|
|
315
|
+
runTests()
|
|
316
|
+
.then(function () {
|
|
317
|
+
console.log("✅ F-0106/F-0110 enduser write-restriction test suite completed successfully");
|
|
318
|
+
process.exit(0);
|
|
319
|
+
})
|
|
320
|
+
.catch(function (error) {
|
|
321
|
+
console.error("❌ F-0106/F-0110 enduser write-restriction test suite failed:", error);
|
|
322
|
+
process.exit(1);
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=F-0106-F-0110-enduser-write-restrictions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"F-0106-F-0110-enduser-write-restrictions.test.js","sourceRoot":"","sources":["../../../../../src/tests/api_tests/security/F-0106-F-0110-enduser-write-restrictions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,4 +23,12 @@ export declare const time_tracks_edge_case_tests: ({ sdk, sdkNonAdmin }: {
|
|
|
23
23
|
sdk: Session;
|
|
24
24
|
sdkNonAdmin: Session;
|
|
25
25
|
}) => Promise<void>;
|
|
26
|
+
export declare const time_tracks_resubmit_tests: ({ sdk, sdkNonAdmin }: {
|
|
27
|
+
sdk: Session;
|
|
28
|
+
sdkNonAdmin: Session;
|
|
29
|
+
}) => Promise<void>;
|
|
30
|
+
export declare const time_tracks_appointment_duration_tests: ({ sdk, sdkNonAdmin }: {
|
|
31
|
+
sdk: Session;
|
|
32
|
+
sdkNonAdmin: Session;
|
|
33
|
+
}) => Promise<void>;
|
|
26
34
|
//# sourceMappingURL=time_tracks.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time_tracks.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/time_tracks.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkFnC,eAAO,MAAM,iBAAiB;SAAuC,OAAO;iBAAe,OAAO;mBA0JjG,CAAA;AAKD,eAAO,MAAM,4BAA4B;SAAuC,OAAO;iBAAe,OAAO;mBAoF5G,CAAA;AAKD,eAAO,MAAM,4BAA4B;SAAuC,OAAO;iBAAe,OAAO;mBAsH5G,CAAA;AAKD,eAAO,MAAM,wBAAwB;SAAuC,OAAO;iBAAe,OAAO;mBA+GxG,CAAA;AAKD,eAAO,MAAM,sBAAsB;SAAuC,OAAO;iBAAe,OAAO;mBAqGtG,CAAA;AAKD,eAAO,MAAM,2BAA2B;SAAuC,OAAO;iBAAe,OAAO;mBAsE3G,CAAA"}
|
|
1
|
+
{"version":3,"file":"time_tracks.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/time_tracks.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAkFnC,eAAO,MAAM,iBAAiB;SAAuC,OAAO;iBAAe,OAAO;mBA0JjG,CAAA;AAKD,eAAO,MAAM,4BAA4B;SAAuC,OAAO;iBAAe,OAAO;mBAoF5G,CAAA;AAKD,eAAO,MAAM,4BAA4B;SAAuC,OAAO;iBAAe,OAAO;mBAsH5G,CAAA;AAKD,eAAO,MAAM,wBAAwB;SAAuC,OAAO;iBAAe,OAAO;mBA+GxG,CAAA;AAKD,eAAO,MAAM,sBAAsB;SAAuC,OAAO;iBAAe,OAAO;mBAqGtG,CAAA;AAKD,eAAO,MAAM,2BAA2B;SAAuC,OAAO;iBAAe,OAAO;mBAsE3G,CAAA;AAKD,eAAO,MAAM,0BAA0B;SAAuC,OAAO;iBAAe,OAAO;mBA6M1G,CAAA;AAKD,eAAO,MAAM,sCAAsC;SAAuC,OAAO;iBAAe,OAAO;mBA2MtH,CAAA"}
|