@tellescope/sdk 1.67.0 → 1.67.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.
@@ -6044,16 +6044,377 @@ var nextReminderInMS_tests = function () { return __awaiter(void 0, void 0, void
6044
6044
  }
6045
6045
  });
6046
6046
  }); };
6047
+ var pollForResults = function (f, intervalInMS, iterations) {
6048
+ if (intervalInMS === void 0) { intervalInMS = 500; }
6049
+ if (iterations === void 0) { iterations = 20; }
6050
+ return __awaiter(void 0, void 0, void 0, function () {
6051
+ var i, result;
6052
+ return __generator(this, function (_a) {
6053
+ switch (_a.label) {
6054
+ case 0:
6055
+ i = 0;
6056
+ _a.label = 1;
6057
+ case 1:
6058
+ if (!(i < iterations)) return [3 /*break*/, 5];
6059
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, intervalInMS)];
6060
+ case 2:
6061
+ _a.sent();
6062
+ return [4 /*yield*/, f()];
6063
+ case 3:
6064
+ result = _a.sent();
6065
+ if (result.length)
6066
+ return [2 /*return*/, result];
6067
+ _a.label = 4;
6068
+ case 4:
6069
+ i++;
6070
+ return [3 /*break*/, 1];
6071
+ case 5: throw new Error("failed pollForResults");
6072
+ }
6073
+ });
6074
+ });
6075
+ };
6047
6076
  var test_ticket_automation_assignment_and_optimization = function () { return __awaiter(void 0, void 0, void 0, function () {
6048
- var _a, _b;
6077
+ var users, journey, foregroundTestCounter, testForegroundTicket, backgroundTestCounter, testBackgroundTicket, enduser, _a, _b;
6049
6078
  return __generator(this, function (_c) {
6050
6079
  switch (_c.label) {
6051
6080
  case 0:
6052
- _b = (_a = console).log;
6053
- return [4 /*yield*/, sdk.api.users.getSome({})];
6081
+ (0, testing_1.log_header)("Ticket Automation / Assignment Tests");
6082
+ return [4 /*yield*/, sdk.api.users.getSome()];
6054
6083
  case 1:
6055
- _b.apply(_a, [(_c.sent()).length]);
6056
- return [2 /*return*/];
6084
+ users = _c.sent();
6085
+ if (users.length < 3)
6086
+ throw new Error("Must have at least 3 users to detect invalid assignment");
6087
+ return [4 /*yield*/, sdk.api.users.updateOne(sdk.userInfo.id, { tags: ['tag1', 'tag2'] })];
6088
+ case 2:
6089
+ _c.sent();
6090
+ return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { tags: ['tag1', 'tag3'] })];
6091
+ case 3:
6092
+ _c.sent();
6093
+ return [4 /*yield*/, sdk.api.journeys.createOne({ title: "Testing" })];
6094
+ case 4:
6095
+ journey = _c.sent();
6096
+ foregroundTestCounter = 0;
6097
+ testForegroundTicket = function (_a) {
6098
+ var assignedTo = _a.assignedTo, info = _a.info, validOwners = _a.validOwners, enduser = _a.enduser, closedForReason = _a.closedForReason, testDelayedChild = _a.testDelayedChild;
6099
+ return __awaiter(void 0, void 0, void 0, function () {
6100
+ var e, _b, step, statusStep, child, ticket;
6101
+ var _c;
6102
+ return __generator(this, function (_d) {
6103
+ switch (_d.label) {
6104
+ case 0:
6105
+ _b = enduser;
6106
+ if (_b) return [3 /*break*/, 2];
6107
+ return [4 /*yield*/, sdk.api.endusers.createOne({ assignedTo: assignedTo, journeys: (_c = {}, _c[journey.id] = '', _c) })];
6108
+ case 1:
6109
+ _b = (_d.sent());
6110
+ _d.label = 2;
6111
+ case 2:
6112
+ e = _b;
6113
+ return [4 /*yield*/, sdk.api.automation_steps.createOne({
6114
+ action: { type: 'createTicket', info: __assign(__assign({}, info), { title: 'background ticket' }) },
6115
+ events: [{
6116
+ type: 'ticketCompleted',
6117
+ info: closedForReason ? { automationStepId: constants_1.PLACEHOLDER_ID, closedForReason: closedForReason } : { automationStepId: constants_1.PLACEHOLDER_ID }
6118
+ }],
6119
+ journeyId: journey.id,
6120
+ })];
6121
+ case 3:
6122
+ step = _d.sent();
6123
+ return [4 /*yield*/, sdk.api.automation_steps.createOne({
6124
+ action: { type: 'setEnduserStatus', info: { status: 'Test Status' } },
6125
+ events: [{
6126
+ type: 'ticketCompleted',
6127
+ info: closedForReason ? { automationStepId: constants_1.PLACEHOLDER_ID, closedForReason: closedForReason } : { automationStepId: constants_1.PLACEHOLDER_ID }
6128
+ }],
6129
+ journeyId: journey.id,
6130
+ })];
6131
+ case 4:
6132
+ statusStep = _d.sent();
6133
+ return [4 /*yield*/, sdk.api.automation_steps.createOne({
6134
+ action: { type: 'setEnduserStatus', info: { status: 'Test Status' } },
6135
+ events: [{
6136
+ type: 'afterAction',
6137
+ info: {
6138
+ automationStepId: step.id,
6139
+ delay: 0, delayInMS: 0, unit: 'Days',
6140
+ }
6141
+ }],
6142
+ journeyId: journey.id,
6143
+ })];
6144
+ case 5:
6145
+ child = _d.sent();
6146
+ return [4 /*yield*/, sdk.api.tickets.createOne({
6147
+ title: 'foreground ticket',
6148
+ enduserId: e.id,
6149
+ automationStepId: constants_1.PLACEHOLDER_ID,
6150
+ journeyId: journey.id,
6151
+ owner: validOwners[0],
6152
+ closedForReason: closedForReason,
6153
+ })];
6154
+ case 6:
6155
+ ticket = _d.sent();
6156
+ return [4 /*yield*/, (0, testing_1.async_test)("Foreground ticket assignment ".concat(++foregroundTestCounter), function () { return sdk.api.tickets.close_ticket({ ticketId: ticket.id, closedForReason: closedForReason }); }, { onResult: function (_a) {
6157
+ var generated = _a.generated;
6158
+ return !!(generated === null || generated === void 0 ? void 0 : generated.owner) && validOwners.includes(generated.owner);
6159
+ } })];
6160
+ case 7:
6161
+ _d.sent();
6162
+ return [4 /*yield*/, (0, testing_1.async_test)("Foreground ticket nop, no duplicates", function () { return sdk.api.automated_actions.getSome({ filter: { automationStepId: step.id } }); }, { onResult: function (steps) { return steps.length === 1 && !!steps[0].isNOP; } })];
6163
+ case 8:
6164
+ _d.sent();
6165
+ return [4 /*yield*/, (0, testing_1.async_test)("Background action queued, no duplicates", function () { return sdk.api.automated_actions.getSome({ filter: { automationStepId: statusStep.id } }); }, {
6166
+ onResult: function (steps) { return steps.length === 1 && !steps[0].isNOP; }
6167
+ })
6168
+ // verify that ticket generated by close_ticket goes on to generate its own delayed actions
6169
+ ];
6170
+ case 9:
6171
+ _d.sent();
6172
+ if (!testDelayedChild) return [3 /*break*/, 11];
6173
+ return [4 /*yield*/, (0, testing_1.async_test)("Delayed child ticket", function () { return pollForResults(function () { return sdk.api.automated_actions.getSome({ filter: { automationStepId: child.id } }); }); }, { onResult: function (steps) { return steps.length === 1 && !steps[0].isNOP; } })];
6174
+ case 10:
6175
+ _d.sent();
6176
+ _d.label = 11;
6177
+ case 11: return [4 /*yield*/, Promise.all([
6178
+ sdk.api.endusers.deleteOne(e.id),
6179
+ sdk.api.automation_steps.deleteOne(step.id),
6180
+ sdk.api.automation_steps.deleteOne(statusStep.id),
6181
+ sdk.api.automation_steps.deleteOne(child.id),
6182
+ ])];
6183
+ case 12:
6184
+ _d.sent();
6185
+ return [2 /*return*/];
6186
+ }
6187
+ });
6188
+ });
6189
+ };
6190
+ return [4 /*yield*/, testForegroundTicket({
6191
+ assignedTo: [],
6192
+ info: {
6193
+ assignmentStrategy: { type: 'default', info: {} },
6194
+ defaultAssignee: sdk.userInfo.id
6195
+ },
6196
+ validOwners: [sdk.userInfo.id],
6197
+ testDelayedChild: true,
6198
+ })];
6199
+ case 5:
6200
+ _c.sent();
6201
+ return [4 /*yield*/, testForegroundTicket({
6202
+ assignedTo: [],
6203
+ info: {
6204
+ assignmentStrategy: { type: 'default', info: {} },
6205
+ defaultAssignee: sdk.userInfo.id
6206
+ },
6207
+ validOwners: [sdk.userInfo.id],
6208
+ closedForReason: "closedForReason test",
6209
+ testDelayedChild: true,
6210
+ })];
6211
+ case 6:
6212
+ _c.sent();
6213
+ return [4 /*yield*/, testForegroundTicket({
6214
+ assignedTo: [],
6215
+ info: {
6216
+ assignmentStrategy: { type: 'default', info: {} },
6217
+ defaultAssignee: sdkNonAdmin.userInfo.id
6218
+ },
6219
+ validOwners: [sdkNonAdmin.userInfo.id],
6220
+ })];
6221
+ case 7:
6222
+ _c.sent();
6223
+ return [4 /*yield*/, testForegroundTicket({
6224
+ assignedTo: [],
6225
+ info: {
6226
+ assignmentStrategy: { type: 'previous-owner', info: {} },
6227
+ defaultAssignee: sdk.userInfo.id
6228
+ },
6229
+ validOwners: [sdkNonAdmin.userInfo.id],
6230
+ })];
6231
+ case 8:
6232
+ _c.sent();
6233
+ return [4 /*yield*/, testForegroundTicket({
6234
+ assignedTo: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6235
+ info: {
6236
+ assignmentStrategy: { type: 'care-team-primary', info: {} },
6237
+ defaultAssignee: sdk.userInfo.id
6238
+ },
6239
+ validOwners: [sdkNonAdmin.userInfo.id],
6240
+ })];
6241
+ case 9:
6242
+ _c.sent();
6243
+ return [4 /*yield*/, testForegroundTicket({
6244
+ assignedTo: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6245
+ info: {
6246
+ assignmentStrategy: { type: 'care-team-random', info: {} },
6247
+ defaultAssignee: sdk.userInfo.id
6248
+ },
6249
+ validOwners: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6250
+ })];
6251
+ case 10:
6252
+ _c.sent();
6253
+ return [4 /*yield*/, testForegroundTicket({
6254
+ assignedTo: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6255
+ info: {
6256
+ assignmentStrategy: { type: 'by-tags', info: { qualifier: 'One Of', values: ['tag1'] } },
6257
+ defaultAssignee: sdkNonAdmin.userInfo.id,
6258
+ },
6259
+ validOwners: [sdk.userInfo.id, sdkNonAdmin.userInfo.id,],
6260
+ })];
6261
+ case 11:
6262
+ _c.sent();
6263
+ return [4 /*yield*/, testForegroundTicket({
6264
+ assignedTo: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6265
+ info: {
6266
+ assignmentStrategy: { type: 'by-tags', info: { qualifier: 'One Of', values: ['tag2'] } },
6267
+ defaultAssignee: sdkNonAdmin.userInfo.id
6268
+ },
6269
+ validOwners: [sdk.userInfo.id],
6270
+ })];
6271
+ case 12:
6272
+ _c.sent();
6273
+ return [4 /*yield*/, testForegroundTicket({
6274
+ assignedTo: [],
6275
+ info: {
6276
+ assignmentStrategy: { type: 'by-tags', info: { qualifier: 'One Of', values: ['tag3'] } },
6277
+ defaultAssignee: sdk.userInfo.id
6278
+ },
6279
+ validOwners: [sdkNonAdmin.userInfo.id],
6280
+ })];
6281
+ case 13:
6282
+ _c.sent();
6283
+ backgroundTestCounter = 0;
6284
+ testBackgroundTicket = function (_a) {
6285
+ var assignedTo = _a.assignedTo, info = _a.info, validOwners = _a.validOwners, enduser = _a.enduser;
6286
+ return __awaiter(void 0, void 0, void 0, function () {
6287
+ var e, _b;
6288
+ return __generator(this, function (_c) {
6289
+ switch (_c.label) {
6290
+ case 0:
6291
+ _b = enduser;
6292
+ if (_b) return [3 /*break*/, 2];
6293
+ return [4 /*yield*/, sdk.api.endusers.createOne({ assignedTo: assignedTo })];
6294
+ case 1:
6295
+ _b = (_c.sent());
6296
+ _c.label = 2;
6297
+ case 2:
6298
+ e = _b;
6299
+ return [4 /*yield*/, sdk.api.automated_actions.createOne({
6300
+ action: { type: 'createTicket', info: __assign(__assign({}, info), { title: 'background ticket' }) },
6301
+ automationStepId: constants_1.PLACEHOLDER_ID,
6302
+ enduserId: e.id,
6303
+ event: { type: 'afterAction', info: { automationStepId: constants_1.PLACEHOLDER_ID, delay: 0, delayInMS: 0, unit: 'Days' } },
6304
+ journeyId: journey.id,
6305
+ status: 'active',
6306
+ processAfter: Date.now(),
6307
+ })];
6308
+ case 3:
6309
+ _c.sent();
6310
+ return [4 /*yield*/, (0, testing_1.async_test)("Background ticket assignment ".concat(++backgroundTestCounter), function () { return pollForResults(function () { return sdk.api.tickets.getSome({ filter: { enduserId: e.id, title: 'background ticket' } }); }); }, { onResult: function (ts) { return ts.length === 1 && !!ts[0].owner && validOwners.includes(ts[0].owner); } })];
6311
+ case 4:
6312
+ _c.sent();
6313
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(e.id)];
6314
+ case 5:
6315
+ _c.sent();
6316
+ return [2 /*return*/];
6317
+ }
6318
+ });
6319
+ });
6320
+ };
6321
+ return [4 /*yield*/, testBackgroundTicket({
6322
+ assignedTo: [],
6323
+ info: {
6324
+ assignmentStrategy: { type: 'default', info: {} },
6325
+ defaultAssignee: sdk.userInfo.id
6326
+ },
6327
+ validOwners: [sdk.userInfo.id],
6328
+ })];
6329
+ case 14:
6330
+ _c.sent();
6331
+ return [4 /*yield*/, testBackgroundTicket({
6332
+ assignedTo: [],
6333
+ info: {
6334
+ assignmentStrategy: { type: 'default', info: {} },
6335
+ defaultAssignee: sdkNonAdmin.userInfo.id
6336
+ },
6337
+ validOwners: [sdkNonAdmin.userInfo.id],
6338
+ })
6339
+ // ticket needs existing enduser, previous owner for test to work
6340
+ ];
6341
+ case 15:
6342
+ _c.sent();
6343
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'previous-owner-test' })];
6344
+ case 16:
6345
+ enduser = _c.sent();
6346
+ return [4 /*yield*/, sdk.api.tickets.createOne({
6347
+ // title should be different than 'background test' so it doesn't create false positive test
6348
+ title: 'previous-owner-test', enduserId: enduser.id, journeyId: journey.id, owner: sdkNonAdmin.userInfo.id
6349
+ })];
6350
+ case 17:
6351
+ _c.sent();
6352
+ return [4 /*yield*/, testBackgroundTicket({
6353
+ assignedTo: [],
6354
+ enduser: enduser,
6355
+ info: {
6356
+ assignmentStrategy: { type: 'previous-owner', info: {} },
6357
+ defaultAssignee: sdk.userInfo.id
6358
+ },
6359
+ validOwners: [sdkNonAdmin.userInfo.id],
6360
+ })];
6361
+ case 18:
6362
+ _c.sent();
6363
+ return [4 /*yield*/, testBackgroundTicket({
6364
+ assignedTo: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6365
+ info: {
6366
+ assignmentStrategy: { type: 'care-team-primary', info: {} },
6367
+ defaultAssignee: sdk.userInfo.id
6368
+ },
6369
+ validOwners: [sdkNonAdmin.userInfo.id],
6370
+ })];
6371
+ case 19:
6372
+ _c.sent();
6373
+ return [4 /*yield*/, testBackgroundTicket({
6374
+ assignedTo: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6375
+ info: {
6376
+ assignmentStrategy: { type: 'care-team-random', info: {} },
6377
+ defaultAssignee: sdk.userInfo.id
6378
+ },
6379
+ validOwners: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6380
+ })];
6381
+ case 20:
6382
+ _c.sent();
6383
+ return [4 /*yield*/, testBackgroundTicket({
6384
+ assignedTo: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6385
+ info: {
6386
+ assignmentStrategy: { type: 'by-tags', info: { qualifier: 'One Of', values: ['tag1'] } },
6387
+ defaultAssignee: sdkNonAdmin.userInfo.id,
6388
+ },
6389
+ validOwners: [sdk.userInfo.id, sdkNonAdmin.userInfo.id,],
6390
+ })];
6391
+ case 21:
6392
+ _c.sent();
6393
+ return [4 /*yield*/, testBackgroundTicket({
6394
+ assignedTo: [sdkNonAdmin.userInfo.id, sdk.userInfo.id],
6395
+ info: {
6396
+ assignmentStrategy: { type: 'by-tags', info: { qualifier: 'One Of', values: ['tag2'] } },
6397
+ defaultAssignee: sdkNonAdmin.userInfo.id
6398
+ },
6399
+ validOwners: [sdk.userInfo.id],
6400
+ })];
6401
+ case 22:
6402
+ _c.sent();
6403
+ return [4 /*yield*/, testBackgroundTicket({
6404
+ assignedTo: [],
6405
+ info: {
6406
+ assignmentStrategy: { type: 'by-tags', info: { qualifier: 'One Of', values: ['tag3'] } },
6407
+ defaultAssignee: sdk.userInfo.id
6408
+ },
6409
+ validOwners: [sdkNonAdmin.userInfo.id],
6410
+ })];
6411
+ case 23:
6412
+ _c.sent();
6413
+ _b = (_a = Promise).all;
6414
+ return [4 /*yield*/, sdk.api.journeys.deleteOne(journey.id)];
6415
+ case 24: return [2 /*return*/, _b.apply(_a, [[
6416
+ _c.sent()
6417
+ ]])];
6057
6418
  }
6058
6419
  });
6059
6420
  }); };