@tellescope/sdk 1.67.6 → 1.67.8

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.
@@ -871,7 +871,9 @@ var run_generated_tests = function (_a) {
871
871
  || name === 'analytics_frames'
872
872
  || name === 'superbills'
873
873
  || name === 'referral_providers'
874
- || name === 'webhooks')
874
+ || name === 'webhooks'
875
+ || name === 'automated_actions' // might process in background and cause false failure
876
+ )
875
877
  return [2 /*return*/];
876
878
  if (!!defaultEnduser) return [3 /*break*/, 2];
877
879
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'default@tellescope.com', phone: "5555555555" })];
@@ -906,18 +908,24 @@ var run_generated_tests = function (_a) {
906
908
  case 5: return [4 /*yield*/, (0, testing_1.async_test)("create-".concat(singularName), function () { return queries.createOne(instance); }, { onResult: function (r) { return !!(_id = r.id) && (name === 'api_keys' || !!r.creator) && validateReturnType(returns.create, r, defaultValidation); } })];
907
909
  case 6:
908
910
  _c.sent();
909
- return [4 /*yield*/, (0, testing_1.async_test)("log-".concat(singularName, " create"), function () { return sdk.api.user_logs.getOne({ resourceId: _id, resource: name, action: 'create' }); }, { onResult: function (r) { return r && r.userId === sdk.userInfo.id; } })];
911
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 25)];
910
912
  case 7:
911
913
  _c.sent();
912
- if (!model.defaultActions.update) return [3 /*break*/, 10];
913
- return [4 /*yield*/, (0, testing_1.async_test)("update-".concat(singularName), function () { return queries.updateOne(_id, updates, { replaceObjectFields: true }); }, { onResult: function (u) { return typeof u === 'object' && u.id === _id; } })];
914
+ return [4 /*yield*/, (0, testing_1.async_test)("log-".concat(singularName, " create"), function () { return sdk.api.user_logs.getOne({ resourceId: _id, resource: name, action: 'create' }); }, { onResult: function (r) { return r && r.userId === sdk.userInfo.id; } })];
914
915
  case 8:
915
916
  _c.sent();
916
- return [4 /*yield*/, (0, testing_1.async_test)("log-".concat(singularName, " update"), function () { return sdk.api.user_logs.getOne({ resourceId: _id, resource: name, action: 'update' }); }, { onResult: function (r) { return r && r.userId === sdk.userInfo.id; } })];
917
+ if (!model.defaultActions.update) return [3 /*break*/, 12];
918
+ return [4 /*yield*/, (0, testing_1.async_test)("update-".concat(singularName), function () { return queries.updateOne(_id, updates, { replaceObjectFields: true }); }, { onResult: function (u) { return typeof u === 'object' && u.id === _id; } })];
917
919
  case 9:
918
920
  _c.sent();
919
- _c.label = 10;
920
- case 10: return [4 /*yield*/, (0, testing_1.async_test)("get-".concat(singularName), function () { return queries.getOne(_id); }, { onResult: function (d) {
921
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 25)];
922
+ case 10:
923
+ _c.sent();
924
+ return [4 /*yield*/, (0, testing_1.async_test)("log-".concat(singularName, " update"), function () { return sdk.api.user_logs.getOne({ resourceId: _id, resource: name, action: 'update' }); }, { onResult: function (r) { return r && r.userId === sdk.userInfo.id; } })];
925
+ case 11:
926
+ _c.sent();
927
+ _c.label = 12;
928
+ case 12: return [4 /*yield*/, (0, testing_1.async_test)("get-".concat(singularName), function () { return queries.getOne(_id); }, { onResult: function (d) {
921
929
  if (!(d === null || d === void 0 ? void 0 : d.id))
922
930
  return false;
923
931
  for (var k in instance) {
@@ -928,7 +936,7 @@ var run_generated_tests = function (_a) {
928
936
  return true;
929
937
  }
930
938
  })];
931
- case 11:
939
+ case 13:
932
940
  _c.sent();
933
941
  return [4 /*yield*/, (0, testing_1.async_test)("get-".concat(safeName), function () { return queries.getSome({ filter: filter }); }, { onResult: function (_a) {
934
942
  var d = _a[0];
@@ -943,27 +951,30 @@ var run_generated_tests = function (_a) {
943
951
  return true;
944
952
  }
945
953
  })];
946
- case 12:
954
+ case 14:
947
955
  _c.sent();
948
956
  return [4 /*yield*/, (0, testing_1.async_test)("delete-".concat(singularName), function () { return queries.deleteOne(_id); }, passOnVoid)];
949
- case 13:
957
+ case 15:
958
+ _c.sent();
959
+ return [4 /*yield*/, (0, testing_1.wait)(undefined, 25)];
960
+ case 16:
950
961
  _c.sent();
951
962
  return [4 /*yield*/, (0, testing_1.async_test)("get-".concat(singularName, " (verify delete)"), function () { return queries.getOne(_id); }, { shouldError: true, onError: function (e) { return e.message === 'Could not find a record for the given id'; } })
952
963
  // lots of side effects
953
964
  ];
954
- case 14:
965
+ case 17:
955
966
  _c.sent();
956
- if (!(name === 'endusers')) return [3 /*break*/, 16];
967
+ if (!(name === 'endusers')) return [3 /*break*/, 19];
957
968
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 100)];
958
- case 15:
969
+ case 18:
959
970
  _c.sent();
960
- return [3 /*break*/, 18];
961
- case 16: return [4 /*yield*/, (0, testing_1.wait)(undefined, 50)];
962
- case 17:
971
+ return [3 /*break*/, 21];
972
+ case 19: return [4 /*yield*/, (0, testing_1.wait)(undefined, 50)];
973
+ case 20:
963
974
  _c.sent();
964
- _c.label = 18;
965
- case 18: return [4 /*yield*/, (0, testing_1.async_test)("log-".concat(singularName, " delete"), function () { return sdk.api.user_logs.getOne({ resourceId: _id, resource: name, action: 'delete' }); }, { onResult: function (r) { return r && r.userId === sdk.userInfo.id; } })];
966
- case 19:
975
+ _c.label = 21;
976
+ case 21: return [4 /*yield*/, (0, testing_1.async_test)("log-".concat(singularName, " delete"), function () { return sdk.api.user_logs.getOne({ resourceId: _id, resource: name, action: 'delete' }); }, { onResult: function (r) { return r && r.userId === sdk.userInfo.id; } })];
977
+ case 22:
967
978
  _c.sent();
968
979
  return [2 /*return*/];
969
980
  }
@@ -1927,21 +1938,24 @@ var files_tests = function () { return __awaiter(void 0, void 0, void 0, functio
1927
1938
  return [4 /*yield*/, enduserSDK.authenticate(email, password).catch(console.error)];
1928
1939
  case 3:
1929
1940
  _c.sent();
1941
+ return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)]; // to use new role, handle logout on role change
1942
+ case 4:
1943
+ _c.sent(); // to use new role, handle logout on role change
1930
1944
  buff = buffer.Buffer.from('test file data');
1931
1945
  return [4 /*yield*/, (0, testing_1.async_test)("non admin can prepare file upload", function () { return sdkNonAdmin.api.files.prepare_file_upload({
1932
1946
  name: 'Test File', size: buff.byteLength, type: 'text/plain'
1933
1947
  }); }, { onResult: function (t) { return true; } })];
1934
- case 4:
1948
+ case 5:
1935
1949
  _c.sent();
1936
1950
  return [4 /*yield*/, sdk.api.files.prepare_file_upload({
1937
1951
  name: 'Test Private', size: buff.byteLength, type: 'text/plain', enduserId: enduser.id,
1938
1952
  })];
1939
- case 5:
1953
+ case 6:
1940
1954
  _a = _c.sent(), presignedUpload = _a.presignedUpload, file = _a.file;
1941
1955
  return [4 /*yield*/, sdk.api.files.prepare_file_upload({
1942
1956
  name: 'Test Private (no enduser)', size: buff.byteLength, type: 'text/plain',
1943
1957
  })];
1944
- case 6:
1958
+ case 7:
1945
1959
  _b = _c.sent(), presignedNonEnduser = _b.presignedUpload, fileNonEnduser = _b.file;
1946
1960
  return [4 /*yield*/, sdk.api.files.prepare_file_upload({
1947
1961
  name: 'Test Public', size: buff.byteLength, type: 'text/plain',
@@ -1949,62 +1963,62 @@ var files_tests = function () { return __awaiter(void 0, void 0, void 0, functio
1949
1963
  publicRead: true,
1950
1964
  publicName: 'public',
1951
1965
  })];
1952
- case 7:
1966
+ case 8:
1953
1967
  presigned2 = (_c.sent()).presignedUpload;
1954
1968
  return [4 /*yield*/, sdk.UPLOAD(
1955
1969
  // @ts-ignore
1956
1970
  presignedUpload, buff)];
1957
- case 8:
1971
+ case 9:
1958
1972
  _c.sent();
1959
1973
  return [4 /*yield*/, sdk.UPLOAD(
1960
1974
  // @ts-ignore
1961
1975
  presignedNonEnduser, buff)];
1962
- case 9:
1976
+ case 10:
1963
1977
  _c.sent();
1964
1978
  return [4 /*yield*/, sdk.UPLOAD(
1965
1979
  // @ts-ignore
1966
1980
  presigned2, buff)];
1967
- case 10:
1981
+ case 11:
1968
1982
  _c.sent();
1969
1983
  return [4 /*yield*/, (0, testing_1.async_test)("Files associated with enduser on prepare_file_upload", function () { return sdk.api.files.getSome({ filter: { enduserId: enduser.id } }); }, { onResult: function (fs) { return fs.length === 2; } })];
1970
- case 11:
1984
+ case 12:
1971
1985
  _c.sent();
1972
1986
  return [4 /*yield*/, sdk.api.files.file_download_URL({ secureName: file.secureName })];
1973
- case 12:
1987
+ case 13:
1974
1988
  downloadURL = (_c.sent()).downloadURL;
1975
1989
  return [4 /*yield*/, sdk.DOWNLOAD(downloadURL)];
1976
- case 13:
1990
+ case 14:
1977
1991
  downloaded = _c.sent();
1978
1992
  (0, testing_1.assert)(downloaded === buff.toString(), 'downloaded file does not match uploaded file', 'upload, download comparison');
1979
1993
  return [4 /*yield*/, sdk.api.files.file_download_URL({ secureName: file.secureName })];
1980
- case 14:
1994
+ case 15:
1981
1995
  cachedURL = (_c.sent()).downloadURL;
1982
1996
  (0, testing_1.assert)(downloadURL === cachedURL, 'cache download url failed', 'download url cache');
1983
1997
  return [4 /*yield*/, enduserSDK.api.files.file_download_URL({ secureName: file.secureName })];
1984
- case 15:
1998
+ case 16:
1985
1999
  urlForEnduser = (_c.sent()).downloadURL;
1986
2000
  (0, testing_1.assert)(downloadURL === urlForEnduser, 'failed to get download url for enduser', 'download url for enduser');
1987
2001
  return [4 /*yield*/, Promise.all([
1988
2002
  sdk.api.endusers.deleteOne(enduser.id),
1989
2003
  ])];
1990
- case 16:
2004
+ case 17:
1991
2005
  _c.sent();
1992
2006
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 2000)]; // wait for files to be deleted as side effect
1993
- case 17:
2007
+ case 18:
1994
2008
  _c.sent(); // wait for files to be deleted as side effect
1995
2009
  return [4 /*yield*/, (0, testing_1.async_test)("Files cleaned up as side effect of deleting enduser", function () { return sdk.api.files.getSome({ filter: { enduserId: enduser.id } }); }, { onResult: function (fs) { return fs.length === 0; } })];
1996
- case 18:
2010
+ case 19:
1997
2011
  _c.sent();
1998
2012
  return [4 /*yield*/, (0, testing_1.async_test)("Non-enduser file is left", function () { return sdk.api.files.getSome(); }, { onResult: function (fs) { return fs.length > 0; } })
1999
2013
  // cleanup other file
2000
2014
  ];
2001
- case 19:
2015
+ case 20:
2002
2016
  _c.sent();
2003
2017
  // cleanup other file
2004
2018
  return [4 /*yield*/, Promise.all([
2005
2019
  sdk.api.files.deleteOne(fileNonEnduser.id),
2006
2020
  ])];
2007
- case 20:
2021
+ case 21:
2008
2022
  // cleanup other file
2009
2023
  _c.sent();
2010
2024
  return [2 /*return*/];
@@ -2445,11 +2459,8 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2445
2459
  return [4 /*yield*/, sdk.api.endusers.updateOne(enduserWithTeam.id, { journeys: (_b = {}, _b[nullJourney.id] = 'Added (Null)', _b) })];
2446
2460
  case 16:
2447
2461
  _c.sent();
2448
- return [4 /*yield*/, (0, testing_1.wait)(undefined, 2250)]; // wait for tickets to be automatically created
2462
+ return [4 /*yield*/, (0, testing_1.async_test)("Tickets automatically created", function () { return pollForResults(sdk.api.tickets.getSome, function (tickets) { return (tickets === null || tickets === void 0 ? void 0 : tickets.length) === 2; }, 500, 15); }, passOnAnyResult)];
2449
2463
  case 17:
2450
- _c.sent(); // wait for tickets to be automatically created
2451
- return [4 /*yield*/, (0, testing_1.async_test)("Tickets automatically created", function () { return sdk.api.tickets.getSome(); }, { onResult: function (tickets) { return (tickets === null || tickets === void 0 ? void 0 : tickets.length) === 2; } })];
2452
- case 18:
2453
2464
  _c.sent();
2454
2465
  return [4 /*yield*/, (0, testing_1.async_test)("Ticket for enduser, default assignment, testCloseReasons", function () { return sdk.api.tickets.getSome({ filter: { enduserId: enduser.id } }); }, { onResult: function (tickets) {
2455
2466
  var _a;
@@ -2457,10 +2468,10 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2457
2468
  && ((_a = tickets[0].closeReasons) === null || _a === void 0 ? void 0 : _a.length) === 3
2458
2469
  && tickets[0].owner === sdk.userInfo.id);
2459
2470
  } })];
2460
- case 19:
2471
+ case 18:
2461
2472
  _c.sent();
2462
2473
  return [4 /*yield*/, sdk.api.tickets.getOne({ enduserId: enduser.id })];
2463
- case 20:
2474
+ case 19:
2464
2475
  ticket = _c.sent();
2465
2476
  return [4 /*yield*/, (0, testing_1.async_test)("Ticket for enduser, care team assignment, no reasons", function () { return sdk.api.tickets.getSome({ filter: { enduserId: enduserWithTeam.id } }); }, { onResult: function (tickets) {
2466
2477
  var _a;
@@ -2469,19 +2480,19 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2469
2480
  && tickets[0].owner === sdkNonAdmin.userInfo.id;
2470
2481
  }
2471
2482
  })];
2472
- case 21:
2483
+ case 20:
2473
2484
  _c.sent();
2474
2485
  return [4 /*yield*/, sdk.api.tickets.getOne({ enduserId: enduserWithTeam.id })];
2475
- case 22:
2486
+ case 21:
2476
2487
  ticketNull = _c.sent();
2477
2488
  return [4 /*yield*/, sdk.api.tickets.updateOne(ticket.id, { closedForReason: 'Maybe', closedAt: new Date() })];
2478
- case 23:
2489
+ case 22:
2479
2490
  _c.sent();
2480
2491
  return [4 /*yield*/, sdk.api.tickets.updateOne(ticketNull.id, { closedAt: new Date() })];
2481
- case 24:
2492
+ case 23:
2482
2493
  _c.sent();
2483
2494
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 250)]; // wait for actions to be automatically created
2484
- case 25:
2495
+ case 24:
2485
2496
  _c.sent(); // wait for actions to be automatically created
2486
2497
  return [4 /*yield*/, (0, testing_1.async_test)("Automated actions for handle ticket created", function () { return sdk.api.automated_actions.getSome(); }, { onResult: (function (actions) { return (actions === null || actions === void 0 ? void 0 : actions.length) === 4 // ticket creations + ticket completions = 2 + 2
2487
2498
  && (!!actions.find(function (a) {
@@ -2498,7 +2509,7 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2498
2509
  && a.action.info.status === 'Null';
2499
2510
  } // null branch when completed without closedForReason
2500
2511
  )); }) })];
2501
- case 26:
2512
+ case 25:
2502
2513
  _c.sent();
2503
2514
  return [4 /*yield*/, Promise.all([
2504
2515
  sdk.api.journeys.deleteOne(journey.id),
@@ -2508,7 +2519,7 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2508
2519
  sdk.api.tickets.deleteOne(ticket.id),
2509
2520
  sdk.api.tickets.deleteOne(ticketNull.id),
2510
2521
  ])];
2511
- case 27:
2522
+ case 26:
2512
2523
  _c.sent();
2513
2524
  return [2 /*return*/];
2514
2525
  }
@@ -2577,17 +2588,14 @@ var removeFromJourneyTests = function () { return __awaiter(void 0, void 0, void
2577
2588
  return [4 /*yield*/, (0, testing_1.async_test)("Next step not trigged early", function () { return sdk.api.endusers.getOne(enduser.id); }, { onResult: function (e) { var _a; return ((_a = e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) !== 'Delayed Step'; } })];
2578
2589
  case 10:
2579
2590
  _b.sent();
2580
- return [4 /*yield*/, (0, testing_1.wait)(undefined, 4 * TEST_DELAY)]; // wait long enough for automation to process and delay to pass
2591
+ return [4 /*yield*/, (0, testing_1.async_test)("Sequenced action triggered", function () { return pollForResults(function () { return sdk.api.endusers.getOne(enduser.id); }, function (e) { var _a; return ((_a = e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === 'Delayed Step'; }, TEST_DELAY, 15); }, passOnAnyResult)];
2581
2592
  case 11:
2582
- _b.sent(); // wait long enough for automation to process and delay to pass
2583
- return [4 /*yield*/, (0, testing_1.async_test)("Sequenced action triggered", function () { return sdk.api.endusers.getOne(enduser.id); }, { onResult: function (e) { var _a; return ((_a = e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === 'Delayed Step'; } })];
2584
- case 12:
2585
2593
  _b.sent();
2586
2594
  return [4 /*yield*/, Promise.all([
2587
2595
  sdk.api.journeys.deleteOne(journey.id),
2588
2596
  sdk.api.endusers.deleteOne(enduser.id),
2589
2597
  ])];
2590
- case 13:
2598
+ case 12:
2591
2599
  _b.sent();
2592
2600
  return [2 /*return*/];
2593
2601
  }
@@ -2818,14 +2826,11 @@ var formUnsubmittedCancelConditionTest = function () { return __awaiter(void 0,
2818
2826
  case 10:
2819
2827
  accessCode = (_a.sent()).accessCode;
2820
2828
  // allow fast followup to trigger
2821
- return [4 /*yield*/, (0, testing_1.wait)(undefined, 4000)]; // allow background creation with generous pause
2822
- case 11:
2823
- // allow fast followup to trigger
2824
- _a.sent(); // allow background creation with generous pause
2825
- return [4 /*yield*/, (0, testing_1.async_test)("formUnsubmitted event with short delay is triggered", function () { return sdk.api.endusers.getOne(enduser.id); }, { onResult: function (e) { var _a; return ((_a = e === null || e === void 0 ? void 0 : e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === 'triggered again'; } })
2829
+ return [4 /*yield*/, (0, testing_1.async_test)("formUnsubmitted event with short delay is triggered", function () { return pollForResults(function () { return sdk.api.endusers.getOne(enduser.id); }, function (e) { var _a; return ((_a = e === null || e === void 0 ? void 0 : e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === 'triggered again'; }, 1000, 10); }, passOnAnyResult)
2826
2830
  // trigger cancel conditions
2827
2831
  ];
2828
- case 12:
2832
+ case 11:
2833
+ // allow fast followup to trigger
2829
2834
  _a.sent();
2830
2835
  // trigger cancel conditions
2831
2836
  return [4 /*yield*/, sdk.api.form_responses.submit_form_response({ accessCode: accessCode, automationStepId: triggerStep.id, responses: [{
@@ -2836,11 +2841,11 @@ var formUnsubmittedCancelConditionTest = function () { return __awaiter(void 0,
2836
2841
  fieldId: field.id,
2837
2842
  fieldTitle: field.title,
2838
2843
  }] })];
2839
- case 13:
2844
+ case 12:
2840
2845
  // trigger cancel conditions
2841
2846
  _a.sent();
2842
2847
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 1500)]; // allow background creation with generous pause
2843
- case 14:
2848
+ case 13:
2844
2849
  _a.sent(); // allow background creation with generous pause
2845
2850
  return [4 /*yield*/, (0, testing_1.async_test)("Cancel conditions work for followup", function () { return sdk.api.automated_actions.getSome(); }, { onResult: function (as) {
2846
2851
  var _a, _b;
@@ -2850,14 +2855,14 @@ var formUnsubmittedCancelConditionTest = function () { return __awaiter(void 0,
2850
2855
  && as.filter(function (a) { return a.status === 'cancelled'; }).length === 2;
2851
2856
  }
2852
2857
  })];
2853
- case 15:
2858
+ case 14:
2854
2859
  _a.sent();
2855
2860
  return [4 /*yield*/, Promise.all([
2856
2861
  sdk.api.forms.deleteOne(form.id),
2857
2862
  sdk.api.journeys.deleteOne(journey.id),
2858
2863
  sdk.api.endusers.deleteOne(enduser.id)
2859
2864
  ])];
2860
- case 16:
2865
+ case 15:
2861
2866
  _a.sent();
2862
2867
  return [2 /*return*/];
2863
2868
  }
@@ -3037,7 +3042,7 @@ var formsUnsubmittedCancelConditionTest = function () { return __awaiter(void 0,
3037
3042
  } })];
3038
3043
  case 19:
3039
3044
  _a.sent();
3040
- return [4 /*yield*/, (0, testing_1.async_test)("formResponses triggered after both forms submitted", function () { return sdk.api.endusers.getOne(enduser.id); }, { onResult: function (e) { var _a; return ((_a = e === null || e === void 0 ? void 0 : e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === 'formsSubmitted'; } })];
3045
+ return [4 /*yield*/, (0, testing_1.async_test)("formResponses triggered after both forms submitted", function () { return pollForResults(function () { return sdk.api.endusers.getOne(enduser.id); }, function (e) { var _a; return ((_a = e === null || e === void 0 ? void 0 : e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === 'formsSubmitted'; }, 500, 10); }, passOnAnyResult)];
3041
3046
  case 20:
3042
3047
  _a.sent();
3043
3048
  return [4 /*yield*/, Promise.all([
@@ -3138,20 +3143,13 @@ var formsUnsubmittedTest = function () { return __awaiter(void 0, void 0, void 0
3138
3143
  case 8:
3139
3144
  // triggers formsUnsubmitted automated actions to be created when forms generated in templated message
3140
3145
  _a.sent();
3141
- return [4 /*yield*/, sdk.api.form_responses.getSome()
3142
- // allow fast followup to trigger
3143
- ];
3146
+ return [4 /*yield*/, sdk.api.form_responses.getSome()];
3144
3147
  case 9:
3145
3148
  form_responses = _a.sent();
3146
- // allow fast followup to trigger
3147
- return [4 /*yield*/, (0, testing_1.wait)(undefined, 5000)]; // allow background creation with generous pause
3148
- case 10:
3149
- // allow fast followup to trigger
3150
- _a.sent(); // allow background creation with generous pause
3151
- return [4 /*yield*/, (0, testing_1.async_test)("formsUnsubmitted handler worked", function () { return sdk.api.endusers.getOne(enduser.id); }, { onResult: function (e) { var _a; return ((_a = e === null || e === void 0 ? void 0 : e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === 'triggered'; } })
3149
+ return [4 /*yield*/, (0, testing_1.async_test)("formsUnsubmitted handler worked", function () { return pollForResults(function () { return sdk.api.endusers.getOne(enduser.id); }, function (e) { var _a; return ((_a = e === null || e === void 0 ? void 0 : e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === 'triggered'; }, 1000, 10); }, passOnAnyResult)
3152
3150
  // trigger cancel conditions
3153
3151
  ];
3154
- case 11:
3152
+ case 10:
3155
3153
  _a.sent();
3156
3154
  // trigger cancel conditions
3157
3155
  return [4 /*yield*/, sdk.api.form_responses.submit_form_response({ accessCode: form_responses[0].accessCode, automationStepId: triggerStep.id, responses: [{
@@ -3162,14 +3160,14 @@ var formsUnsubmittedTest = function () { return __awaiter(void 0, void 0, void 0
3162
3160
  fieldId: field.id,
3163
3161
  fieldTitle: field.title,
3164
3162
  }] })];
3165
- case 12:
3163
+ case 11:
3166
3164
  // trigger cancel conditions
3167
3165
  _a.sent();
3168
3166
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 5000)]; // allow background creation with generous pause
3169
- case 13:
3167
+ case 12:
3170
3168
  _a.sent(); // allow background creation with generous pause
3171
3169
  return [4 /*yield*/, (0, testing_1.async_test)("formResponses not triggered yet after 1 form remaining", function () { return sdk.api.endusers.getOne(enduser.id); }, { onResult: function (e) { var _a; return ((_a = e === null || e === void 0 ? void 0 : e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) !== 'formsSubmitted'; } })];
3172
- case 14:
3170
+ case 13:
3173
3171
  _a.sent();
3174
3172
  return [4 /*yield*/, sdk.api.form_responses.submit_form_response({ accessCode: form_responses[1].accessCode, automationStepId: triggerStep.id, responses: [{
3175
3173
  answer: {
@@ -3179,20 +3177,20 @@ var formsUnsubmittedTest = function () { return __awaiter(void 0, void 0, void 0
3179
3177
  fieldId: field.id,
3180
3178
  fieldTitle: field.title,
3181
3179
  }] })];
3182
- case 15:
3180
+ case 14:
3183
3181
  _a.sent();
3184
3182
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 5000)]; // allow background creation with generous pause
3185
- case 16:
3183
+ case 15:
3186
3184
  _a.sent(); // allow background creation with generous pause
3187
3185
  return [4 /*yield*/, (0, testing_1.async_test)("formResponses triggered after both forms submitted", function () { return sdk.api.endusers.getOne(enduser.id); }, { onResult: function (e) { var _a; return ((_a = e === null || e === void 0 ? void 0 : e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === 'formsSubmitted'; } })];
3188
- case 17:
3186
+ case 16:
3189
3187
  _a.sent();
3190
3188
  return [4 /*yield*/, Promise.all([
3191
3189
  sdk.api.forms.deleteOne(form.id),
3192
3190
  sdk.api.journeys.deleteOne(journey.id),
3193
3191
  sdk.api.endusers.deleteOne(enduser.id)
3194
3192
  ])];
3195
- case 18:
3193
+ case 17:
3196
3194
  _a.sent();
3197
3195
  return [2 /*return*/];
3198
3196
  }
@@ -3401,33 +3399,35 @@ var addToJourneyTests = function () { return __awaiter(void 0, void 0, void 0, f
3401
3399
  case 5:
3402
3400
  // add to journey and re-add
3403
3401
  _a.sent();
3404
- return [4 /*yield*/, (0, testing_1.async_test)("Journey state correctly set by add_to_journey (to default state)", function () { return sdk.api.endusers.getOne(enduser.id); }, { onResult: function (e) { var _a, _b; return ((_a = e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === '' || ((_b = e.journeys) === null || _b === void 0 ? void 0 : _b[journey.id]) === 'Root'; } })];
3402
+ return [4 /*yield*/, (0, testing_1.async_test)("Journey state correctly set by add_to_journey (to default state)", function () { return sdk.api.endusers.getOne(enduser.id); }, { onResult: function (e) { var _a, _b; return ((_a = e.journeys) === null || _a === void 0 ? void 0 : _a[journey.id]) === '' || ((_b = e.journeys) === null || _b === void 0 ? void 0 : _b[journey.id]) === 'Root'; } })
3403
+ // ensure that second step is generated before first is cancelled
3404
+ ];
3405
3405
  case 6:
3406
3406
  _a.sent();
3407
- return [4 /*yield*/, (0, testing_1.wait)(undefined, 4000)]; // allow onJourneyStart step to trigger
3407
+ // ensure that second step is generated before first is cancelled
3408
+ return [4 /*yield*/, pollForResults(sdk.api.automated_actions.getSome, function (es) { return es.length === 2; }, 100, 50)];
3408
3409
  case 7:
3409
- _a.sent(); // allow onJourneyStart step to trigger
3410
+ // ensure that second step is generated before first is cancelled
3411
+ _a.sent();
3410
3412
  return [4 /*yield*/, sdk.api.endusers.add_to_journey({ enduserIds: [enduser.id], journeyId: journey.id })];
3411
3413
  case 8:
3414
+ // ensure that second step is generated before first is cancelled
3412
3415
  _a.sent();
3413
- return [4 /*yield*/, (0, testing_1.async_test)("Enduser throttle journey add working", function () { return sdk.api.endusers.add_to_journey({ enduserIds: [enduser.id], journeyId: journey.id, throttle: true }); }, handleAnyError)];
3416
+ return [4 /*yield*/, (0, testing_1.async_test)("Enduser correctly added and re-added", function () { return pollForResults(sdk.api.automated_actions.getSome, function (es) { return (es.length === 4
3417
+ && es.filter(function (e) { return e.status === 'cancelled' && e.automationStepId === follow.id; }).length === 1 // one afterAction is cancelled
3418
+ && es.filter(function (e) { return e.status === 'active' && e.automationStepId === follow.id; }).length === 1 // one afterAction is still active
3419
+ && es.filter(function (e) { return e.status === 'finished' && e.automationStepId === root.id; }).length === 2 // two initial onJourneyStart
3420
+ ); }, 250, 40); }, passOnAnyResult)];
3414
3421
  case 9:
3415
3422
  _a.sent();
3416
- return [4 /*yield*/, (0, testing_1.wait)(undefined, 4000)]; // allow onJourneyStart step to trigger
3423
+ return [4 /*yield*/, (0, testing_1.async_test)("Enduser throttle journey add working", function () { return sdk.api.endusers.add_to_journey({ enduserIds: [enduser.id], journeyId: journey.id, throttle: true }); }, handleAnyError)];
3417
3424
  case 10:
3418
- _a.sent(); // allow onJourneyStart step to trigger
3419
- return [4 /*yield*/, (0, testing_1.async_test)("Enduser correctly added and re-added", function () { return sdk.api.automated_actions.getSome(); }, { onResult: function (es) { return es.length === 4
3420
- && es.filter(function (e) { return e.status === 'cancelled' && e.automationStepId === follow.id; }).length === 1 // one afterAction is cancelled
3421
- && es.filter(function (e) { return e.status === 'active' && e.automationStepId === follow.id; }).length === 1 // one afterAction is still active
3422
- && es.filter(function (e) { return e.status === 'finished' && e.automationStepId === root.id; }).length === 2; } // two initial onJourneyStart
3423
- })];
3424
- case 11:
3425
3425
  _a.sent();
3426
3426
  return [4 /*yield*/, Promise.all([
3427
3427
  sdk.api.journeys.deleteOne(journey.id),
3428
3428
  sdk.api.endusers.deleteOne(enduser.id),
3429
3429
  ])];
3430
- case 12:
3430
+ case 11:
3431
3431
  _a.sent();
3432
3432
  return [2 /*return*/];
3433
3433
  }
@@ -5083,7 +5083,7 @@ var self_serve_appointment_booking_tests = function () { return __awaiter(void 0
5083
5083
  }); };
5084
5084
  exports.self_serve_appointment_booking_tests = self_serve_appointment_booking_tests;
5085
5085
  var role_based_access_permissions_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
5086
- var noEnduserAccessRole, rbap;
5086
+ var noEnduserAccessRole, rbap, sdkNonAdminId;
5087
5087
  return __generator(this, function (_a) {
5088
5088
  switch (_a.label) {
5089
5089
  case 0:
@@ -5102,7 +5102,8 @@ var role_based_access_permissions_tests = function () { return __awaiter(void 0,
5102
5102
  })];
5103
5103
  case 1:
5104
5104
  rbap = _a.sent();
5105
- return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [noEnduserAccessRole] }, { replaceObjectFields: true })];
5105
+ sdkNonAdminId = sdkNonAdmin.userInfo.id;
5106
+ return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdminId, { roles: [noEnduserAccessRole] }, { replaceObjectFields: true })];
5106
5107
  case 2:
5107
5108
  _a.sent();
5108
5109
  return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)]; // to use new role, handle logout on role change
@@ -5139,15 +5140,15 @@ var role_based_access_permissions_tests = function () { return __awaiter(void 0,
5139
5140
  case 9:
5140
5141
  _a.sent();
5141
5142
  // cleanup
5142
- return [4 /*yield*/, Promise.all([
5143
- sdk.api.role_based_access_permissions.deleteOne(rbap.id),
5144
- sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: ['Non-Admin'] }, { replaceObjectFields: true }),
5145
- ])];
5143
+ return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbap.id)];
5146
5144
  case 10:
5147
5145
  // cleanup
5148
5146
  _a.sent();
5149
- return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)]; // to use new role, handle logout on role change
5147
+ return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdminId, { roles: ['Non-Admin'] }, { replaceObjectFields: true })];
5150
5148
  case 11:
5149
+ _a.sent();
5150
+ return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)]; // to use new role, handle logout on role change
5151
+ case 12:
5151
5152
  _a.sent(); // to use new role, handle logout on role change
5152
5153
  return [2 /*return*/];
5153
5154
  }
@@ -5191,29 +5192,26 @@ var run_autoreply_test = function (title, _a) {
5191
5192
  return [4 /*yield*/, enduserSDK.api.chats.createOne({ roomId: room.id, message: 'enduser' })];
5192
5193
  case 8:
5193
5194
  _b.sent();
5194
- return [4 /*yield*/, (0, testing_1.wait)(undefined, 50)];
5195
+ return [4 /*yield*/, (0, testing_1.async_test)('Main test', function () { return pollForResults(function () { return sdk.api.chats.getSome({ filter: { roomId: room.id } }); }, function (cs) { return (expectingAutoreply
5196
+ ? cs.length === 3
5197
+ : cs.length === 2); }, 25, 10); }, passOnAnyResult)];
5195
5198
  case 9:
5196
- _b.sent();
5197
- return [4 /*yield*/, (0, testing_1.async_test)('Main test', function () { return sdk.api.chats.getSome({ filter: { roomId: room.id } }); }, { onResult: function (cs) { return (expectingAutoreply
5198
- ? cs.length === 3
5199
- : cs.length === 2); } })];
5200
- case 10:
5201
5199
  _b.sent();
5202
5200
  return [4 /*yield*/, enduserSDK.api.chats.createOne({ roomId: room.id, message: 'enduser again' })];
5203
- case 11:
5201
+ case 10:
5204
5202
  _b.sent();
5205
5203
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 50)];
5206
- case 12:
5204
+ case 11:
5207
5205
  _b.sent();
5208
5206
  return [4 /*yield*/, (0, testing_1.async_test)("Duplicate autoreply avoided", function () { return sdk.api.chats.getSome({ filter: { roomId: room.id } }); }, { onResult: function (cs) { return (expectingAutoreply
5209
5207
  ? cs.length === 4
5210
5208
  : cs.length === 3); } })
5211
5209
  // cleanup, including any availability blocks
5212
5210
  ];
5213
- case 13:
5211
+ case 12:
5214
5212
  _b.sent();
5215
5213
  return [4 /*yield*/, sdk.api.availability_blocks.getSome()];
5216
- case 14:
5214
+ case 13:
5217
5215
  blocks = _b.sent();
5218
5216
  return [4 /*yield*/, Promise.all(__spreadArray([
5219
5217
  sdk.api.endusers.deleteOne(enduser.id),
@@ -5225,7 +5223,7 @@ var run_autoreply_test = function (title, _a) {
5225
5223
  replaceObjectFields: true
5226
5224
  })
5227
5225
  ], blocks.map(function (b) { return (sdk.api.availability_blocks.deleteOne(b.id)); }), true))];
5228
- case 15:
5226
+ case 14:
5229
5227
  _b.sent();
5230
5228
  return [2 /*return*/];
5231
5229
  }
@@ -5548,14 +5546,11 @@ var wait_for_trigger_tests = function () { return __awaiter(void 0, void 0, void
5548
5546
  // cleanup
5549
5547
  _b.sent();
5550
5548
  // test trigger cleaned up on journey delete
5551
- return [4 /*yield*/, (0, testing_1.wait)(undefined, 150)];
5552
- case 15:
5553
- // test trigger cleaned up on journey delete
5554
- _b.sent();
5555
- return [4 /*yield*/, (0, testing_1.async_test)("Trigger did not fire while not journey", function () { return sdk.api.automation_triggers.getOne(trigger.id); }, handleAnyError)
5549
+ return [4 /*yield*/, (0, testing_1.async_test)("Trigger cleaned up by journey deletion", function () { return pollForResults(sdk.api.automation_triggers.getSome, function (results) { return !results.find(function (r) { return r.id === trigger.id; }); }, 100, 10); }, passOnAnyResult)
5556
5550
  // double-check that wait for trigger step triggers were deleted
5557
5551
  ];
5558
- case 16:
5552
+ case 15:
5553
+ // test trigger cleaned up on journey delete
5559
5554
  _b.sent();
5560
5555
  return [2 /*return*/];
5561
5556
  }
@@ -5726,41 +5721,37 @@ var remove_from_journey_on_incoming_comms_tests = function () { return __awaiter
5726
5721
  return [4 /*yield*/, sdk.api.chats.createOne({ roomId: room.id, senderId: e1.id, message: 'cancel' })];
5727
5722
  case 11:
5728
5723
  _e.sent();
5729
- return [4 /*yield*/, (0, testing_1.wait)(undefined, 100)];
5730
- case 12:
5731
- _e.sent();
5732
- console.log(jRemove.id, removeStep2.id, e1.id);
5733
- return [4 /*yield*/, (0, testing_1.async_test)("Appropriate Automated Actions are cancelled on incoming message", function () { return sdk.api.automated_actions.getSome(); }, { onResult: function (actions) { return (!!actions.find(function (a) {
5724
+ return [4 /*yield*/, (0, testing_1.async_test)("Appropriate Automated Actions are cancelled on incoming message", function () { return pollForResults(sdk.api.automated_actions.getSome, function (actions) { return (!!actions.find(function (a) {
5725
+ return a.journeyId === jRemove.id
5726
+ && a.automationStepId === removeStep1.id
5727
+ && a.enduserId === e1.id
5728
+ && a.status === 'cancelled';
5729
+ })
5730
+ && !!actions.find(function (a) {
5734
5731
  return a.journeyId === jRemove.id
5735
5732
  && a.automationStepId === removeStep1.id
5733
+ && a.enduserId === e2.id
5734
+ && a.status === 'active';
5735
+ })
5736
+ && !!actions.find(function (a) {
5737
+ return a.journeyId === jDontRemove.id
5738
+ && a.automationStepId === dontRemoveStep1.id
5736
5739
  && a.enduserId === e1.id
5737
- && a.status === 'cancelled';
5740
+ && a.status === 'active';
5738
5741
  })
5739
- && !!actions.find(function (a) {
5740
- return a.journeyId === jRemove.id
5741
- && a.automationStepId === removeStep1.id
5742
- && a.enduserId === e2.id
5743
- && a.status === 'active';
5744
- })
5745
- && !!actions.find(function (a) {
5746
- return a.journeyId === jDontRemove.id
5747
- && a.automationStepId === dontRemoveStep1.id
5748
- && a.enduserId === e1.id
5749
- && a.status === 'active';
5750
- })
5751
- && !!actions.find(function (a) {
5752
- return a.journeyId === jDontRemove.id
5753
- && a.automationStepId === dontRemoveStep1.id
5754
- && a.enduserId === e2.id
5755
- && a.status === 'active';
5756
- })); } })];
5757
- case 13:
5742
+ && !!actions.find(function (a) {
5743
+ return a.journeyId === jDontRemove.id
5744
+ && a.automationStepId === dontRemoveStep1.id
5745
+ && a.enduserId === e2.id
5746
+ && a.status === 'active';
5747
+ })); }, 100, 50); }, passOnAnyResult)];
5748
+ case 12:
5758
5749
  _e.sent();
5759
5750
  return [4 /*yield*/, sdk.api.journeys.handle_incoming_communication({ enduserId: e2.id })];
5760
- case 14:
5751
+ case 13:
5761
5752
  _e.sent();
5762
5753
  return [4 /*yield*/, (0, testing_1.wait)(undefined, 250)];
5763
- case 15:
5754
+ case 14:
5764
5755
  _e.sent();
5765
5756
  return [4 /*yield*/, (0, testing_1.async_test)("handle_incoming_communication test for other enduser", function () { return sdk.api.automated_actions.getSome(); }, { onResult: function (actions) { return (!!actions.find(function (a) {
5766
5757
  return a.journeyId === jRemove.id
@@ -5768,7 +5759,7 @@ var remove_from_journey_on_incoming_comms_tests = function () { return __awaiter
5768
5759
  && a.enduserId === e2.id
5769
5760
  && a.status === 'cancelled';
5770
5761
  })); } })];
5771
- case 16:
5762
+ case 15:
5772
5763
  _e.sent();
5773
5764
  return [4 /*yield*/, Promise.all([
5774
5765
  sdk.api.endusers.deleteOne(e1.id),
@@ -5777,7 +5768,7 @@ var remove_from_journey_on_incoming_comms_tests = function () { return __awaiter
5777
5768
  sdk.api.journeys.deleteOne(jDontRemove.id),
5778
5769
  sdk.api.chat_rooms.deleteOne(room.id),
5779
5770
  ])];
5780
- case 17:
5771
+ case 16:
5781
5772
  _e.sent();
5782
5773
  return [2 /*return*/];
5783
5774
  }
@@ -5787,9 +5778,11 @@ var pdf_generation = function () { return __awaiter(void 0, void 0, void 0, func
5787
5778
  var e, responses, i, fr;
5788
5779
  return __generator(this, function (_a) {
5789
5780
  switch (_a.label) {
5790
- case 0: return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'test' })
5791
- // include lots of answers to ensure PDF height doesn't produce any cut-off
5792
- ];
5781
+ case 0:
5782
+ (0, testing_1.log_header)("pdf_generation Tests");
5783
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'test' })
5784
+ // include lots of answers to ensure PDF height doesn't produce any cut-off
5785
+ ];
5793
5786
  case 1:
5794
5787
  e = _a.sent();
5795
5788
  responses = [];
@@ -5818,7 +5811,6 @@ var pdf_generation = function () { return __awaiter(void 0, void 0, void 0, func
5818
5811
  .then(function (d) { return (fs_1.default.writeFileSync('test_generated.pdf', d.data)); });
5819
5812
  return [4 /*yield*/, Promise.all([
5820
5813
  sdk.api.endusers.deleteOne(e.id),
5821
- sdk.api.form_responses.deleteOne(fr.id),
5822
5814
  ])];
5823
5815
  case 3:
5824
5816
  _a.sent();
@@ -6045,10 +6037,11 @@ var pollForResults = function (f, evaluate, intervalInMS, iterations) {
6045
6037
  if (intervalInMS === void 0) { intervalInMS = 500; }
6046
6038
  if (iterations === void 0) { iterations = 20; }
6047
6039
  return __awaiter(void 0, void 0, void 0, function () {
6048
- var i, result;
6040
+ var lastResult, i, result;
6049
6041
  return __generator(this, function (_a) {
6050
6042
  switch (_a.label) {
6051
6043
  case 0:
6044
+ lastResult = undefined;
6052
6045
  i = 0;
6053
6046
  _a.label = 1;
6054
6047
  case 1:
@@ -6059,13 +6052,16 @@ var pollForResults = function (f, evaluate, intervalInMS, iterations) {
6059
6052
  return [4 /*yield*/, f()];
6060
6053
  case 3:
6061
6054
  result = _a.sent();
6055
+ lastResult = result;
6062
6056
  if (evaluate(result))
6063
6057
  return [2 /*return*/, result];
6064
6058
  _a.label = 4;
6065
6059
  case 4:
6066
6060
  i++;
6067
6061
  return [3 /*break*/, 1];
6068
- case 5: throw new Error("failed pollForResults");
6062
+ case 5:
6063
+ console.log(lastResult);
6064
+ throw new Error("failed pollForResults");
6069
6065
  }
6070
6066
  });
6071
6067
  });