@tellescope/sdk 1.256.2 → 1.256.4
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/metriport_push_form_response.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/metriport_push_form_response.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/metriport_push_form_response.test.js +298 -0
- package/lib/cjs/tests/api_tests/metriport_push_form_response.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/phone_calls_move_enduser.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/phone_calls_move_enduser.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/phone_calls_move_enduser.test.js +274 -0
- package/lib/cjs/tests/api_tests/phone_calls_move_enduser.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.d.ts +18 -0
- package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js +964 -0
- package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/welle_partner_token.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/welle_partner_token.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/welle_partner_token.test.js +313 -0
- package/lib/cjs/tests/api_tests/welle_partner_token.test.js.map +1 -0
- package/lib/cjs/tests/stripe_webhook_helpers.d.ts +204 -0
- package/lib/cjs/tests/stripe_webhook_helpers.d.ts.map +1 -0
- package/lib/cjs/tests/stripe_webhook_helpers.js +286 -0
- package/lib/cjs/tests/stripe_webhook_helpers.js.map +1 -0
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +192 -180
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/cjs/tests/unit_tests/translation.test.d.ts +3 -0
- package/lib/cjs/tests/unit_tests/translation.test.d.ts.map +1 -0
- package/lib/cjs/tests/unit_tests/translation.test.js.map +1 -0
- package/lib/esm/enduser.d.ts +1 -0
- package/lib/esm/enduser.d.ts.map +1 -1
- package/lib/esm/sdk.d.ts +3 -2
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/session.d.ts +1 -0
- package/lib/esm/session.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/metriport_push_form_response.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/metriport_push_form_response.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/metriport_push_form_response.test.js +294 -0
- package/lib/esm/tests/api_tests/metriport_push_form_response.test.js.map +1 -0
- package/lib/esm/tests/api_tests/phone_calls_move_enduser.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/phone_calls_move_enduser.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/phone_calls_move_enduser.test.js +270 -0
- package/lib/esm/tests/api_tests/phone_calls_move_enduser.test.js.map +1 -0
- package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.d.ts +18 -0
- package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js +960 -0
- package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -0
- package/lib/esm/tests/api_tests/welle_partner_token.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/welle_partner_token.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/welle_partner_token.test.js +309 -0
- package/lib/esm/tests/api_tests/welle_partner_token.test.js.map +1 -0
- package/lib/esm/tests/stripe_webhook_helpers.d.ts +204 -0
- package/lib/esm/tests/stripe_webhook_helpers.d.ts.map +1 -0
- package/lib/esm/tests/stripe_webhook_helpers.js +267 -0
- package/lib/esm/tests/stripe_webhook_helpers.js.map +1 -0
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +192 -180
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/esm/tests/unit_tests/translation.test.d.ts +3 -0
- package/lib/esm/tests/unit_tests/translation.test.d.ts.map +1 -0
- package/lib/esm/tests/unit_tests/translation.test.js +52 -0
- package/lib/esm/tests/unit_tests/translation.test.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/tests/api_tests/metriport_push_form_response.test.ts +226 -0
- package/src/tests/api_tests/stripe_webhook_triggers.test.ts +676 -0
- package/src/tests/api_tests/welle_partner_token.test.ts +249 -0
- package/src/tests/stripe_webhook_helpers.ts +240 -0
- package/src/tests/tests.ts +6 -0
- package/test_generated.pdf +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metriport_push_form_response.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/metriport_push_form_response.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAgBnC,eAAO,MAAM,kCAAkC;SAAuC,OAAO;iBAAe,OAAO;mBA0LlH,CAAA"}
|
|
@@ -0,0 +1,298 @@
|
|
|
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.metriport_push_form_response_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 constants_1 = require("@tellescope/constants");
|
|
45
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
46
|
+
// metriportPushFormResponse journey action (CU-86e2cucba).
|
|
47
|
+
//
|
|
48
|
+
// Fast / no-upload: this exercises validation and the guard branches that reject before any
|
|
49
|
+
// Metriport HTTP call. A real upload needs a Metriport sandbox API key plus a patient already
|
|
50
|
+
// synced to a facility, so the happy path is verified manually (see the task plan).
|
|
51
|
+
var metriport_push_form_response_tests = function (_a) {
|
|
52
|
+
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
53
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
54
|
+
var enduserId, otherEnduserId, formId, journeyId, createdIntegrationId, journey_1, form_1, field, enduser_1, step_1, contextOnlyStep, _b, accessCode, response, formResponseId_1, processStep, metriportIntegrationExists, existing, _c, noIntegrationResult, created, unsyncedResult, otherEnduser, crossPatientAction, crossPatientResult, untouched, stamped, idempotentResult;
|
|
55
|
+
var _d, _e;
|
|
56
|
+
return __generator(this, function (_f) {
|
|
57
|
+
switch (_f.label) {
|
|
58
|
+
case 0:
|
|
59
|
+
(0, testing_1.log_header)("Metriport Push Form Response Tests");
|
|
60
|
+
_f.label = 1;
|
|
61
|
+
case 1:
|
|
62
|
+
_f.trys.push([1, , 28, 39]);
|
|
63
|
+
return [4 /*yield*/, sdk.api.journeys.createOne({ title: 'Metriport Push Form Response Journey' })];
|
|
64
|
+
case 2:
|
|
65
|
+
journey_1 = _f.sent();
|
|
66
|
+
journeyId = journey_1.id;
|
|
67
|
+
return [4 /*yield*/, sdk.api.forms.createOne({ title: 'Metriport Push Form Response Form' })];
|
|
68
|
+
case 3:
|
|
69
|
+
form_1 = _f.sent();
|
|
70
|
+
formId = form_1.id;
|
|
71
|
+
return [4 /*yield*/, sdk.api.form_fields.createOne({
|
|
72
|
+
formId: form_1.id, type: 'string', title: 'Chief Complaint', previousFields: [{ type: 'root', info: {} }],
|
|
73
|
+
})];
|
|
74
|
+
case 4:
|
|
75
|
+
field = _f.sent();
|
|
76
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
77
|
+
fname: 'metriport-push',
|
|
78
|
+
lname: 'test',
|
|
79
|
+
email: "metriport_push_".concat(Date.now(), "@test.tellescope.com"),
|
|
80
|
+
})];
|
|
81
|
+
case 5:
|
|
82
|
+
enduser_1 = _f.sent();
|
|
83
|
+
enduserId = enduser_1.id;
|
|
84
|
+
return [4 /*yield*/, sdk.api.automation_steps.createOne({
|
|
85
|
+
journeyId: journey_1.id,
|
|
86
|
+
events: [{ type: 'onJourneyStart', info: {} }],
|
|
87
|
+
action: { type: 'metriportPushFormResponse', info: { formId: form_1.id, integrationTitle: '' } },
|
|
88
|
+
})];
|
|
89
|
+
case 6:
|
|
90
|
+
step_1 = _f.sent();
|
|
91
|
+
(0, testing_1.assert)(step_1.action.type === 'metriportPushFormResponse' && step_1.action.info.formId === form_1.id, 'metriportPushFormResponse step round-trip failed', 'metriportPushFormResponse step round-trips');
|
|
92
|
+
return [4 /*yield*/, sdk.api.automation_steps.createOne({
|
|
93
|
+
journeyId: journey_1.id,
|
|
94
|
+
events: [{ type: 'onJourneyStart', info: {} }],
|
|
95
|
+
action: { type: 'metriportPushFormResponse', info: {} },
|
|
96
|
+
})];
|
|
97
|
+
case 7:
|
|
98
|
+
contextOnlyStep = _f.sent();
|
|
99
|
+
(0, testing_1.assert)(contextOnlyStep.action.type === 'metriportPushFormResponse', 'metriportPushFormResponse step without info was rejected', 'metriportPushFormResponse info is optional');
|
|
100
|
+
return [4 /*yield*/, (0, testing_1.async_test)('metriportPushFormResponse with a malformed formId is rejected', function () { return sdk.api.automation_steps.createOne({
|
|
101
|
+
journeyId: journey_1.id,
|
|
102
|
+
events: [{ type: 'onJourneyStart', info: {} }],
|
|
103
|
+
action: { type: 'metriportPushFormResponse', info: { formId: 'not-a-mongo-id' } },
|
|
104
|
+
}); }, { shouldError: true, onError: function () { return true; } })
|
|
105
|
+
/*************** runtime ***************/
|
|
106
|
+
];
|
|
107
|
+
case 8:
|
|
108
|
+
_f.sent();
|
|
109
|
+
return [4 /*yield*/, sdk.api.form_responses.prepare_form_response({
|
|
110
|
+
enduserId: enduser_1.id, formId: form_1.id,
|
|
111
|
+
})];
|
|
112
|
+
case 9:
|
|
113
|
+
_b = _f.sent(), accessCode = _b.accessCode, response = _b.response;
|
|
114
|
+
return [4 /*yield*/, sdk.api.form_responses.submit_form_response({
|
|
115
|
+
accessCode: accessCode,
|
|
116
|
+
responses: [{ fieldId: field.id, fieldTitle: 'Chief Complaint', answer: { type: 'string', value: 'Headache' } }],
|
|
117
|
+
})];
|
|
118
|
+
case 10:
|
|
119
|
+
_f.sent();
|
|
120
|
+
formResponseId_1 = response.id;
|
|
121
|
+
processStep = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
122
|
+
var automatedAction;
|
|
123
|
+
return __generator(this, function (_a) {
|
|
124
|
+
switch (_a.label) {
|
|
125
|
+
case 0: return [4 /*yield*/, sdk.api.automated_actions.createOne({
|
|
126
|
+
enduserId: enduser_1.id,
|
|
127
|
+
journeyId: journey_1.id,
|
|
128
|
+
automationStepId: step_1.id,
|
|
129
|
+
event: { type: 'onJourneyStart', info: {} },
|
|
130
|
+
action: { type: 'metriportPushFormResponse', info: { formId: form_1.id } },
|
|
131
|
+
journeyContext: { formResponseId: formResponseId_1 },
|
|
132
|
+
status: 'active',
|
|
133
|
+
processAfter: Date.now(),
|
|
134
|
+
})];
|
|
135
|
+
case 1:
|
|
136
|
+
automatedAction = _a.sent();
|
|
137
|
+
return [2 /*return*/, sdk.api.automated_actions.process({ automatedActionId: automatedAction.id })];
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}); };
|
|
141
|
+
metriportIntegrationExists = false;
|
|
142
|
+
_f.label = 11;
|
|
143
|
+
case 11:
|
|
144
|
+
_f.trys.push([11, 13, , 14]);
|
|
145
|
+
return [4 /*yield*/, sdk.api.integrations.load_redacted({})];
|
|
146
|
+
case 12:
|
|
147
|
+
existing = _f.sent();
|
|
148
|
+
metriportIntegrationExists = !!existing.integrations.find(function (i) { return i.title === constants_1.METRIPORT_TITLE; });
|
|
149
|
+
return [3 /*break*/, 14];
|
|
150
|
+
case 13:
|
|
151
|
+
_c = _f.sent();
|
|
152
|
+
return [3 /*break*/, 14];
|
|
153
|
+
case 14:
|
|
154
|
+
if (!!metriportIntegrationExists) return [3 /*break*/, 17];
|
|
155
|
+
return [4 /*yield*/, processStep()];
|
|
156
|
+
case 15:
|
|
157
|
+
noIntegrationResult = _f.sent();
|
|
158
|
+
(0, testing_1.assert)(!noIntegrationResult.success
|
|
159
|
+
&& !noIntegrationResult.unimplemented
|
|
160
|
+
&& noIntegrationResult.error === 'Metriport integration not found', "expected 'Metriport integration not found', got: ".concat(JSON.stringify(noIntegrationResult)), 'metriportPushFormResponse is wired into automated_actions.process (no integration)');
|
|
161
|
+
return [4 /*yield*/, sdk.api.integrations.createOne({
|
|
162
|
+
title: constants_1.METRIPORT_TITLE,
|
|
163
|
+
authentication: {
|
|
164
|
+
type: 'apiKey',
|
|
165
|
+
info: { access_token: 'test-metriport-api-key', refresh_token: 'unused', scope: '', token_type: 'Bearer', expiry_date: new Date().getTime() },
|
|
166
|
+
},
|
|
167
|
+
})];
|
|
168
|
+
case 16:
|
|
169
|
+
created = _f.sent();
|
|
170
|
+
createdIntegrationId = created.id;
|
|
171
|
+
_f.label = 17;
|
|
172
|
+
case 17: return [4 /*yield*/, processStep()];
|
|
173
|
+
case 18:
|
|
174
|
+
unsyncedResult = _f.sent();
|
|
175
|
+
(0, testing_1.assert)(!unsyncedResult.success
|
|
176
|
+
&& !unsyncedResult.unimplemented
|
|
177
|
+
&& /not synced to Metriport/i.test(unsyncedResult.error || ''), "expected a 'Patient is not synced to Metriport' error, got: ".concat(JSON.stringify(unsyncedResult)), 'metriportPushFormResponse rejects a patient not synced to Metriport');
|
|
178
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
179
|
+
fname: 'metriport-push-other',
|
|
180
|
+
lname: 'test',
|
|
181
|
+
email: "metriport_push_other_".concat(Date.now(), "@test.tellescope.com"),
|
|
182
|
+
})];
|
|
183
|
+
case 19:
|
|
184
|
+
otherEnduser = _f.sent();
|
|
185
|
+
otherEnduserId = otherEnduser.id;
|
|
186
|
+
return [4 /*yield*/, sdk.api.automated_actions.createOne({
|
|
187
|
+
enduserId: otherEnduser.id,
|
|
188
|
+
journeyId: journey_1.id,
|
|
189
|
+
automationStepId: step_1.id,
|
|
190
|
+
event: { type: 'onJourneyStart', info: {} },
|
|
191
|
+
action: { type: 'metriportPushFormResponse', info: { formId: form_1.id } },
|
|
192
|
+
journeyContext: { formResponseId: formResponseId_1 },
|
|
193
|
+
status: 'active',
|
|
194
|
+
processAfter: Date.now(),
|
|
195
|
+
})];
|
|
196
|
+
case 20:
|
|
197
|
+
crossPatientAction = _f.sent();
|
|
198
|
+
return [4 /*yield*/, sdk.api.automated_actions.process({ automatedActionId: crossPatientAction.id })];
|
|
199
|
+
case 21:
|
|
200
|
+
crossPatientResult = _f.sent();
|
|
201
|
+
(0, testing_1.assert)(!crossPatientResult.success
|
|
202
|
+
&& !crossPatientResult.unimplemented
|
|
203
|
+
&& crossPatientResult.error === 'Form response does not belong to this patient', "expected a cross-patient ownership rejection, got: ".concat(JSON.stringify(crossPatientResult)), 'metriportPushFormResponse rejects a form response owned by a different patient');
|
|
204
|
+
return [4 /*yield*/, sdk.api.form_responses.getOne(formResponseId_1)];
|
|
205
|
+
case 22:
|
|
206
|
+
untouched = _f.sent();
|
|
207
|
+
(0, testing_1.assert)(!((_d = untouched.references) === null || _d === void 0 ? void 0 : _d.find(function (r) { return r.type === constants_1.METRIPORT_TITLE; })), "patient A's form response was stamped despite a cross-patient rejection: ".concat(JSON.stringify(untouched.references)), 'metriportPushFormResponse does not stamp a form response on cross-patient rejection');
|
|
208
|
+
/*************** idempotency ***************/
|
|
209
|
+
// form_responses.references is a readonly field, so it can only be stamped server-side (which
|
|
210
|
+
// is what a successful upload does). Attempt the stamp; if the API drops it, skip the check
|
|
211
|
+
// rather than assert on a state we couldn't set up.
|
|
212
|
+
return [4 /*yield*/, sdk.api.form_responses.updateOne(formResponseId_1, {
|
|
213
|
+
references: [{ type: constants_1.METRIPORT_TITLE, id: 'test-document-reference-id' }],
|
|
214
|
+
}).catch(function () { })];
|
|
215
|
+
case 23:
|
|
216
|
+
/*************** idempotency ***************/
|
|
217
|
+
// form_responses.references is a readonly field, so it can only be stamped server-side (which
|
|
218
|
+
// is what a successful upload does). Attempt the stamp; if the API drops it, skip the check
|
|
219
|
+
// rather than assert on a state we couldn't set up.
|
|
220
|
+
_f.sent();
|
|
221
|
+
return [4 /*yield*/, sdk.api.form_responses.getOne(formResponseId_1)];
|
|
222
|
+
case 24:
|
|
223
|
+
stamped = _f.sent();
|
|
224
|
+
if (!((_e = stamped.references) === null || _e === void 0 ? void 0 : _e.find(function (r) { return r.type === constants_1.METRIPORT_TITLE; }))) return [3 /*break*/, 26];
|
|
225
|
+
return [4 /*yield*/, processStep()];
|
|
226
|
+
case 25:
|
|
227
|
+
idempotentResult = _f.sent();
|
|
228
|
+
(0, testing_1.assert)(idempotentResult.success === true, "expected a no-op success for an already-shared form response, got: ".concat(JSON.stringify(idempotentResult)), 'metriportPushFormResponse no-ops for an already-shared form response');
|
|
229
|
+
return [3 /*break*/, 27];
|
|
230
|
+
case 26:
|
|
231
|
+
console.log("⏭️ Skipping idempotency check (form_responses.references is readonly over the API)");
|
|
232
|
+
_f.label = 27;
|
|
233
|
+
case 27: return [3 /*break*/, 39];
|
|
234
|
+
case 28:
|
|
235
|
+
if (!createdIntegrationId) return [3 /*break*/, 30];
|
|
236
|
+
return [4 /*yield*/, sdk.api.integrations.deleteOne(createdIntegrationId).catch(console.error)];
|
|
237
|
+
case 29:
|
|
238
|
+
_f.sent();
|
|
239
|
+
_f.label = 30;
|
|
240
|
+
case 30:
|
|
241
|
+
if (!journeyId) return [3 /*break*/, 32];
|
|
242
|
+
return [4 /*yield*/, sdk.api.journeys.deleteOne(journeyId).catch(console.error)];
|
|
243
|
+
case 31:
|
|
244
|
+
_f.sent();
|
|
245
|
+
_f.label = 32;
|
|
246
|
+
case 32:
|
|
247
|
+
if (!formId) return [3 /*break*/, 34];
|
|
248
|
+
return [4 /*yield*/, sdk.api.forms.deleteOne(formId).catch(console.error)];
|
|
249
|
+
case 33:
|
|
250
|
+
_f.sent();
|
|
251
|
+
_f.label = 34;
|
|
252
|
+
case 34:
|
|
253
|
+
if (!enduserId) return [3 /*break*/, 36];
|
|
254
|
+
return [4 /*yield*/, sdk.api.endusers.deleteOne(enduserId).catch(console.error)];
|
|
255
|
+
case 35:
|
|
256
|
+
_f.sent();
|
|
257
|
+
_f.label = 36;
|
|
258
|
+
case 36:
|
|
259
|
+
if (!otherEnduserId) return [3 /*break*/, 38];
|
|
260
|
+
return [4 /*yield*/, sdk.api.endusers.deleteOne(otherEnduserId).catch(console.error)];
|
|
261
|
+
case 37:
|
|
262
|
+
_f.sent();
|
|
263
|
+
_f.label = 38;
|
|
264
|
+
case 38: return [7 /*endfinally*/];
|
|
265
|
+
case 39: return [2 /*return*/];
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
};
|
|
270
|
+
exports.metriport_push_form_response_tests = metriport_push_form_response_tests;
|
|
271
|
+
if (require.main === module) {
|
|
272
|
+
console.log("Using API URL: ".concat(host));
|
|
273
|
+
var sdk_2 = new sdk_1.Session({ host: host });
|
|
274
|
+
var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
|
|
275
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
276
|
+
return __generator(this, function (_a) {
|
|
277
|
+
switch (_a.label) {
|
|
278
|
+
case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
|
|
279
|
+
case 1:
|
|
280
|
+
_a.sent();
|
|
281
|
+
return [4 /*yield*/, (0, exports.metriport_push_form_response_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
282
|
+
case 2:
|
|
283
|
+
_a.sent();
|
|
284
|
+
return [2 /*return*/];
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}); };
|
|
288
|
+
runTests()
|
|
289
|
+
.then(function () {
|
|
290
|
+
console.log("✅ Metriport push form response test suite completed successfully");
|
|
291
|
+
process.exit(0);
|
|
292
|
+
})
|
|
293
|
+
.catch(function (error) {
|
|
294
|
+
console.error("❌ Metriport push form response test suite failed:", error);
|
|
295
|
+
process.exit(1);
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=metriport_push_form_response.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metriport_push_form_response.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/metriport_push_form_response.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone_calls_move_enduser.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/phone_calls_move_enduser.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoBnC,eAAO,MAAM,8BAA8B;SAAwC,OAAO;iBAAe,OAAO;mBAiL/G,CAAA"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
24
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
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;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
50
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
51
|
+
if (ar || !(i in from)) {
|
|
52
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
53
|
+
ar[i] = from[i];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
57
|
+
};
|
|
58
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
59
|
+
exports.phone_calls_move_enduser_tests = void 0;
|
|
60
|
+
require('source-map-support').install();
|
|
61
|
+
var sdk_1 = require("../../sdk");
|
|
62
|
+
var testing_1 = require("@tellescope/testing");
|
|
63
|
+
var constants_1 = require("@tellescope/constants");
|
|
64
|
+
var setup_1 = require("../setup");
|
|
65
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
66
|
+
var NONEXISTENT_MONGO_ID = '60398b1131a295e64f084fff';
|
|
67
|
+
var RAND = function () { return Math.random().toString(36).slice(2, 10); };
|
|
68
|
+
// Backs the mid-call "Move to Different Profile" flow in the call window
|
|
69
|
+
// (packages/private/webapp/src/pages/EnduserProfile/PhoneCalling.tsx). The move itself is a plain
|
|
70
|
+
// update of PhoneCall.enduserId, so these tests pin the lookups the UI performs and the guards that
|
|
71
|
+
// keep the update safe.
|
|
72
|
+
var phone_calls_move_enduser_tests = function (_a) {
|
|
73
|
+
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
74
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
75
|
+
var SHARED_PHONE, createdEnduserIds, createdUserIds, createdRoleIds, matchedByPhone_1, matchedByLandline_1, matchedByAlternate_1, externalId_1, call_1, moved, role, rbap, noUpdateUser, _b, authToken, sessionUser, sdkNoUpdate_1, newerCall, _c, cancelledById, untouched, _d;
|
|
76
|
+
return __generator(this, function (_e) {
|
|
77
|
+
switch (_e.label) {
|
|
78
|
+
case 0:
|
|
79
|
+
(0, testing_1.log_header)("Phone Calls Move Enduser Tests");
|
|
80
|
+
SHARED_PHONE = '+15555550117';
|
|
81
|
+
createdEnduserIds = [];
|
|
82
|
+
createdUserIds = [];
|
|
83
|
+
createdRoleIds = [];
|
|
84
|
+
_e.label = 1;
|
|
85
|
+
case 1:
|
|
86
|
+
_e.trys.push([1, , 22, 24]);
|
|
87
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
88
|
+
fname: 'Move', lname: 'ByPhone', phone: SHARED_PHONE,
|
|
89
|
+
})];
|
|
90
|
+
case 2:
|
|
91
|
+
matchedByPhone_1 = _e.sent();
|
|
92
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
93
|
+
fname: 'Move', lname: 'ByLandline', landline: SHARED_PHONE,
|
|
94
|
+
})];
|
|
95
|
+
case 3:
|
|
96
|
+
matchedByLandline_1 = _e.sent();
|
|
97
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
98
|
+
fname: 'Move', lname: 'ByAlternate', alternatePhones: [SHARED_PHONE],
|
|
99
|
+
})];
|
|
100
|
+
case 4:
|
|
101
|
+
matchedByAlternate_1 = _e.sent();
|
|
102
|
+
createdEnduserIds.push(matchedByPhone_1.id, matchedByLandline_1.id, matchedByAlternate_1.id);
|
|
103
|
+
externalId_1 = "CAmoveenduser".concat(RAND()).concat(RAND());
|
|
104
|
+
return [4 /*yield*/, sdk.api.phone_calls.createOne({
|
|
105
|
+
enduserId: matchedByPhone_1.id,
|
|
106
|
+
inbound: true,
|
|
107
|
+
externalId: externalId_1,
|
|
108
|
+
from: SHARED_PHONE,
|
|
109
|
+
to: '+15550002222',
|
|
110
|
+
userId: sdk.userInfo.id,
|
|
111
|
+
})
|
|
112
|
+
// ── the lookup the panel runs to list candidate profiles ──
|
|
113
|
+
// alternatePhones is deliberately excluded: the inbound webhook only consults it as a fallback, and
|
|
114
|
+
// including it would widen the $or beyond the indexed fields
|
|
115
|
+
];
|
|
116
|
+
case 5:
|
|
117
|
+
call_1 = _e.sent();
|
|
118
|
+
// ── the lookup the panel runs to list candidate profiles ──
|
|
119
|
+
// alternatePhones is deliberately excluded: the inbound webhook only consults it as a fallback, and
|
|
120
|
+
// including it would widen the $or beyond the indexed fields
|
|
121
|
+
return [4 /*yield*/, (0, testing_1.async_test)("move enduser: phone/landline lookup finds both duplicates and excludes alternatePhones", function () { return sdk.api.endusers.getSome({
|
|
122
|
+
mdbFilter: { $or: [{ phone: SHARED_PHONE }, { landline: SHARED_PHONE }] },
|
|
123
|
+
limit: 10,
|
|
124
|
+
}); }, { onResult: function (endusers) {
|
|
125
|
+
var ids = endusers.map(function (e) { return e.id; });
|
|
126
|
+
return (ids.includes(matchedByPhone_1.id)
|
|
127
|
+
&& ids.includes(matchedByLandline_1.id)
|
|
128
|
+
&& !ids.includes(matchedByAlternate_1.id));
|
|
129
|
+
} })
|
|
130
|
+
// ── the two ways the call window resolves the PhoneCall record for the live call ──
|
|
131
|
+
];
|
|
132
|
+
case 6:
|
|
133
|
+
// ── the lookup the panel runs to list candidate profiles ──
|
|
134
|
+
// alternatePhones is deliberately excluded: the inbound webhook only consults it as a fallback, and
|
|
135
|
+
// including it would widen the $or beyond the indexed fields
|
|
136
|
+
_e.sent();
|
|
137
|
+
// ── the two ways the call window resolves the PhoneCall record for the live call ──
|
|
138
|
+
return [4 /*yield*/, (0, testing_1.async_test)("move enduser: record resolves by id (the pcId dial parameter)", function () { return sdk.api.phone_calls.getSome({ ids: [call_1.id], limit: 1 }); }, { onResult: function (calls) { return calls.length === 1 && calls[0].id === call_1.id; } })];
|
|
139
|
+
case 7:
|
|
140
|
+
// ── the two ways the call window resolves the PhoneCall record for the live call ──
|
|
141
|
+
_e.sent();
|
|
142
|
+
return [4 /*yield*/, (0, testing_1.async_test)("move enduser: record resolves by externalId (the parentCallSID fallback)", function () { return sdk.api.phone_calls.getSome({ filter: { externalId: externalId_1 }, limit: 1 }); }, { onResult: function (calls) { return calls.length === 1 && calls[0].id === call_1.id; } })
|
|
143
|
+
// ── the move itself ──
|
|
144
|
+
];
|
|
145
|
+
case 8:
|
|
146
|
+
_e.sent();
|
|
147
|
+
// ── the move itself ──
|
|
148
|
+
return [4 /*yield*/, (0, testing_1.async_test)("move enduser: enduserId can be updated", function () { return sdk.api.phone_calls.updateOne(call_1.id, { enduserId: matchedByLandline_1.id }); }, testing_1.passOnAnyResult)];
|
|
149
|
+
case 9:
|
|
150
|
+
// ── the move itself ──
|
|
151
|
+
_e.sent();
|
|
152
|
+
return [4 /*yield*/, sdk.api.phone_calls.getOne(call_1.id)];
|
|
153
|
+
case 10:
|
|
154
|
+
moved = _e.sent();
|
|
155
|
+
(0, testing_1.assert)(moved.enduserId === matchedByLandline_1.id, "moved call enduserId is ".concat(moved.enduserId, ", expected ").concat(matchedByLandline_1.id), "move enduser: call is reattributed to the new enduser");
|
|
156
|
+
(0, testing_1.assert)(moved.externalId === externalId_1
|
|
157
|
+
&& moved.from === SHARED_PHONE
|
|
158
|
+
&& moved.to === '+15550002222'
|
|
159
|
+
&& moved.inbound === true, "move altered call identity fields: ".concat(JSON.stringify({ externalId: moved.externalId, from: moved.from, to: moved.to, inbound: moved.inbound })), "move enduser: move leaves call identity fields untouched");
|
|
160
|
+
// ── guards ──
|
|
161
|
+
// the foreign-key check on enduserId is what blocks moving a call outside the session's tenant
|
|
162
|
+
return [4 /*yield*/, (0, testing_1.async_test)("move enduser: cannot move to a nonexistent enduser", function () { return sdk.api.phone_calls.updateOne(call_1.id, { enduserId: NONEXISTENT_MONGO_ID }); }, { shouldError: true, onError: function (e) { return e.message === "Could not find a related record for the given id(s)"; } })];
|
|
163
|
+
case 11:
|
|
164
|
+
// ── guards ──
|
|
165
|
+
// the foreign-key check on enduserId is what blocks moving a call outside the session's tenant
|
|
166
|
+
_e.sent();
|
|
167
|
+
return [4 /*yield*/, (0, testing_1.async_test)("move enduser: non-admin without access cannot move the call", function () { return sdkNonAdmin.api.phone_calls.updateOne(call_1.id, { enduserId: matchedByPhone_1.id }); }, testing_1.handleAnyError)
|
|
168
|
+
// a role with phone_calls update revoked must not be able to move the call, even though the UI
|
|
169
|
+
// gate is an org setting rather than a permission
|
|
170
|
+
];
|
|
171
|
+
case 12:
|
|
172
|
+
_e.sent();
|
|
173
|
+
role = "move-call-".concat(RAND());
|
|
174
|
+
return [4 /*yield*/, sdk.api.role_based_access_permissions.createOne({
|
|
175
|
+
role: role,
|
|
176
|
+
permissions: __assign(__assign({}, constants_1.PROVIDER_PERMISSIONS), { endusers: constants_1.FULL_ACCESS, phone_calls: { create: null, read: 'All', update: null, delete: null } }),
|
|
177
|
+
})];
|
|
178
|
+
case 13:
|
|
179
|
+
rbap = _e.sent();
|
|
180
|
+
createdRoleIds.push(rbap.id);
|
|
181
|
+
return [4 /*yield*/, sdk.api.users.createOne({
|
|
182
|
+
email: "move.call.".concat(RAND(), "@tellescope.example"),
|
|
183
|
+
fname: 'Move', lname: 'CallRole',
|
|
184
|
+
notificationEmailsDisabled: true, verifiedEmail: true,
|
|
185
|
+
roles: [role],
|
|
186
|
+
})];
|
|
187
|
+
case 14:
|
|
188
|
+
noUpdateUser = _e.sent();
|
|
189
|
+
createdUserIds.push(noUpdateUser.id);
|
|
190
|
+
return [4 /*yield*/, sdk.api.users.generate_auth_token({ id: noUpdateUser.id })];
|
|
191
|
+
case 15:
|
|
192
|
+
_b = _e.sent(), authToken = _b.authToken, sessionUser = _b.user;
|
|
193
|
+
sdkNoUpdate_1 = new sdk_1.Session({ host: host });
|
|
194
|
+
sdkNoUpdate_1.setAuthToken(authToken);
|
|
195
|
+
sdkNoUpdate_1.setUserInfo(sessionUser);
|
|
196
|
+
return [4 /*yield*/, (0, testing_1.async_test)("move enduser: role without phone_calls update cannot move the call", function () { return sdkNoUpdate_1.api.phone_calls.updateOne(call_1.id, { enduserId: matchedByPhone_1.id }); }, testing_1.handleAnyError)
|
|
197
|
+
// ── cancel_recording targets the given call, not merely the enduser's most recent one ──
|
|
198
|
+
// a newer call for the same enduser is what made the enduserId-only lookup unreliable once a call
|
|
199
|
+
// could be moved mid-conversation
|
|
200
|
+
];
|
|
201
|
+
case 16:
|
|
202
|
+
_e.sent();
|
|
203
|
+
return [4 /*yield*/, sdk.api.phone_calls.createOne({
|
|
204
|
+
enduserId: matchedByLandline_1.id,
|
|
205
|
+
inbound: true,
|
|
206
|
+
externalId: "CAmoveendusernewer".concat(RAND()),
|
|
207
|
+
from: SHARED_PHONE,
|
|
208
|
+
to: '+15550002222',
|
|
209
|
+
userId: sdk.userInfo.id,
|
|
210
|
+
})];
|
|
211
|
+
case 17:
|
|
212
|
+
newerCall = _e.sent();
|
|
213
|
+
return [4 /*yield*/, (0, testing_1.async_test)("move enduser: cancel_recording with callId targets that exact call", function () { return sdk.api.phone_calls.cancel_recording({ enduserId: matchedByLandline_1.id, callId: call_1.id }); }, testing_1.passOnAnyResult)];
|
|
214
|
+
case 18:
|
|
215
|
+
_e.sent();
|
|
216
|
+
return [4 /*yield*/, Promise.all([
|
|
217
|
+
sdk.api.phone_calls.getOne(call_1.id),
|
|
218
|
+
sdk.api.phone_calls.getOne(newerCall.id),
|
|
219
|
+
])];
|
|
220
|
+
case 19:
|
|
221
|
+
_c = _e.sent(), cancelledById = _c[0], untouched = _c[1];
|
|
222
|
+
(0, testing_1.assert)(!!cancelledById.recordingCancelledAt && !untouched.recordingCancelledAt, "cancel_recording ignored callId: specified call cancelled=".concat(!!cancelledById.recordingCancelledAt, ", newer call cancelled=").concat(!!untouched.recordingCancelledAt), "move enduser: cancel_recording with callId cancels the specified call only");
|
|
223
|
+
return [4 /*yield*/, (0, testing_1.async_test)("move enduser: cancel_recording without callId still falls back to the most recent call", function () { return sdk.api.phone_calls.cancel_recording({ enduserId: matchedByLandline_1.id }); }, testing_1.passOnAnyResult)];
|
|
224
|
+
case 20:
|
|
225
|
+
_e.sent();
|
|
226
|
+
_d = testing_1.assert;
|
|
227
|
+
return [4 /*yield*/, sdk.api.phone_calls.getOne(newerCall.id)];
|
|
228
|
+
case 21:
|
|
229
|
+
_d.apply(void 0, [!!(_e.sent()).recordingCancelledAt,
|
|
230
|
+
"cancel_recording without callId did not cancel the enduser's most recent call",
|
|
231
|
+
"move enduser: cancel_recording without callId still uses the most-recent-call fallback"]);
|
|
232
|
+
return [3 /*break*/, 24];
|
|
233
|
+
case 22:
|
|
234
|
+
// deleting an enduser cascades deletion of its phone_calls records
|
|
235
|
+
return [4 /*yield*/, Promise.all(__spreadArray(__spreadArray(__spreadArray([], createdEnduserIds.map(function (id) { return sdk.api.endusers.deleteOne(id); }), true), createdUserIds.map(function (id) { return sdk.api.users.deleteOne(id); }), true), createdRoleIds.map(function (id) { return sdk.api.role_based_access_permissions.deleteOne(id); }), true)).catch(console.error)];
|
|
236
|
+
case 23:
|
|
237
|
+
// deleting an enduser cascades deletion of its phone_calls records
|
|
238
|
+
_e.sent();
|
|
239
|
+
return [7 /*endfinally*/];
|
|
240
|
+
case 24: return [2 /*return*/];
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
exports.phone_calls_move_enduser_tests = phone_calls_move_enduser_tests;
|
|
246
|
+
// Allow running this test file independently
|
|
247
|
+
if (require.main === module) {
|
|
248
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
249
|
+
var sdk_2 = new sdk_1.Session({ host: host });
|
|
250
|
+
var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
|
|
251
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
252
|
+
return __generator(this, function (_a) {
|
|
253
|
+
switch (_a.label) {
|
|
254
|
+
case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
|
|
255
|
+
case 1:
|
|
256
|
+
_a.sent();
|
|
257
|
+
return [4 /*yield*/, (0, exports.phone_calls_move_enduser_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
258
|
+
case 2:
|
|
259
|
+
_a.sent();
|
|
260
|
+
return [2 /*return*/];
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
}); };
|
|
264
|
+
runTests()
|
|
265
|
+
.then(function () {
|
|
266
|
+
console.log("✅ Phone calls move enduser test suite completed successfully");
|
|
267
|
+
process.exit(0);
|
|
268
|
+
})
|
|
269
|
+
.catch(function (error) {
|
|
270
|
+
console.error("❌ Phone calls move enduser test suite failed:", error);
|
|
271
|
+
process.exit(1);
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=phone_calls_move_enduser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone_calls_move_enduser.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/phone_calls_move_enduser.test.ts"],"names":[],"mappings":"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"}
|