@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.
@@ -842,7 +842,9 @@ var run_generated_tests = function (_a) {
842
842
  || name === 'analytics_frames'
843
843
  || name === 'superbills'
844
844
  || name === 'referral_providers'
845
- || name === 'webhooks')
845
+ || name === 'webhooks'
846
+ || name === 'automated_actions' // might process in background and cause false failure
847
+ )
846
848
  return [2 /*return*/];
847
849
  if (!!defaultEnduser) return [3 /*break*/, 2];
848
850
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'default@tellescope.com', phone: "5555555555" })];
@@ -877,18 +879,24 @@ var run_generated_tests = function (_a) {
877
879
  case 5: return [4 /*yield*/, 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); } })];
878
880
  case 6:
879
881
  _c.sent();
880
- return [4 /*yield*/, 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; } })];
882
+ return [4 /*yield*/, wait(undefined, 25)];
881
883
  case 7:
882
884
  _c.sent();
883
- if (!model.defaultActions.update) return [3 /*break*/, 10];
884
- return [4 /*yield*/, async_test("update-".concat(singularName), function () { return queries.updateOne(_id, updates, { replaceObjectFields: true }); }, { onResult: function (u) { return typeof u === 'object' && u.id === _id; } })];
885
+ return [4 /*yield*/, 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; } })];
885
886
  case 8:
886
887
  _c.sent();
887
- return [4 /*yield*/, 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; } })];
888
+ if (!model.defaultActions.update) return [3 /*break*/, 12];
889
+ return [4 /*yield*/, async_test("update-".concat(singularName), function () { return queries.updateOne(_id, updates, { replaceObjectFields: true }); }, { onResult: function (u) { return typeof u === 'object' && u.id === _id; } })];
888
890
  case 9:
889
891
  _c.sent();
890
- _c.label = 10;
891
- case 10: return [4 /*yield*/, async_test("get-".concat(singularName), function () { return queries.getOne(_id); }, { onResult: function (d) {
892
+ return [4 /*yield*/, wait(undefined, 25)];
893
+ case 10:
894
+ _c.sent();
895
+ return [4 /*yield*/, 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; } })];
896
+ case 11:
897
+ _c.sent();
898
+ _c.label = 12;
899
+ case 12: return [4 /*yield*/, async_test("get-".concat(singularName), function () { return queries.getOne(_id); }, { onResult: function (d) {
892
900
  if (!(d === null || d === void 0 ? void 0 : d.id))
893
901
  return false;
894
902
  for (var k in instance) {
@@ -899,7 +907,7 @@ var run_generated_tests = function (_a) {
899
907
  return true;
900
908
  }
901
909
  })];
902
- case 11:
910
+ case 13:
903
911
  _c.sent();
904
912
  return [4 /*yield*/, async_test("get-".concat(safeName), function () { return queries.getSome({ filter: filter }); }, { onResult: function (_a) {
905
913
  var d = _a[0];
@@ -914,27 +922,30 @@ var run_generated_tests = function (_a) {
914
922
  return true;
915
923
  }
916
924
  })];
917
- case 12:
925
+ case 14:
918
926
  _c.sent();
919
927
  return [4 /*yield*/, async_test("delete-".concat(singularName), function () { return queries.deleteOne(_id); }, passOnVoid)];
920
- case 13:
928
+ case 15:
929
+ _c.sent();
930
+ return [4 /*yield*/, wait(undefined, 25)];
931
+ case 16:
921
932
  _c.sent();
922
933
  return [4 /*yield*/, 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'; } })
923
934
  // lots of side effects
924
935
  ];
925
- case 14:
936
+ case 17:
926
937
  _c.sent();
927
- if (!(name === 'endusers')) return [3 /*break*/, 16];
938
+ if (!(name === 'endusers')) return [3 /*break*/, 19];
928
939
  return [4 /*yield*/, wait(undefined, 100)];
929
- case 15:
940
+ case 18:
930
941
  _c.sent();
931
- return [3 /*break*/, 18];
932
- case 16: return [4 /*yield*/, wait(undefined, 50)];
933
- case 17:
942
+ return [3 /*break*/, 21];
943
+ case 19: return [4 /*yield*/, wait(undefined, 50)];
944
+ case 20:
934
945
  _c.sent();
935
- _c.label = 18;
936
- case 18: return [4 /*yield*/, 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; } })];
937
- case 19:
946
+ _c.label = 21;
947
+ case 21: return [4 /*yield*/, 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; } })];
948
+ case 22:
938
949
  _c.sent();
939
950
  return [2 /*return*/];
940
951
  }
@@ -1898,21 +1909,24 @@ var files_tests = function () { return __awaiter(void 0, void 0, void 0, functio
1898
1909
  return [4 /*yield*/, enduserSDK.authenticate(email, password).catch(console.error)];
1899
1910
  case 3:
1900
1911
  _c.sent();
1912
+ return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)]; // to use new role, handle logout on role change
1913
+ case 4:
1914
+ _c.sent(); // to use new role, handle logout on role change
1901
1915
  buff = buffer.Buffer.from('test file data');
1902
1916
  return [4 /*yield*/, async_test("non admin can prepare file upload", function () { return sdkNonAdmin.api.files.prepare_file_upload({
1903
1917
  name: 'Test File', size: buff.byteLength, type: 'text/plain'
1904
1918
  }); }, { onResult: function (t) { return true; } })];
1905
- case 4:
1919
+ case 5:
1906
1920
  _c.sent();
1907
1921
  return [4 /*yield*/, sdk.api.files.prepare_file_upload({
1908
1922
  name: 'Test Private', size: buff.byteLength, type: 'text/plain', enduserId: enduser.id,
1909
1923
  })];
1910
- case 5:
1924
+ case 6:
1911
1925
  _a = _c.sent(), presignedUpload = _a.presignedUpload, file = _a.file;
1912
1926
  return [4 /*yield*/, sdk.api.files.prepare_file_upload({
1913
1927
  name: 'Test Private (no enduser)', size: buff.byteLength, type: 'text/plain',
1914
1928
  })];
1915
- case 6:
1929
+ case 7:
1916
1930
  _b = _c.sent(), presignedNonEnduser = _b.presignedUpload, fileNonEnduser = _b.file;
1917
1931
  return [4 /*yield*/, sdk.api.files.prepare_file_upload({
1918
1932
  name: 'Test Public', size: buff.byteLength, type: 'text/plain',
@@ -1920,62 +1934,62 @@ var files_tests = function () { return __awaiter(void 0, void 0, void 0, functio
1920
1934
  publicRead: true,
1921
1935
  publicName: 'public',
1922
1936
  })];
1923
- case 7:
1937
+ case 8:
1924
1938
  presigned2 = (_c.sent()).presignedUpload;
1925
1939
  return [4 /*yield*/, sdk.UPLOAD(
1926
1940
  // @ts-ignore
1927
1941
  presignedUpload, buff)];
1928
- case 8:
1942
+ case 9:
1929
1943
  _c.sent();
1930
1944
  return [4 /*yield*/, sdk.UPLOAD(
1931
1945
  // @ts-ignore
1932
1946
  presignedNonEnduser, buff)];
1933
- case 9:
1947
+ case 10:
1934
1948
  _c.sent();
1935
1949
  return [4 /*yield*/, sdk.UPLOAD(
1936
1950
  // @ts-ignore
1937
1951
  presigned2, buff)];
1938
- case 10:
1952
+ case 11:
1939
1953
  _c.sent();
1940
1954
  return [4 /*yield*/, 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; } })];
1941
- case 11:
1955
+ case 12:
1942
1956
  _c.sent();
1943
1957
  return [4 /*yield*/, sdk.api.files.file_download_URL({ secureName: file.secureName })];
1944
- case 12:
1958
+ case 13:
1945
1959
  downloadURL = (_c.sent()).downloadURL;
1946
1960
  return [4 /*yield*/, sdk.DOWNLOAD(downloadURL)];
1947
- case 13:
1961
+ case 14:
1948
1962
  downloaded = _c.sent();
1949
1963
  assert(downloaded === buff.toString(), 'downloaded file does not match uploaded file', 'upload, download comparison');
1950
1964
  return [4 /*yield*/, sdk.api.files.file_download_URL({ secureName: file.secureName })];
1951
- case 14:
1965
+ case 15:
1952
1966
  cachedURL = (_c.sent()).downloadURL;
1953
1967
  assert(downloadURL === cachedURL, 'cache download url failed', 'download url cache');
1954
1968
  return [4 /*yield*/, enduserSDK.api.files.file_download_URL({ secureName: file.secureName })];
1955
- case 15:
1969
+ case 16:
1956
1970
  urlForEnduser = (_c.sent()).downloadURL;
1957
1971
  assert(downloadURL === urlForEnduser, 'failed to get download url for enduser', 'download url for enduser');
1958
1972
  return [4 /*yield*/, Promise.all([
1959
1973
  sdk.api.endusers.deleteOne(enduser.id),
1960
1974
  ])];
1961
- case 16:
1975
+ case 17:
1962
1976
  _c.sent();
1963
1977
  return [4 /*yield*/, wait(undefined, 2000)]; // wait for files to be deleted as side effect
1964
- case 17:
1978
+ case 18:
1965
1979
  _c.sent(); // wait for files to be deleted as side effect
1966
1980
  return [4 /*yield*/, 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; } })];
1967
- case 18:
1981
+ case 19:
1968
1982
  _c.sent();
1969
1983
  return [4 /*yield*/, async_test("Non-enduser file is left", function () { return sdk.api.files.getSome(); }, { onResult: function (fs) { return fs.length > 0; } })
1970
1984
  // cleanup other file
1971
1985
  ];
1972
- case 19:
1986
+ case 20:
1973
1987
  _c.sent();
1974
1988
  // cleanup other file
1975
1989
  return [4 /*yield*/, Promise.all([
1976
1990
  sdk.api.files.deleteOne(fileNonEnduser.id),
1977
1991
  ])];
1978
- case 20:
1992
+ case 21:
1979
1993
  // cleanup other file
1980
1994
  _c.sent();
1981
1995
  return [2 /*return*/];
@@ -2416,11 +2430,8 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2416
2430
  return [4 /*yield*/, sdk.api.endusers.updateOne(enduserWithTeam.id, { journeys: (_b = {}, _b[nullJourney.id] = 'Added (Null)', _b) })];
2417
2431
  case 16:
2418
2432
  _c.sent();
2419
- return [4 /*yield*/, wait(undefined, 2250)]; // wait for tickets to be automatically created
2433
+ return [4 /*yield*/, 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)];
2420
2434
  case 17:
2421
- _c.sent(); // wait for tickets to be automatically created
2422
- return [4 /*yield*/, 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; } })];
2423
- case 18:
2424
2435
  _c.sent();
2425
2436
  return [4 /*yield*/, async_test("Ticket for enduser, default assignment, testCloseReasons", function () { return sdk.api.tickets.getSome({ filter: { enduserId: enduser.id } }); }, { onResult: function (tickets) {
2426
2437
  var _a;
@@ -2428,10 +2439,10 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2428
2439
  && ((_a = tickets[0].closeReasons) === null || _a === void 0 ? void 0 : _a.length) === 3
2429
2440
  && tickets[0].owner === sdk.userInfo.id);
2430
2441
  } })];
2431
- case 19:
2442
+ case 18:
2432
2443
  _c.sent();
2433
2444
  return [4 /*yield*/, sdk.api.tickets.getOne({ enduserId: enduser.id })];
2434
- case 20:
2445
+ case 19:
2435
2446
  ticket = _c.sent();
2436
2447
  return [4 /*yield*/, async_test("Ticket for enduser, care team assignment, no reasons", function () { return sdk.api.tickets.getSome({ filter: { enduserId: enduserWithTeam.id } }); }, { onResult: function (tickets) {
2437
2448
  var _a;
@@ -2440,19 +2451,19 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2440
2451
  && tickets[0].owner === sdkNonAdmin.userInfo.id;
2441
2452
  }
2442
2453
  })];
2443
- case 21:
2454
+ case 20:
2444
2455
  _c.sent();
2445
2456
  return [4 /*yield*/, sdk.api.tickets.getOne({ enduserId: enduserWithTeam.id })];
2446
- case 22:
2457
+ case 21:
2447
2458
  ticketNull = _c.sent();
2448
2459
  return [4 /*yield*/, sdk.api.tickets.updateOne(ticket.id, { closedForReason: 'Maybe', closedAt: new Date() })];
2449
- case 23:
2460
+ case 22:
2450
2461
  _c.sent();
2451
2462
  return [4 /*yield*/, sdk.api.tickets.updateOne(ticketNull.id, { closedAt: new Date() })];
2452
- case 24:
2463
+ case 23:
2453
2464
  _c.sent();
2454
2465
  return [4 /*yield*/, wait(undefined, 250)]; // wait for actions to be automatically created
2455
- case 25:
2466
+ case 24:
2456
2467
  _c.sent(); // wait for actions to be automatically created
2457
2468
  return [4 /*yield*/, 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
2458
2469
  && (!!actions.find(function (a) {
@@ -2469,7 +2480,7 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2469
2480
  && a.action.info.status === 'Null';
2470
2481
  } // null branch when completed without closedForReason
2471
2482
  )); }) })];
2472
- case 26:
2483
+ case 25:
2473
2484
  _c.sent();
2474
2485
  return [4 /*yield*/, Promise.all([
2475
2486
  sdk.api.journeys.deleteOne(journey.id),
@@ -2479,7 +2490,7 @@ var ticketEventTests = function () { return __awaiter(void 0, void 0, void 0, fu
2479
2490
  sdk.api.tickets.deleteOne(ticket.id),
2480
2491
  sdk.api.tickets.deleteOne(ticketNull.id),
2481
2492
  ])];
2482
- case 27:
2493
+ case 26:
2483
2494
  _c.sent();
2484
2495
  return [2 /*return*/];
2485
2496
  }
@@ -2548,17 +2559,14 @@ var removeFromJourneyTests = function () { return __awaiter(void 0, void 0, void
2548
2559
  return [4 /*yield*/, 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'; } })];
2549
2560
  case 10:
2550
2561
  _b.sent();
2551
- return [4 /*yield*/, wait(undefined, 4 * TEST_DELAY)]; // wait long enough for automation to process and delay to pass
2562
+ return [4 /*yield*/, 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)];
2552
2563
  case 11:
2553
- _b.sent(); // wait long enough for automation to process and delay to pass
2554
- return [4 /*yield*/, 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'; } })];
2555
- case 12:
2556
2564
  _b.sent();
2557
2565
  return [4 /*yield*/, Promise.all([
2558
2566
  sdk.api.journeys.deleteOne(journey.id),
2559
2567
  sdk.api.endusers.deleteOne(enduser.id),
2560
2568
  ])];
2561
- case 13:
2569
+ case 12:
2562
2570
  _b.sent();
2563
2571
  return [2 /*return*/];
2564
2572
  }
@@ -2789,14 +2797,11 @@ export var formUnsubmittedCancelConditionTest = function () { return __awaiter(v
2789
2797
  case 10:
2790
2798
  accessCode = (_a.sent()).accessCode;
2791
2799
  // allow fast followup to trigger
2792
- return [4 /*yield*/, wait(undefined, 4000)]; // allow background creation with generous pause
2793
- case 11:
2794
- // allow fast followup to trigger
2795
- _a.sent(); // allow background creation with generous pause
2796
- return [4 /*yield*/, 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'; } })
2800
+ return [4 /*yield*/, 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)
2797
2801
  // trigger cancel conditions
2798
2802
  ];
2799
- case 12:
2803
+ case 11:
2804
+ // allow fast followup to trigger
2800
2805
  _a.sent();
2801
2806
  // trigger cancel conditions
2802
2807
  return [4 /*yield*/, sdk.api.form_responses.submit_form_response({ accessCode: accessCode, automationStepId: triggerStep.id, responses: [{
@@ -2807,11 +2812,11 @@ export var formUnsubmittedCancelConditionTest = function () { return __awaiter(v
2807
2812
  fieldId: field.id,
2808
2813
  fieldTitle: field.title,
2809
2814
  }] })];
2810
- case 13:
2815
+ case 12:
2811
2816
  // trigger cancel conditions
2812
2817
  _a.sent();
2813
2818
  return [4 /*yield*/, wait(undefined, 1500)]; // allow background creation with generous pause
2814
- case 14:
2819
+ case 13:
2815
2820
  _a.sent(); // allow background creation with generous pause
2816
2821
  return [4 /*yield*/, async_test("Cancel conditions work for followup", function () { return sdk.api.automated_actions.getSome(); }, { onResult: function (as) {
2817
2822
  var _a, _b;
@@ -2821,14 +2826,14 @@ export var formUnsubmittedCancelConditionTest = function () { return __awaiter(v
2821
2826
  && as.filter(function (a) { return a.status === 'cancelled'; }).length === 2;
2822
2827
  }
2823
2828
  })];
2824
- case 15:
2829
+ case 14:
2825
2830
  _a.sent();
2826
2831
  return [4 /*yield*/, Promise.all([
2827
2832
  sdk.api.forms.deleteOne(form.id),
2828
2833
  sdk.api.journeys.deleteOne(journey.id),
2829
2834
  sdk.api.endusers.deleteOne(enduser.id)
2830
2835
  ])];
2831
- case 16:
2836
+ case 15:
2832
2837
  _a.sent();
2833
2838
  return [2 /*return*/];
2834
2839
  }
@@ -3007,7 +3012,7 @@ export var formsUnsubmittedCancelConditionTest = function () { return __awaiter(
3007
3012
  } })];
3008
3013
  case 19:
3009
3014
  _a.sent();
3010
- return [4 /*yield*/, 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'; } })];
3015
+ return [4 /*yield*/, 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)];
3011
3016
  case 20:
3012
3017
  _a.sent();
3013
3018
  return [4 /*yield*/, Promise.all([
@@ -3107,20 +3112,13 @@ export var formsUnsubmittedTest = function () { return __awaiter(void 0, void 0,
3107
3112
  case 8:
3108
3113
  // triggers formsUnsubmitted automated actions to be created when forms generated in templated message
3109
3114
  _a.sent();
3110
- return [4 /*yield*/, sdk.api.form_responses.getSome()
3111
- // allow fast followup to trigger
3112
- ];
3115
+ return [4 /*yield*/, sdk.api.form_responses.getSome()];
3113
3116
  case 9:
3114
3117
  form_responses = _a.sent();
3115
- // allow fast followup to trigger
3116
- return [4 /*yield*/, wait(undefined, 5000)]; // allow background creation with generous pause
3117
- case 10:
3118
- // allow fast followup to trigger
3119
- _a.sent(); // allow background creation with generous pause
3120
- return [4 /*yield*/, 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'; } })
3118
+ return [4 /*yield*/, 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)
3121
3119
  // trigger cancel conditions
3122
3120
  ];
3123
- case 11:
3121
+ case 10:
3124
3122
  _a.sent();
3125
3123
  // trigger cancel conditions
3126
3124
  return [4 /*yield*/, sdk.api.form_responses.submit_form_response({ accessCode: form_responses[0].accessCode, automationStepId: triggerStep.id, responses: [{
@@ -3131,14 +3129,14 @@ export var formsUnsubmittedTest = function () { return __awaiter(void 0, void 0,
3131
3129
  fieldId: field.id,
3132
3130
  fieldTitle: field.title,
3133
3131
  }] })];
3134
- case 12:
3132
+ case 11:
3135
3133
  // trigger cancel conditions
3136
3134
  _a.sent();
3137
3135
  return [4 /*yield*/, wait(undefined, 5000)]; // allow background creation with generous pause
3138
- case 13:
3136
+ case 12:
3139
3137
  _a.sent(); // allow background creation with generous pause
3140
3138
  return [4 /*yield*/, 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'; } })];
3141
- case 14:
3139
+ case 13:
3142
3140
  _a.sent();
3143
3141
  return [4 /*yield*/, sdk.api.form_responses.submit_form_response({ accessCode: form_responses[1].accessCode, automationStepId: triggerStep.id, responses: [{
3144
3142
  answer: {
@@ -3148,20 +3146,20 @@ export var formsUnsubmittedTest = function () { return __awaiter(void 0, void 0,
3148
3146
  fieldId: field.id,
3149
3147
  fieldTitle: field.title,
3150
3148
  }] })];
3151
- case 15:
3149
+ case 14:
3152
3150
  _a.sent();
3153
3151
  return [4 /*yield*/, wait(undefined, 5000)]; // allow background creation with generous pause
3154
- case 16:
3152
+ case 15:
3155
3153
  _a.sent(); // allow background creation with generous pause
3156
3154
  return [4 /*yield*/, 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'; } })];
3157
- case 17:
3155
+ case 16:
3158
3156
  _a.sent();
3159
3157
  return [4 /*yield*/, Promise.all([
3160
3158
  sdk.api.forms.deleteOne(form.id),
3161
3159
  sdk.api.journeys.deleteOne(journey.id),
3162
3160
  sdk.api.endusers.deleteOne(enduser.id)
3163
3161
  ])];
3164
- case 18:
3162
+ case 17:
3165
3163
  _a.sent();
3166
3164
  return [2 /*return*/];
3167
3165
  }
@@ -3367,33 +3365,35 @@ var addToJourneyTests = function () { return __awaiter(void 0, void 0, void 0, f
3367
3365
  case 5:
3368
3366
  // add to journey and re-add
3369
3367
  _a.sent();
3370
- return [4 /*yield*/, 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'; } })];
3368
+ return [4 /*yield*/, 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'; } })
3369
+ // ensure that second step is generated before first is cancelled
3370
+ ];
3371
3371
  case 6:
3372
3372
  _a.sent();
3373
- return [4 /*yield*/, wait(undefined, 4000)]; // allow onJourneyStart step to trigger
3373
+ // ensure that second step is generated before first is cancelled
3374
+ return [4 /*yield*/, pollForResults(sdk.api.automated_actions.getSome, function (es) { return es.length === 2; }, 100, 50)];
3374
3375
  case 7:
3375
- _a.sent(); // allow onJourneyStart step to trigger
3376
+ // ensure that second step is generated before first is cancelled
3377
+ _a.sent();
3376
3378
  return [4 /*yield*/, sdk.api.endusers.add_to_journey({ enduserIds: [enduser.id], journeyId: journey.id })];
3377
3379
  case 8:
3380
+ // ensure that second step is generated before first is cancelled
3378
3381
  _a.sent();
3379
- return [4 /*yield*/, async_test("Enduser throttle journey add working", function () { return sdk.api.endusers.add_to_journey({ enduserIds: [enduser.id], journeyId: journey.id, throttle: true }); }, handleAnyError)];
3382
+ return [4 /*yield*/, async_test("Enduser correctly added and re-added", function () { return pollForResults(sdk.api.automated_actions.getSome, function (es) { return (es.length === 4
3383
+ && es.filter(function (e) { return e.status === 'cancelled' && e.automationStepId === follow.id; }).length === 1 // one afterAction is cancelled
3384
+ && es.filter(function (e) { return e.status === 'active' && e.automationStepId === follow.id; }).length === 1 // one afterAction is still active
3385
+ && es.filter(function (e) { return e.status === 'finished' && e.automationStepId === root.id; }).length === 2 // two initial onJourneyStart
3386
+ ); }, 250, 40); }, passOnAnyResult)];
3380
3387
  case 9:
3381
3388
  _a.sent();
3382
- return [4 /*yield*/, wait(undefined, 4000)]; // allow onJourneyStart step to trigger
3389
+ return [4 /*yield*/, async_test("Enduser throttle journey add working", function () { return sdk.api.endusers.add_to_journey({ enduserIds: [enduser.id], journeyId: journey.id, throttle: true }); }, handleAnyError)];
3383
3390
  case 10:
3384
- _a.sent(); // allow onJourneyStart step to trigger
3385
- return [4 /*yield*/, async_test("Enduser correctly added and re-added", function () { return sdk.api.automated_actions.getSome(); }, { onResult: function (es) { return es.length === 4
3386
- && es.filter(function (e) { return e.status === 'cancelled' && e.automationStepId === follow.id; }).length === 1 // one afterAction is cancelled
3387
- && es.filter(function (e) { return e.status === 'active' && e.automationStepId === follow.id; }).length === 1 // one afterAction is still active
3388
- && es.filter(function (e) { return e.status === 'finished' && e.automationStepId === root.id; }).length === 2; } // two initial onJourneyStart
3389
- })];
3390
- case 11:
3391
3391
  _a.sent();
3392
3392
  return [4 /*yield*/, Promise.all([
3393
3393
  sdk.api.journeys.deleteOne(journey.id),
3394
3394
  sdk.api.endusers.deleteOne(enduser.id),
3395
3395
  ])];
3396
- case 12:
3396
+ case 11:
3397
3397
  _a.sent();
3398
3398
  return [2 /*return*/];
3399
3399
  }
@@ -5043,7 +5043,7 @@ export var self_serve_appointment_booking_tests = function () { return __awaiter
5043
5043
  });
5044
5044
  }); };
5045
5045
  export var role_based_access_permissions_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
5046
- var noEnduserAccessRole, rbap;
5046
+ var noEnduserAccessRole, rbap, sdkNonAdminId;
5047
5047
  return __generator(this, function (_a) {
5048
5048
  switch (_a.label) {
5049
5049
  case 0:
@@ -5062,7 +5062,8 @@ export var role_based_access_permissions_tests = function () { return __awaiter(
5062
5062
  })];
5063
5063
  case 1:
5064
5064
  rbap = _a.sent();
5065
- return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: [noEnduserAccessRole] }, { replaceObjectFields: true })];
5065
+ sdkNonAdminId = sdkNonAdmin.userInfo.id;
5066
+ return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdminId, { roles: [noEnduserAccessRole] }, { replaceObjectFields: true })];
5066
5067
  case 2:
5067
5068
  _a.sent();
5068
5069
  return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)]; // to use new role, handle logout on role change
@@ -5099,15 +5100,15 @@ export var role_based_access_permissions_tests = function () { return __awaiter(
5099
5100
  case 9:
5100
5101
  _a.sent();
5101
5102
  // cleanup
5102
- return [4 /*yield*/, Promise.all([
5103
- sdk.api.role_based_access_permissions.deleteOne(rbap.id),
5104
- sdk.api.users.updateOne(sdkNonAdmin.userInfo.id, { roles: ['Non-Admin'] }, { replaceObjectFields: true }),
5105
- ])];
5103
+ return [4 /*yield*/, sdk.api.role_based_access_permissions.deleteOne(rbap.id)];
5106
5104
  case 10:
5107
5105
  // cleanup
5108
5106
  _a.sent();
5109
- return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)]; // to use new role, handle logout on role change
5107
+ return [4 /*yield*/, sdk.api.users.updateOne(sdkNonAdminId, { roles: ['Non-Admin'] }, { replaceObjectFields: true })];
5110
5108
  case 11:
5109
+ _a.sent();
5110
+ return [4 /*yield*/, sdkNonAdmin.authenticate(nonAdminEmail, nonAdminPassword)]; // to use new role, handle logout on role change
5111
+ case 12:
5111
5112
  _a.sent(); // to use new role, handle logout on role change
5112
5113
  return [2 /*return*/];
5113
5114
  }
@@ -5150,29 +5151,26 @@ var run_autoreply_test = function (title, _a) {
5150
5151
  return [4 /*yield*/, enduserSDK.api.chats.createOne({ roomId: room.id, message: 'enduser' })];
5151
5152
  case 8:
5152
5153
  _b.sent();
5153
- return [4 /*yield*/, wait(undefined, 50)];
5154
+ return [4 /*yield*/, async_test('Main test', function () { return pollForResults(function () { return sdk.api.chats.getSome({ filter: { roomId: room.id } }); }, function (cs) { return (expectingAutoreply
5155
+ ? cs.length === 3
5156
+ : cs.length === 2); }, 25, 10); }, passOnAnyResult)];
5154
5157
  case 9:
5155
- _b.sent();
5156
- return [4 /*yield*/, async_test('Main test', function () { return sdk.api.chats.getSome({ filter: { roomId: room.id } }); }, { onResult: function (cs) { return (expectingAutoreply
5157
- ? cs.length === 3
5158
- : cs.length === 2); } })];
5159
- case 10:
5160
5158
  _b.sent();
5161
5159
  return [4 /*yield*/, enduserSDK.api.chats.createOne({ roomId: room.id, message: 'enduser again' })];
5162
- case 11:
5160
+ case 10:
5163
5161
  _b.sent();
5164
5162
  return [4 /*yield*/, wait(undefined, 50)];
5165
- case 12:
5163
+ case 11:
5166
5164
  _b.sent();
5167
5165
  return [4 /*yield*/, async_test("Duplicate autoreply avoided", function () { return sdk.api.chats.getSome({ filter: { roomId: room.id } }); }, { onResult: function (cs) { return (expectingAutoreply
5168
5166
  ? cs.length === 4
5169
5167
  : cs.length === 3); } })
5170
5168
  // cleanup, including any availability blocks
5171
5169
  ];
5172
- case 13:
5170
+ case 12:
5173
5171
  _b.sent();
5174
5172
  return [4 /*yield*/, sdk.api.availability_blocks.getSome()];
5175
- case 14:
5173
+ case 13:
5176
5174
  blocks = _b.sent();
5177
5175
  return [4 /*yield*/, Promise.all(__spreadArray([
5178
5176
  sdk.api.endusers.deleteOne(enduser.id),
@@ -5184,7 +5182,7 @@ var run_autoreply_test = function (title, _a) {
5184
5182
  replaceObjectFields: true
5185
5183
  })
5186
5184
  ], blocks.map(function (b) { return (sdk.api.availability_blocks.deleteOne(b.id)); }), true))];
5187
- case 15:
5185
+ case 14:
5188
5186
  _b.sent();
5189
5187
  return [2 /*return*/];
5190
5188
  }
@@ -5507,14 +5505,11 @@ var wait_for_trigger_tests = function () { return __awaiter(void 0, void 0, void
5507
5505
  // cleanup
5508
5506
  _b.sent();
5509
5507
  // test trigger cleaned up on journey delete
5510
- return [4 /*yield*/, wait(undefined, 150)];
5511
- case 15:
5512
- // test trigger cleaned up on journey delete
5513
- _b.sent();
5514
- return [4 /*yield*/, async_test("Trigger did not fire while not journey", function () { return sdk.api.automation_triggers.getOne(trigger.id); }, handleAnyError)
5508
+ return [4 /*yield*/, 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)
5515
5509
  // double-check that wait for trigger step triggers were deleted
5516
5510
  ];
5517
- case 16:
5511
+ case 15:
5512
+ // test trigger cleaned up on journey delete
5518
5513
  _b.sent();
5519
5514
  return [2 /*return*/];
5520
5515
  }
@@ -5685,41 +5680,37 @@ var remove_from_journey_on_incoming_comms_tests = function () { return __awaiter
5685
5680
  return [4 /*yield*/, sdk.api.chats.createOne({ roomId: room.id, senderId: e1.id, message: 'cancel' })];
5686
5681
  case 11:
5687
5682
  _e.sent();
5688
- return [4 /*yield*/, wait(undefined, 100)];
5689
- case 12:
5690
- _e.sent();
5691
- console.log(jRemove.id, removeStep2.id, e1.id);
5692
- return [4 /*yield*/, 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) {
5683
+ return [4 /*yield*/, 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) {
5684
+ return a.journeyId === jRemove.id
5685
+ && a.automationStepId === removeStep1.id
5686
+ && a.enduserId === e1.id
5687
+ && a.status === 'cancelled';
5688
+ })
5689
+ && !!actions.find(function (a) {
5693
5690
  return a.journeyId === jRemove.id
5694
5691
  && a.automationStepId === removeStep1.id
5692
+ && a.enduserId === e2.id
5693
+ && a.status === 'active';
5694
+ })
5695
+ && !!actions.find(function (a) {
5696
+ return a.journeyId === jDontRemove.id
5697
+ && a.automationStepId === dontRemoveStep1.id
5695
5698
  && a.enduserId === e1.id
5696
- && a.status === 'cancelled';
5699
+ && a.status === 'active';
5697
5700
  })
5698
- && !!actions.find(function (a) {
5699
- return a.journeyId === jRemove.id
5700
- && a.automationStepId === removeStep1.id
5701
- && a.enduserId === e2.id
5702
- && a.status === 'active';
5703
- })
5704
- && !!actions.find(function (a) {
5705
- return a.journeyId === jDontRemove.id
5706
- && a.automationStepId === dontRemoveStep1.id
5707
- && a.enduserId === e1.id
5708
- && a.status === 'active';
5709
- })
5710
- && !!actions.find(function (a) {
5711
- return a.journeyId === jDontRemove.id
5712
- && a.automationStepId === dontRemoveStep1.id
5713
- && a.enduserId === e2.id
5714
- && a.status === 'active';
5715
- })); } })];
5716
- case 13:
5701
+ && !!actions.find(function (a) {
5702
+ return a.journeyId === jDontRemove.id
5703
+ && a.automationStepId === dontRemoveStep1.id
5704
+ && a.enduserId === e2.id
5705
+ && a.status === 'active';
5706
+ })); }, 100, 50); }, passOnAnyResult)];
5707
+ case 12:
5717
5708
  _e.sent();
5718
5709
  return [4 /*yield*/, sdk.api.journeys.handle_incoming_communication({ enduserId: e2.id })];
5719
- case 14:
5710
+ case 13:
5720
5711
  _e.sent();
5721
5712
  return [4 /*yield*/, wait(undefined, 250)];
5722
- case 15:
5713
+ case 14:
5723
5714
  _e.sent();
5724
5715
  return [4 /*yield*/, async_test("handle_incoming_communication test for other enduser", function () { return sdk.api.automated_actions.getSome(); }, { onResult: function (actions) { return (!!actions.find(function (a) {
5725
5716
  return a.journeyId === jRemove.id
@@ -5727,7 +5718,7 @@ var remove_from_journey_on_incoming_comms_tests = function () { return __awaiter
5727
5718
  && a.enduserId === e2.id
5728
5719
  && a.status === 'cancelled';
5729
5720
  })); } })];
5730
- case 16:
5721
+ case 15:
5731
5722
  _e.sent();
5732
5723
  return [4 /*yield*/, Promise.all([
5733
5724
  sdk.api.endusers.deleteOne(e1.id),
@@ -5736,7 +5727,7 @@ var remove_from_journey_on_incoming_comms_tests = function () { return __awaiter
5736
5727
  sdk.api.journeys.deleteOne(jDontRemove.id),
5737
5728
  sdk.api.chat_rooms.deleteOne(room.id),
5738
5729
  ])];
5739
- case 17:
5730
+ case 16:
5740
5731
  _e.sent();
5741
5732
  return [2 /*return*/];
5742
5733
  }
@@ -5746,9 +5737,11 @@ var pdf_generation = function () { return __awaiter(void 0, void 0, void 0, func
5746
5737
  var e, responses, i, fr;
5747
5738
  return __generator(this, function (_a) {
5748
5739
  switch (_a.label) {
5749
- case 0: return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'test' })
5750
- // include lots of answers to ensure PDF height doesn't produce any cut-off
5751
- ];
5740
+ case 0:
5741
+ log_header("pdf_generation Tests");
5742
+ return [4 /*yield*/, sdk.api.endusers.createOne({ fname: 'test' })
5743
+ // include lots of answers to ensure PDF height doesn't produce any cut-off
5744
+ ];
5752
5745
  case 1:
5753
5746
  e = _a.sent();
5754
5747
  responses = [];
@@ -5777,7 +5770,6 @@ var pdf_generation = function () { return __awaiter(void 0, void 0, void 0, func
5777
5770
  .then(function (d) { return (fs.writeFileSync('test_generated.pdf', d.data)); });
5778
5771
  return [4 /*yield*/, Promise.all([
5779
5772
  sdk.api.endusers.deleteOne(e.id),
5780
- sdk.api.form_responses.deleteOne(fr.id),
5781
5773
  ])];
5782
5774
  case 3:
5783
5775
  _a.sent();
@@ -6004,10 +5996,11 @@ var pollForResults = function (f, evaluate, intervalInMS, iterations) {
6004
5996
  if (intervalInMS === void 0) { intervalInMS = 500; }
6005
5997
  if (iterations === void 0) { iterations = 20; }
6006
5998
  return __awaiter(void 0, void 0, void 0, function () {
6007
- var i, result;
5999
+ var lastResult, i, result;
6008
6000
  return __generator(this, function (_a) {
6009
6001
  switch (_a.label) {
6010
6002
  case 0:
6003
+ lastResult = undefined;
6011
6004
  i = 0;
6012
6005
  _a.label = 1;
6013
6006
  case 1:
@@ -6018,13 +6011,16 @@ var pollForResults = function (f, evaluate, intervalInMS, iterations) {
6018
6011
  return [4 /*yield*/, f()];
6019
6012
  case 3:
6020
6013
  result = _a.sent();
6014
+ lastResult = result;
6021
6015
  if (evaluate(result))
6022
6016
  return [2 /*return*/, result];
6023
6017
  _a.label = 4;
6024
6018
  case 4:
6025
6019
  i++;
6026
6020
  return [3 /*break*/, 1];
6027
- case 5: throw new Error("failed pollForResults");
6021
+ case 5:
6022
+ console.log(lastResult);
6023
+ throw new Error("failed pollForResults");
6028
6024
  }
6029
6025
  });
6030
6026
  });