@tellescope/sdk 1.245.1 → 1.246.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/beluga_pharmacy_mappings.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/beluga_pharmacy_mappings.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/beluga_pharmacy_mappings.test.js +357 -0
- package/lib/cjs/tests/api_tests/beluga_pharmacy_mappings.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/calendar_event_limits.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/calendar_event_limits.test.js +163 -0
- package/lib/cjs/tests/api_tests/calendar_event_limits.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/organization_settings_duplicates.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/organization_settings_duplicates.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/organization_settings_duplicates.test.js +268 -0
- package/lib/cjs/tests/api_tests/organization_settings_duplicates.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/time_tracks.test.d.ts +20 -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 +692 -20
- package/lib/cjs/tests/api_tests/time_tracks.test.js.map +1 -1
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +137 -118
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/tests/api_tests/beluga_pharmacy_mappings.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/beluga_pharmacy_mappings.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/beluga_pharmacy_mappings.test.js +353 -0
- package/lib/esm/tests/api_tests/beluga_pharmacy_mappings.test.js.map +1 -0
- package/lib/esm/tests/api_tests/calendar_event_limits.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/calendar_event_limits.test.js +163 -0
- package/lib/esm/tests/api_tests/calendar_event_limits.test.js.map +1 -1
- package/lib/esm/tests/api_tests/organization_settings_duplicates.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/organization_settings_duplicates.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/organization_settings_duplicates.test.js +264 -0
- package/lib/esm/tests/api_tests/organization_settings_duplicates.test.js.map +1 -0
- package/lib/esm/tests/api_tests/time_tracks.test.d.ts +20 -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 +687 -20
- package/lib/esm/tests/api_tests/time_tracks.test.js.map +1 -1
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +138 -119
- 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_pharmacy_mappings.test.ts +351 -0
- package/src/tests/api_tests/calendar_event_limits.test.ts +195 -0
- package/src/tests/api_tests/time_tracks.test.ts +542 -16
- package/src/tests/tests.ts +10 -3
- package/test_generated.pdf +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beluga_pharmacy_mappings.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/beluga_pharmacy_mappings.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwDnC,eAAO,MAAM,8BAA8B;SAAuC,OAAO;iBAAe,OAAO;mBA+Q9G,CAAA"}
|
|
@@ -0,0 +1,357 @@
|
|
|
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.beluga_pharmacy_mappings_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 utilities_1 = require("@tellescope/utilities");
|
|
45
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
46
|
+
// Helper mimicking resolve_beluga_pharmacy_mapping evaluator
|
|
47
|
+
var evaluate_mapping_conditions = function (conditions, responses) { return (0, utilities_1.evaluate_conditional_logic)(conditions, function (key, value) {
|
|
48
|
+
var _a;
|
|
49
|
+
var responseValue = (_a = responses.find(function (r) { return r.externalId === key; })) === null || _a === void 0 ? void 0 : _a.value;
|
|
50
|
+
if (typeof value === 'string') {
|
|
51
|
+
return responseValue === value;
|
|
52
|
+
}
|
|
53
|
+
if (typeof value === 'object' && value !== null) {
|
|
54
|
+
var operator = Object.keys(value)[0];
|
|
55
|
+
var operand = Object.values(value)[0];
|
|
56
|
+
if (operator === '$contains') {
|
|
57
|
+
return typeof responseValue === 'string' && responseValue.includes(String(operand));
|
|
58
|
+
}
|
|
59
|
+
if (operator === '$doesNotContain') {
|
|
60
|
+
return typeof responseValue === 'string' && !responseValue.includes(String(operand));
|
|
61
|
+
}
|
|
62
|
+
if (operator === '$exists') {
|
|
63
|
+
return operand ? responseValue !== undefined : responseValue === undefined;
|
|
64
|
+
}
|
|
65
|
+
if (operator === '$ne') {
|
|
66
|
+
return responseValue !== String(operand);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}); };
|
|
71
|
+
// Helper to resolve first matching mapping
|
|
72
|
+
var resolve_mapping = function (mappings, responses) {
|
|
73
|
+
for (var _i = 0, mappings_1 = mappings; _i < mappings_1.length; _i++) {
|
|
74
|
+
var mapping = mappings_1[_i];
|
|
75
|
+
if (!mapping.conditions)
|
|
76
|
+
continue;
|
|
77
|
+
if (evaluate_mapping_conditions(mapping.conditions, responses)) {
|
|
78
|
+
return mapping;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
};
|
|
83
|
+
var beluga_pharmacy_mappings_tests = function (_a) {
|
|
84
|
+
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
85
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
86
|
+
var testFormId;
|
|
87
|
+
return __generator(this, function (_b) {
|
|
88
|
+
switch (_b.label) {
|
|
89
|
+
case 0:
|
|
90
|
+
(0, testing_1.log_header)("Beluga Pharmacy Mappings Tests");
|
|
91
|
+
_b.label = 1;
|
|
92
|
+
case 1:
|
|
93
|
+
_b.trys.push([1, , 18, 21]);
|
|
94
|
+
return [4 /*yield*/, (0, testing_1.async_test)("Create form with belugaPharmacyMappings", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
95
|
+
var mappings, form, fetched;
|
|
96
|
+
var _a, _b;
|
|
97
|
+
return __generator(this, function (_c) {
|
|
98
|
+
switch (_c.label) {
|
|
99
|
+
case 0:
|
|
100
|
+
mappings = [
|
|
101
|
+
{
|
|
102
|
+
pharmacyId: "pharmacy-001",
|
|
103
|
+
patientPreference: JSON.stringify([{ name: "Med A", strength: "10mg", quantity: "30", refills: "3", daysSupply: "30", sig: "Take once daily", dispenseUnit: "Tablet", medId: "med-001" }]),
|
|
104
|
+
conditions: { $and: [{ condition: { "state": "CA" } }, { condition: { "med_type": "weightLoss" } }] },
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
return [4 /*yield*/, sdk.api.forms.createOne({
|
|
108
|
+
title: 'Beluga Pharmacy Mappings Test Form',
|
|
109
|
+
belugaPharmacyMappings: mappings,
|
|
110
|
+
})];
|
|
111
|
+
case 1:
|
|
112
|
+
form = _c.sent();
|
|
113
|
+
testFormId = form.id;
|
|
114
|
+
return [4 /*yield*/, sdk.api.forms.getOne(form.id)];
|
|
115
|
+
case 2:
|
|
116
|
+
fetched = _c.sent();
|
|
117
|
+
return [2 /*return*/, (((_a = fetched.belugaPharmacyMappings) === null || _a === void 0 ? void 0 : _a.length) === 1
|
|
118
|
+
&& fetched.belugaPharmacyMappings[0].pharmacyId === "pharmacy-001"
|
|
119
|
+
&& !!((_b = fetched.belugaPharmacyMappings[0].conditions) === null || _b === void 0 ? void 0 : _b.$and))];
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}); }, { expectedResult: true })];
|
|
123
|
+
case 2:
|
|
124
|
+
_b.sent();
|
|
125
|
+
return [4 /*yield*/, (0, testing_1.async_test)("Update belugaPharmacyMappings on existing form", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
126
|
+
var updatedMappings, fetched;
|
|
127
|
+
var _a;
|
|
128
|
+
return __generator(this, function (_b) {
|
|
129
|
+
switch (_b.label) {
|
|
130
|
+
case 0:
|
|
131
|
+
if (!testFormId)
|
|
132
|
+
throw new Error("No test form");
|
|
133
|
+
updatedMappings = [
|
|
134
|
+
{
|
|
135
|
+
pharmacyId: "pharmacy-002",
|
|
136
|
+
patientPreference: JSON.stringify([{ name: "Med B", strength: "20mg", quantity: "60", refills: "2", daysSupply: "30", sig: "Take twice daily", dispenseUnit: "Capsule", medId: "med-002" }]),
|
|
137
|
+
conditions: { condition: { "state": "NY" } },
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
pharmacyId: "pharmacy-003",
|
|
141
|
+
patientPreference: "[]",
|
|
142
|
+
conditions: { $or: [{ condition: { "state": "TX" } }, { condition: { "state": "FL" } }] },
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
return [4 /*yield*/, sdk.api.forms.updateOne(testFormId, { belugaPharmacyMappings: updatedMappings }, { replaceObjectFields: true })];
|
|
146
|
+
case 1:
|
|
147
|
+
_b.sent();
|
|
148
|
+
return [4 /*yield*/, sdk.api.forms.getOne(testFormId)];
|
|
149
|
+
case 2:
|
|
150
|
+
fetched = _b.sent();
|
|
151
|
+
return [2 /*return*/, (((_a = fetched.belugaPharmacyMappings) === null || _a === void 0 ? void 0 : _a.length) === 2
|
|
152
|
+
&& fetched.belugaPharmacyMappings[0].pharmacyId === "pharmacy-002"
|
|
153
|
+
&& fetched.belugaPharmacyMappings[1].pharmacyId === "pharmacy-003")];
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}); }, { expectedResult: true })];
|
|
157
|
+
case 3:
|
|
158
|
+
_b.sent();
|
|
159
|
+
return [4 /*yield*/, (0, testing_1.async_test)("Save with nested CompoundFilter structure", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
160
|
+
var nestedMappings, fetched;
|
|
161
|
+
var _a, _b;
|
|
162
|
+
return __generator(this, function (_c) {
|
|
163
|
+
switch (_c.label) {
|
|
164
|
+
case 0:
|
|
165
|
+
if (!testFormId)
|
|
166
|
+
throw new Error("No test form");
|
|
167
|
+
nestedMappings = [
|
|
168
|
+
{
|
|
169
|
+
pharmacyId: "pharmacy-nested",
|
|
170
|
+
patientPreference: "[]",
|
|
171
|
+
conditions: {
|
|
172
|
+
$and: [
|
|
173
|
+
{ $or: [{ condition: { "state": "CA" } }, { condition: { "state": "NY" } }] },
|
|
174
|
+
{ condition: { "med_type": "weightLoss" } },
|
|
175
|
+
]
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
];
|
|
179
|
+
return [4 /*yield*/, sdk.api.forms.updateOne(testFormId, { belugaPharmacyMappings: nestedMappings }, { replaceObjectFields: true })];
|
|
180
|
+
case 1:
|
|
181
|
+
_c.sent();
|
|
182
|
+
return [4 /*yield*/, sdk.api.forms.getOne(testFormId)];
|
|
183
|
+
case 2:
|
|
184
|
+
fetched = _c.sent();
|
|
185
|
+
return [2 /*return*/, (((_a = fetched.belugaPharmacyMappings) === null || _a === void 0 ? void 0 : _a.length) === 1
|
|
186
|
+
&& fetched.belugaPharmacyMappings[0].pharmacyId === "pharmacy-nested"
|
|
187
|
+
&& !!((_b = fetched.belugaPharmacyMappings[0].conditions) === null || _b === void 0 ? void 0 : _b.$and))];
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}); }, { expectedResult: true })
|
|
191
|
+
// --- 6b. Conditional logic evaluation tests ---
|
|
192
|
+
];
|
|
193
|
+
case 4:
|
|
194
|
+
_b.sent();
|
|
195
|
+
// --- 6b. Conditional logic evaluation tests ---
|
|
196
|
+
return [4 /*yield*/, (0, testing_1.async_test)("Simple equality: condition matches response", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
197
|
+
return __generator(this, function (_a) {
|
|
198
|
+
return [2 /*return*/, evaluate_mapping_conditions({ condition: { "state": "CA" } }, [{ externalId: "state", value: "CA" }])];
|
|
199
|
+
});
|
|
200
|
+
}); }, { expectedResult: true })];
|
|
201
|
+
case 5:
|
|
202
|
+
// --- 6b. Conditional logic evaluation tests ---
|
|
203
|
+
_b.sent();
|
|
204
|
+
return [4 /*yield*/, (0, testing_1.async_test)("Simple equality miss: condition does not match response", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
205
|
+
return __generator(this, function (_a) {
|
|
206
|
+
return [2 /*return*/, evaluate_mapping_conditions({ condition: { "state": "CA" } }, [{ externalId: "state", value: "NY" }])];
|
|
207
|
+
});
|
|
208
|
+
}); }, { expectedResult: false })];
|
|
209
|
+
case 6:
|
|
210
|
+
_b.sent();
|
|
211
|
+
return [4 /*yield*/, (0, testing_1.async_test)("$and: two conditions, both match", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
212
|
+
return __generator(this, function (_a) {
|
|
213
|
+
return [2 /*return*/, evaluate_mapping_conditions({ $and: [{ condition: { "state": "CA" } }, { condition: { "med_type": "weightLoss" } }] }, [{ externalId: "state", value: "CA" }, { externalId: "med_type", value: "weightLoss" }])];
|
|
214
|
+
});
|
|
215
|
+
}); }, { expectedResult: true })];
|
|
216
|
+
case 7:
|
|
217
|
+
_b.sent();
|
|
218
|
+
return [4 /*yield*/, (0, testing_1.async_test)("$and: two conditions, one misses", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
219
|
+
return __generator(this, function (_a) {
|
|
220
|
+
return [2 /*return*/, evaluate_mapping_conditions({ $and: [{ condition: { "state": "CA" } }, { condition: { "med_type": "weightLoss" } }] }, [{ externalId: "state", value: "CA" }, { externalId: "med_type", value: "skincare" }])];
|
|
221
|
+
});
|
|
222
|
+
}); }, { expectedResult: false })];
|
|
223
|
+
case 8:
|
|
224
|
+
_b.sent();
|
|
225
|
+
return [4 /*yield*/, (0, testing_1.async_test)("$or: two conditions, one matches", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
226
|
+
return __generator(this, function (_a) {
|
|
227
|
+
return [2 /*return*/, evaluate_mapping_conditions({ $or: [{ condition: { "state": "CA" } }, { condition: { "state": "NY" } }] }, [{ externalId: "state", value: "NY" }])];
|
|
228
|
+
});
|
|
229
|
+
}); }, { expectedResult: true })];
|
|
230
|
+
case 9:
|
|
231
|
+
_b.sent();
|
|
232
|
+
return [4 /*yield*/, (0, testing_1.async_test)("$or: two conditions, neither matches", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
233
|
+
return __generator(this, function (_a) {
|
|
234
|
+
return [2 /*return*/, evaluate_mapping_conditions({ $or: [{ condition: { "state": "CA" } }, { condition: { "state": "NY" } }] }, [{ externalId: "state", value: "TX" }])];
|
|
235
|
+
});
|
|
236
|
+
}); }, { expectedResult: false })];
|
|
237
|
+
case 10:
|
|
238
|
+
_b.sent();
|
|
239
|
+
return [4 /*yield*/, (0, testing_1.async_test)("$contains: value includes substring", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
240
|
+
return __generator(this, function (_a) {
|
|
241
|
+
return [2 /*return*/, evaluate_mapping_conditions({ condition: { "meds": { $contains: "GLP" } } }, [{ externalId: "meds", value: "GLP-1 agonist" }])];
|
|
242
|
+
});
|
|
243
|
+
}); }, { expectedResult: true })];
|
|
244
|
+
case 11:
|
|
245
|
+
_b.sent();
|
|
246
|
+
return [4 /*yield*/, (0, testing_1.async_test)("$ne: value does not equal", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
247
|
+
return __generator(this, function (_a) {
|
|
248
|
+
return [2 /*return*/, evaluate_mapping_conditions({ condition: { "state": { $ne: "CA" } } }, [{ externalId: "state", value: "NY" }])];
|
|
249
|
+
});
|
|
250
|
+
}); }, { expectedResult: true })];
|
|
251
|
+
case 12:
|
|
252
|
+
_b.sent();
|
|
253
|
+
return [4 /*yield*/, (0, testing_1.async_test)("$exists: field present", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
254
|
+
return __generator(this, function (_a) {
|
|
255
|
+
return [2 /*return*/, evaluate_mapping_conditions({ condition: { "pharmacyOverride": { $exists: true } } }, [{ externalId: "pharmacyOverride", value: "some-value" }])];
|
|
256
|
+
});
|
|
257
|
+
}); }, { expectedResult: true })];
|
|
258
|
+
case 13:
|
|
259
|
+
_b.sent();
|
|
260
|
+
return [4 /*yield*/, (0, testing_1.async_test)("$exists: field absent", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
261
|
+
return __generator(this, function (_a) {
|
|
262
|
+
return [2 /*return*/, evaluate_mapping_conditions({ condition: { "pharmacyOverride": { $exists: true } } }, [{ externalId: "other_field", value: "some-value" }])];
|
|
263
|
+
});
|
|
264
|
+
}); }, { expectedResult: false })];
|
|
265
|
+
case 14:
|
|
266
|
+
_b.sent();
|
|
267
|
+
return [4 /*yield*/, (0, testing_1.async_test)("Nested compound: $and with $or", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
268
|
+
return __generator(this, function (_a) {
|
|
269
|
+
return [2 /*return*/, evaluate_mapping_conditions({
|
|
270
|
+
$and: [
|
|
271
|
+
{ $or: [{ condition: { "state": "CA" } }, { condition: { "state": "NY" } }] },
|
|
272
|
+
{ condition: { "med_type": "weightLoss" } },
|
|
273
|
+
]
|
|
274
|
+
}, [{ externalId: "state", value: "NY" }, { externalId: "med_type", value: "weightLoss" }])];
|
|
275
|
+
});
|
|
276
|
+
}); }, { expectedResult: true })];
|
|
277
|
+
case 15:
|
|
278
|
+
_b.sent();
|
|
279
|
+
return [4 /*yield*/, (0, testing_1.async_test)("First-match-wins: multiple mappings, first matching returned", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
280
|
+
var mappings, result;
|
|
281
|
+
return __generator(this, function (_a) {
|
|
282
|
+
mappings = [
|
|
283
|
+
{
|
|
284
|
+
pharmacyId: "pharmacy-first",
|
|
285
|
+
patientPreference: "[]",
|
|
286
|
+
conditions: { condition: { "state": "CA" } },
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
pharmacyId: "pharmacy-second",
|
|
290
|
+
patientPreference: "[]",
|
|
291
|
+
conditions: { condition: { "state": "CA" } },
|
|
292
|
+
},
|
|
293
|
+
];
|
|
294
|
+
result = resolve_mapping(mappings, [{ externalId: "state", value: "CA" }]);
|
|
295
|
+
return [2 /*return*/, (result === null || result === void 0 ? void 0 : result.pharmacyId) === "pharmacy-first"];
|
|
296
|
+
});
|
|
297
|
+
}); }, { expectedResult: true })];
|
|
298
|
+
case 16:
|
|
299
|
+
_b.sent();
|
|
300
|
+
return [4 /*yield*/, (0, testing_1.async_test)("No match: no mappings match, returns undefined", function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
301
|
+
var mappings, result;
|
|
302
|
+
return __generator(this, function (_a) {
|
|
303
|
+
mappings = [
|
|
304
|
+
{
|
|
305
|
+
pharmacyId: "pharmacy-ca",
|
|
306
|
+
patientPreference: "[]",
|
|
307
|
+
conditions: { condition: { "state": "CA" } },
|
|
308
|
+
},
|
|
309
|
+
];
|
|
310
|
+
result = resolve_mapping(mappings, [{ externalId: "state", value: "TX" }]);
|
|
311
|
+
return [2 /*return*/, result === undefined];
|
|
312
|
+
});
|
|
313
|
+
}); }, { expectedResult: true })];
|
|
314
|
+
case 17:
|
|
315
|
+
_b.sent();
|
|
316
|
+
return [3 /*break*/, 21];
|
|
317
|
+
case 18:
|
|
318
|
+
if (!testFormId) return [3 /*break*/, 20];
|
|
319
|
+
return [4 /*yield*/, sdk.api.forms.deleteOne(testFormId).catch(console.error)];
|
|
320
|
+
case 19:
|
|
321
|
+
_b.sent();
|
|
322
|
+
_b.label = 20;
|
|
323
|
+
case 20: return [7 /*endfinally*/];
|
|
324
|
+
case 21: return [2 /*return*/];
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
};
|
|
329
|
+
exports.beluga_pharmacy_mappings_tests = beluga_pharmacy_mappings_tests;
|
|
330
|
+
if (require.main === module) {
|
|
331
|
+
console.log("Using API URL: ".concat(host));
|
|
332
|
+
var sdk_2 = new sdk_1.Session({ host: host });
|
|
333
|
+
var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
|
|
334
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
335
|
+
return __generator(this, function (_a) {
|
|
336
|
+
switch (_a.label) {
|
|
337
|
+
case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
|
|
338
|
+
case 1:
|
|
339
|
+
_a.sent();
|
|
340
|
+
return [4 /*yield*/, (0, exports.beluga_pharmacy_mappings_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
341
|
+
case 2:
|
|
342
|
+
_a.sent();
|
|
343
|
+
return [2 /*return*/];
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}); };
|
|
347
|
+
runTests()
|
|
348
|
+
.then(function () {
|
|
349
|
+
console.log("Beluga pharmacy mappings test suite completed successfully");
|
|
350
|
+
process.exit(0);
|
|
351
|
+
})
|
|
352
|
+
.catch(function (error) {
|
|
353
|
+
console.error("Beluga pharmacy mappings test suite failed:", error);
|
|
354
|
+
process.exit(1);
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=beluga_pharmacy_mappings.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beluga_pharmacy_mappings.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/beluga_pharmacy_mappings.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar_event_limits.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/calendar_event_limits.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAA;AAiCnD,eAAO,MAAM,gCAAgC;UAChB,MAAM;QAAM,MAAM,IAAI;
|
|
1
|
+
{"version":3,"file":"calendar_event_limits.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/calendar_event_limits.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAA;AAiCnD,eAAO,MAAM,gCAAgC;UAChB,MAAM;QAAM,MAAM,IAAI;GA+0BlD,CAAA;AAKD,eAAO,MAAM,2BAA2B;SAAwC,OAAO;iBAAe,OAAO;mBAwlB5G,CAAA"}
|
|
@@ -621,6 +621,169 @@ var calendar_event_limits_unit_tests = function () {
|
|
|
621
621
|
assertEqual(result, false, 'Should allow for 2-day period with event 2 days ago');
|
|
622
622
|
}
|
|
623
623
|
});
|
|
624
|
+
// === otherTemplateIds (OR logic) tests ===
|
|
625
|
+
var TEMPLATE_B = "templateB456";
|
|
626
|
+
var TEMPLATE_C = "templateC789";
|
|
627
|
+
// Test 21: otherTemplateIds - booking a secondary template should count toward the limit
|
|
628
|
+
tests.push({
|
|
629
|
+
name: 'otherTemplateIds - secondary template counts toward limit',
|
|
630
|
+
fn: function () {
|
|
631
|
+
var oct1 = new Date('2025-10-01T18:00:00.000Z').getTime();
|
|
632
|
+
var limits = [{
|
|
633
|
+
templateId: TEMPLATE_ID,
|
|
634
|
+
otherTemplateIds: [TEMPLATE_B],
|
|
635
|
+
period: 1,
|
|
636
|
+
limit: 1,
|
|
637
|
+
}];
|
|
638
|
+
var existingEvents = [
|
|
639
|
+
createEvent(oct1, TEMPLATE_ID), // 1 event of primary template
|
|
640
|
+
];
|
|
641
|
+
// Booking template B should be blocked because the shared limit is reached
|
|
642
|
+
var result = (0, utilities_1.slot_violates_calendar_event_limits)({
|
|
643
|
+
slotStartTimeInMS: oct1,
|
|
644
|
+
templateId: TEMPLATE_B,
|
|
645
|
+
userId: USER_ID,
|
|
646
|
+
calendarEventLimits: limits,
|
|
647
|
+
existingEvents: existingEvents,
|
|
648
|
+
timezone: 'America/New_York',
|
|
649
|
+
});
|
|
650
|
+
assertEqual(result, true, 'Should block secondary template when shared limit reached');
|
|
651
|
+
}
|
|
652
|
+
});
|
|
653
|
+
// Test 22: otherTemplateIds - events of secondary template count toward primary booking
|
|
654
|
+
tests.push({
|
|
655
|
+
name: 'otherTemplateIds - secondary template events count when booking primary',
|
|
656
|
+
fn: function () {
|
|
657
|
+
var oct1 = new Date('2025-10-01T18:00:00.000Z').getTime();
|
|
658
|
+
var limits = [{
|
|
659
|
+
templateId: TEMPLATE_ID,
|
|
660
|
+
otherTemplateIds: [TEMPLATE_B],
|
|
661
|
+
period: 1,
|
|
662
|
+
limit: 1,
|
|
663
|
+
}];
|
|
664
|
+
var existingEvents = [
|
|
665
|
+
createEvent(oct1, TEMPLATE_B), // 1 event of secondary template
|
|
666
|
+
];
|
|
667
|
+
// Booking primary template should be blocked because a secondary template event used the limit
|
|
668
|
+
var result = (0, utilities_1.slot_violates_calendar_event_limits)({
|
|
669
|
+
slotStartTimeInMS: oct1,
|
|
670
|
+
templateId: TEMPLATE_ID,
|
|
671
|
+
userId: USER_ID,
|
|
672
|
+
calendarEventLimits: limits,
|
|
673
|
+
existingEvents: existingEvents,
|
|
674
|
+
timezone: 'America/New_York',
|
|
675
|
+
});
|
|
676
|
+
assertEqual(result, true, 'Should block primary template when secondary events fill limit');
|
|
677
|
+
}
|
|
678
|
+
});
|
|
679
|
+
// Test 23: otherTemplateIds - mixed events from both templates count together
|
|
680
|
+
tests.push({
|
|
681
|
+
name: 'otherTemplateIds - mixed events count toward shared limit',
|
|
682
|
+
fn: function () {
|
|
683
|
+
var oct1_9am = new Date('2025-10-01T13:00:00.000Z').getTime();
|
|
684
|
+
var oct1_2pm = new Date('2025-10-01T18:00:00.000Z').getTime();
|
|
685
|
+
var oct1_5pm = new Date('2025-10-01T21:00:00.000Z').getTime();
|
|
686
|
+
var limits = [{
|
|
687
|
+
templateId: TEMPLATE_ID,
|
|
688
|
+
otherTemplateIds: [TEMPLATE_B],
|
|
689
|
+
period: 1,
|
|
690
|
+
limit: 2,
|
|
691
|
+
}];
|
|
692
|
+
var existingEvents = [
|
|
693
|
+
createEvent(oct1_9am, TEMPLATE_ID),
|
|
694
|
+
createEvent(oct1_2pm, TEMPLATE_B), // 1 secondary
|
|
695
|
+
];
|
|
696
|
+
// Both count toward limit of 2, so a 3rd should be blocked
|
|
697
|
+
var result = (0, utilities_1.slot_violates_calendar_event_limits)({
|
|
698
|
+
slotStartTimeInMS: oct1_5pm,
|
|
699
|
+
templateId: TEMPLATE_ID,
|
|
700
|
+
userId: USER_ID,
|
|
701
|
+
calendarEventLimits: limits,
|
|
702
|
+
existingEvents: existingEvents,
|
|
703
|
+
timezone: 'America/New_York',
|
|
704
|
+
});
|
|
705
|
+
assertEqual(result, true, 'Should block when mixed events reach shared limit');
|
|
706
|
+
}
|
|
707
|
+
});
|
|
708
|
+
// Test 24: otherTemplateIds - unrelated template should NOT be affected
|
|
709
|
+
tests.push({
|
|
710
|
+
name: 'otherTemplateIds - unrelated template not affected by shared limit',
|
|
711
|
+
fn: function () {
|
|
712
|
+
var oct1 = new Date('2025-10-01T18:00:00.000Z').getTime();
|
|
713
|
+
var limits = [{
|
|
714
|
+
templateId: TEMPLATE_ID,
|
|
715
|
+
otherTemplateIds: [TEMPLATE_B],
|
|
716
|
+
period: 1,
|
|
717
|
+
limit: 1,
|
|
718
|
+
}];
|
|
719
|
+
var existingEvents = [
|
|
720
|
+
createEvent(oct1, TEMPLATE_ID), // Limit reached for A+B group
|
|
721
|
+
];
|
|
722
|
+
// Template C is not part of the group, should be allowed
|
|
723
|
+
var result = (0, utilities_1.slot_violates_calendar_event_limits)({
|
|
724
|
+
slotStartTimeInMS: oct1,
|
|
725
|
+
templateId: TEMPLATE_C,
|
|
726
|
+
userId: USER_ID,
|
|
727
|
+
calendarEventLimits: limits,
|
|
728
|
+
existingEvents: existingEvents,
|
|
729
|
+
timezone: 'America/New_York',
|
|
730
|
+
});
|
|
731
|
+
assertEqual(result, false, 'Should allow unrelated template even when shared limit reached');
|
|
732
|
+
}
|
|
733
|
+
});
|
|
734
|
+
// Test 25: otherTemplateIds - under limit should allow
|
|
735
|
+
tests.push({
|
|
736
|
+
name: 'otherTemplateIds - under shared limit should allow',
|
|
737
|
+
fn: function () {
|
|
738
|
+
var oct1_9am = new Date('2025-10-01T13:00:00.000Z').getTime();
|
|
739
|
+
var oct1_2pm = new Date('2025-10-01T18:00:00.000Z').getTime();
|
|
740
|
+
var limits = [{
|
|
741
|
+
templateId: TEMPLATE_ID,
|
|
742
|
+
otherTemplateIds: [TEMPLATE_B],
|
|
743
|
+
period: 1,
|
|
744
|
+
limit: 3,
|
|
745
|
+
}];
|
|
746
|
+
var existingEvents = [
|
|
747
|
+
createEvent(oct1_9am, TEMPLATE_ID),
|
|
748
|
+
createEvent(oct1_9am, TEMPLATE_B), // 1 event, total = 2
|
|
749
|
+
];
|
|
750
|
+
// Under limit of 3, should allow
|
|
751
|
+
var result = (0, utilities_1.slot_violates_calendar_event_limits)({
|
|
752
|
+
slotStartTimeInMS: oct1_2pm,
|
|
753
|
+
templateId: TEMPLATE_B,
|
|
754
|
+
userId: USER_ID,
|
|
755
|
+
calendarEventLimits: limits,
|
|
756
|
+
existingEvents: existingEvents,
|
|
757
|
+
timezone: 'America/New_York',
|
|
758
|
+
});
|
|
759
|
+
assertEqual(result, false, 'Should allow when under shared limit');
|
|
760
|
+
}
|
|
761
|
+
});
|
|
762
|
+
// Test 26: No otherTemplateIds - backward compatibility
|
|
763
|
+
tests.push({
|
|
764
|
+
name: 'No otherTemplateIds - backward compatible single-template behavior',
|
|
765
|
+
fn: function () {
|
|
766
|
+
var oct1 = new Date('2025-10-01T18:00:00.000Z').getTime();
|
|
767
|
+
var limits = [{
|
|
768
|
+
templateId: TEMPLATE_ID,
|
|
769
|
+
period: 1,
|
|
770
|
+
limit: 1,
|
|
771
|
+
}];
|
|
772
|
+
var existingEvents = [
|
|
773
|
+
createEvent(oct1, TEMPLATE_B), // Event of different template
|
|
774
|
+
];
|
|
775
|
+
// Without otherTemplateIds, template B events should NOT count toward template A's limit
|
|
776
|
+
var result = (0, utilities_1.slot_violates_calendar_event_limits)({
|
|
777
|
+
slotStartTimeInMS: oct1,
|
|
778
|
+
templateId: TEMPLATE_ID,
|
|
779
|
+
userId: USER_ID,
|
|
780
|
+
calendarEventLimits: limits,
|
|
781
|
+
existingEvents: existingEvents,
|
|
782
|
+
timezone: 'America/New_York',
|
|
783
|
+
});
|
|
784
|
+
assertEqual(result, false, 'Should not count other template events without otherTemplateIds');
|
|
785
|
+
}
|
|
786
|
+
});
|
|
624
787
|
return tests;
|
|
625
788
|
};
|
|
626
789
|
exports.calendar_event_limits_unit_tests = calendar_event_limits_unit_tests;
|