@tellescope/sdk 0.0.53 → 0.0.56

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.
@@ -54,6 +54,7 @@ import { DEFAULT_OPERATIONS, PLACEHOLDER_ID } from "@tellescope/constants";
54
54
  import { schema, } from "@tellescope/schema";
55
55
  import { assert, async_test, log_header, wait, } from "@tellescope/testing";
56
56
  import { objects_equivalent, url_safe_path, } from "@tellescope/utilities";
57
+ var UniquenessViolationMessage = 'Uniqueness Violation';
57
58
  var host = process.env.TEST_URL || 'http://localhost:8080';
58
59
  var _a = [process.env.TEST_EMAIL, process.env.TEST_PASSWORD], email = _a[0], password = _a[1];
59
60
  var _b = [process.env.TEST_EMAIL_2, process.env.TEST_PASSWORD_2], email2 = _b[0], password2 = _b[1];
@@ -92,7 +93,9 @@ var setup_tests = function () { return __awaiter(void 0, void 0, void 0, functio
92
93
  var uInfo, originalAuthToken;
93
94
  return __generator(this, function (_a) {
94
95
  switch (_a.label) {
95
- case 0: return [4 /*yield*/, async_test('test_online', sdk.test_online, { expectedResult: 'API V1 Online' })];
96
+ case 0:
97
+ log_header("Setup");
98
+ return [4 /*yield*/, async_test('test_online', sdk.test_online, { expectedResult: 'API V1 Online' })];
96
99
  case 1:
97
100
  _a.sent();
98
101
  return [4 /*yield*/, async_test('test_authenticated', sdk.test_authenticated, { expectedResult: 'Authenticated!' })];
@@ -131,7 +134,9 @@ var multi_tenant_tests = function () { return __awaiter(void 0, void 0, void 0,
131
134
  var e2, e1, update;
132
135
  return __generator(this, function (_a) {
133
136
  switch (_a.label) {
134
- case 0: return [4 /*yield*/, sdkOther.api.endusers.createOne({ email: "hi@tellescope.com" }).catch(console.error)];
137
+ case 0:
138
+ log_header("Multi Tenant");
139
+ return [4 /*yield*/, sdkOther.api.endusers.createOne({ email: "hi@tellescope.com" }).catch(console.error)];
135
140
  case 1:
136
141
  e2 = _a.sent();
137
142
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: "hi@tellescope.com" }).catch(console.error)];
@@ -192,7 +197,9 @@ var threadKeyTests = function () { return __awaiter(void 0, void 0, void 0, func
192
197
  var enduser, _a, e1, e2, e3, _b, e4, e5, e6, es;
193
198
  return __generator(this, function (_c) {
194
199
  switch (_c.label) {
195
- case 0: return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'threadkeytests@tellescope.com' })];
200
+ case 0:
201
+ log_header("threadKey");
202
+ return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'threadkeytests@tellescope.com' })];
196
203
  case 1:
197
204
  enduser = _c.sent();
198
205
  return [4 /*yield*/, Promise.all([
@@ -228,17 +235,11 @@ var threadKeyTests = function () { return __awaiter(void 0, void 0, void 0, func
228
235
  assert(es.find(function (e) { return e.id === e4.id; }) !== undefined, 'threadKey got duplicates', 'threadKey no duplicates (key 1, new)');
229
236
  assert(es.find(function (e) { return e.id === e5.id; }) !== undefined, 'threadKey got duplicates', 'threadKey no duplicates (key 2, new)');
230
237
  assert(es.find(function (e) { return e.id === e6.id; }) !== undefined, 'threadKey got duplicates', 'threadKey no duplicates (key 3, new)');
231
- return [4 /*yield*/, Promise.all([
232
- sdk.api.endusers.deleteOne(enduser.id),
233
- sdk.api.engagement_events.deleteOne(e1.id),
234
- sdk.api.engagement_events.deleteOne(e2.id),
235
- sdk.api.engagement_events.deleteOne(e3.id),
236
- sdk.api.engagement_events.deleteOne(e4.id),
237
- sdk.api.engagement_events.deleteOne(e5.id),
238
- sdk.api.engagement_events.deleteOne(e6.id),
239
- ])];
238
+ // cleanup
239
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id)]; // cleans up automatin events too
240
240
  case 7:
241
- _c.sent();
241
+ // cleanup
242
+ _c.sent(); // cleans up automatin events too
242
243
  return [2 /*return*/];
243
244
  }
244
245
  });
@@ -247,7 +248,7 @@ var badInputTests = function () { return __awaiter(void 0, void 0, void 0, funct
247
248
  return __generator(this, function (_a) {
248
249
  switch (_a.label) {
249
250
  case 0:
250
- log_header("Bad Input Tests");
251
+ log_header("Bad Input");
251
252
  return [4 /*yield*/, async_test("_-prefixed fields are not allowed", function () { return sdk.api.endusers.createOne({ email: 'failure@tellescope.com', fields: { "_notallowed": 'hello' } }); }, { shouldError: true, onError: function (e) { return e.message === "Error parsing field fields: Fields that start with '_' are not allowed"; } })];
252
253
  case 1:
253
254
  _a.sent();
@@ -262,7 +263,9 @@ var filterTests = function () { return __awaiter(void 0, void 0, void 0, functio
262
263
  var enduser, otherEnduser;
263
264
  return __generator(this, function (_a) {
264
265
  switch (_a.label) {
265
- case 0: return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'filtertests@tellescope.com', fname: 'test', fields: { field1: 'value1', field2: 'value2' } })];
266
+ case 0:
267
+ log_header("Filter Tests");
268
+ return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'filtertests@tellescope.com', fname: 'test', fields: { field1: 'value1', field2: 'value2' } })];
266
269
  case 1:
267
270
  enduser = _a.sent();
268
271
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'other@tellescope.com' })];
@@ -320,7 +323,9 @@ var updatesTests = function () { return __awaiter(void 0, void 0, void 0, functi
320
323
  var enduser, task;
321
324
  return __generator(this, function (_a) {
322
325
  switch (_a.label) {
323
- case 0: return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'test@tellescope.com', phone: '+15555555555' })];
326
+ case 0:
327
+ log_header("Updates Tests");
328
+ return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'test@tellescope.com', phone: '+15555555555' })];
324
329
  case 1:
325
330
  enduser = _a.sent();
326
331
  return [4 /*yield*/, sdk.api.endusers.updateOne(enduser.id, { phone: '+15555555552' })]; // update to new phone number
@@ -352,7 +357,7 @@ var generateEnduserAuthTests = function () { return __awaiter(void 0, void 0, vo
352
357
  return __generator(this, function (_e) {
353
358
  switch (_e.label) {
354
359
  case 0:
355
- log_header("Generated Enduser authToken Tests");
360
+ log_header("Generated Enduser authToken");
356
361
  externalId = '1029f9v9sjd0as';
357
362
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'generated@tellescope.com', phone: '+15555555555', externalId: externalId })];
358
363
  case 1:
@@ -659,7 +664,7 @@ var engagement_tests = function () { return __awaiter(void 0, void 0, void 0, fu
659
664
  var journey_tests = function (queries) {
660
665
  if (queries === void 0) { queries = sdk.api.journeys; }
661
666
  return __awaiter(void 0, void 0, void 0, function () {
662
- var journey, journey2, withAddedState, e1, e2, engagement, es;
667
+ var journey, journey2, updated, fetchAfterDeletion, withAddedState, e1, e2, engagement, es;
663
668
  var _a, _b, _c, _d, _e, _f;
664
669
  return __generator(this, function (_g) {
665
670
  switch (_g.label) {
@@ -675,115 +680,131 @@ var journey_tests = function (queries) {
675
680
  return [4 /*yield*/, sdk.api.journeys.createOne({ title: 'Test Journey 2' })];
676
681
  case 4:
677
682
  journey2 = _g.sent();
683
+ return [4 /*yield*/, sdk.api.journeys.updateOne(journey.id, {
684
+ states: [
685
+ { name: 'Delete Me 1', priority: 'N/A' },
686
+ { name: 'Delete Me 2', priority: 'N/A' },
687
+ ]
688
+ })];
689
+ case 5:
690
+ _g.sent();
691
+ return [4 /*yield*/, sdk.api.journeys.delete_states({ id: journey.id, states: ['Delete Me 1', 'Delete Me 2'] })];
692
+ case 6:
693
+ updated = (_g.sent()).updated;
694
+ assert(!!updated.id && updated.states.length === 1 && updated.states[0].name === 'New', 'delete states fail on returned update', 'delete states returns updated value');
695
+ return [4 /*yield*/, sdk.api.journeys.getOne(journey.id)];
696
+ case 7:
697
+ fetchAfterDeletion = _g.sent();
698
+ assert(fetchAfterDeletion.states.length === 1 && fetchAfterDeletion.states[0].name === 'New', 'delete states fail', 'delete states worked');
678
699
  assert(journey.defaultState === 'New', 'defaultState not set on create', 'journey-create - defaultState initialized');
679
700
  assert(journey.states[0].name === 'New', 'defaultState not set on create', 'journey-create - states initialized');
680
701
  return [4 /*yield*/, sdk.api.journeys.updateOne(journey.id, { states: [{ name: 'ToDuplicate', priority: "N/A" }] })];
681
- case 5:
702
+ case 8:
682
703
  _g.sent();
683
704
  return [4 /*yield*/, sdk.api.journeys.getOne(journey.id)];
684
- case 6:
705
+ case 9:
685
706
  withAddedState = _g.sent();
686
707
  assert(withAddedState.states.length === 2 && withAddedState.states.find(function (s) { return s.name === 'ToDuplicate'; }) !== undefined, 'new state added', 'journey-update - push state change');
687
708
  return [4 /*yield*/, async_test("create-journey - add duplicate state", function () { return sdk.api.journeys.updateOne(journey.id, { states: [{ name: 'ToDuplicate', priority: "N/A" }] }); }, { shouldError: true, onError: function (e) { return e.message === 'Uniqueness Violation'; } })];
688
- case 7:
709
+ case 10:
689
710
  _g.sent();
690
711
  return [4 /*yield*/, async_test("create-journey - add duplicate states in update", function () { return sdk.api.journeys.updateOne(journey.id, { states: [{ name: 'DuplicateUpdate', priority: "N/A" }, { name: 'DuplicateUpdate', priority: "N/A" }] }); }, { shouldError: true, onError: function (e) { return e.message === 'Uniqueness Violation'; } })];
691
- case 8:
712
+ case 11:
692
713
  _g.sent();
693
714
  return [4 /*yield*/, sdk.api.journeys.updateOne(journey.id, { defaultState: 'Added', states: [{ name: 'Added', priority: "N/A" }, { name: "Other", priority: "N/A" }] }, { replaceObjectFields: true })];
694
- case 9:
715
+ case 12:
695
716
  _g.sent();
696
717
  return [4 /*yield*/, sdk.api.journeys.getOne(journey.id)];
697
- case 10:
718
+ case 13:
698
719
  withAddedState = _g.sent();
699
720
  assert(withAddedState.states.length === 2 && withAddedState.states.find(function (s) { return s.name === 'Added'; }) !== undefined
700
721
  && withAddedState.defaultState === 'Added', 'duplicate state not added', 'journey-update - replace states');
701
722
  return [4 /*yield*/, async_test("journey-update - states replace with missing default", function () { return queries.updateOne(journey.id, { states: [{ name: 'Not Default', priority: "N/A" }] }, { replaceObjectFields: true }); }, { shouldError: true, onError: function (e) { return e.message === 'defaultState does not exist in states'; } })];
702
- case 11:
723
+ case 14:
703
724
  _g.sent();
704
725
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'journeyunset1@tellescope.com', journeys: (_a = {}, _a[journey.id] = 'Added', _a) })];
705
- case 12:
726
+ case 15:
706
727
  e1 = _g.sent();
707
728
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: 'journeyunset2@tellescope.com', journeys: (_b = {}, _b[journey.id] = 'Added', _b[journey2.id] = 'New', _b) })];
708
- case 13:
729
+ case 16:
709
730
  e2 = _g.sent();
710
731
  return [4 /*yield*/, async_test("create-enduser - invalid journey id", function () {
711
732
  var _a;
712
733
  return sdk.api.endusers.createOne({ email: 'journeyunset3@tellescope.com', journeys: (_a = {}, _a[e1.id] = 'Added', _a) });
713
734
  }, { shouldError: true, onError: function (e) { return e.message === 'Could not find a related record for the given id(s)'; } })];
714
- case 14:
735
+ case 17:
715
736
  _g.sent();
716
737
  return [4 /*yield*/, async_test("update-enduser - invalid journey id", function () {
717
738
  var _a;
718
739
  return sdk.api.endusers.updateOne(e1.id, { journeys: (_a = {}, _a[e1.id] = 'Added', _a) });
719
740
  }, { shouldError: true, onError: function (e) { return e.message === 'Could not find a related record for the given id(s)'; } })];
720
- case 15:
741
+ case 18:
721
742
  _g.sent();
722
743
  return [4 /*yield*/, async_test("update-enduser - one invalid journey id", function () {
723
744
  var _a;
724
745
  return sdk.api.endusers.updateOne(e1.id, { journeys: (_a = {}, _a[journey.id] = 'Added', _a[e1.id] = 'Added', _a) });
725
746
  }, { shouldError: true, onError: function (e) { return e.message === 'Could not find a related record for the given id(s)'; } })];
726
- case 16:
747
+ case 19:
727
748
  _g.sent();
728
749
  return [4 /*yield*/, sdk.api.endusers.updateOne(e1.id, { journeys: (_c = {}, _c[journey.id] = 'Other', _c) })]; // valid state change
729
- case 17:
750
+ case 20:
730
751
  _g.sent(); // valid state change
731
752
  return [4 /*yield*/, sdk.api.endusers.updateOne(e1.id, { journeys: (_d = {}, _d[journey.id] = 'Added', _d) })]; // change back
732
- case 18:
753
+ case 21:
733
754
  _g.sent(); // change back
734
755
  return [4 /*yield*/, wait(undefined, 25)]; // wait for side effects to add engagement
735
- case 19:
756
+ case 22:
736
757
  _g.sent(); // wait for side effects to add engagement
737
758
  return [4 /*yield*/, sdk.api.engagement_events.getSome()];
738
- case 20:
759
+ case 23:
739
760
  engagement = _g.sent();
740
761
  assert(engagement.filter(function (e) { return e.enduserId === e1.id && e.type === "STATE_CHANGE"; }).length === 2, 'STATE_CHANGE engagement not tracked', 'Update enduser tracks state changes');
741
762
  return [4 /*yield*/, sdk.api.endusers.createSome([{ email: "1@tellescope.com", journeys: (_e = {}, _e[journey.id] = 'Added', _e) }, { email: "2@tellescope.com", journeys: (_f = {}, _f[journey.id] = 'Added', _f) }])];
742
- case 21:
763
+ case 24:
743
764
  es = (_g.sent()).created;
744
765
  return [4 /*yield*/, sdk.api.engagement_events.getSome()];
745
- case 22:
766
+ case 25:
746
767
  engagement = _g.sent();
747
768
  assert(engagement.filter(function (e) { return e.enduserId === es[0].id && e.type === "JOURNEY_SET"; }).length === 1, 'JOURNEY_SET engagement not tracked', 'Create endusers tracks engagement events (1)');
748
769
  assert(engagement.filter(function (e) { return e.enduserId === es[1].id && e.type === "JOURNEY_SET"; }).length === 1, 'JOURNEY_SET engagement not tracked', 'Create endusers tracks engagement events (2)');
749
770
  return [4 /*yield*/, queries.updateOne(journey.id, { states: [{ name: 'First', priority: "N/A" }, { name: 'Added', priority: "N/A" }] }, { replaceObjectFields: true })];
750
- case 23:
771
+ case 26:
751
772
  _g.sent();
752
773
  return [4 /*yield*/, async_test("journey-update - insert new state at front", function () { return queries.getOne(journey.id); }, { onResult: function (j) { return objects_equivalent(j.states, [{ name: 'First', priority: "N/A" }, { name: 'Added', priority: "N/A" }]); } })];
753
- case 24:
774
+ case 27:
754
775
  _g.sent();
755
776
  return [4 /*yield*/, async_test("journey-updateState", function () { return queries.update_state({ id: journey.id, name: 'Added', updates: { name: 'Updated', priority: 'N/A' } }); }, passOnVoid)];
756
- case 25:
777
+ case 28:
757
778
  _g.sent();
758
779
  return [4 /*yield*/, wait(undefined, 25)]; // wait for side effects to update endusers
759
- case 26:
780
+ case 29:
760
781
  _g.sent(); // wait for side effects to update endusers
761
782
  return [4 /*yield*/, async_test("journey-updateState verify propagation to enduser 1", function () { return sdk.api.endusers.getOne(e1.id); }, { onResult: function (e) {
762
783
  var _a;
763
784
  return objects_equivalent(e.journeys, (_a = {}, _a[journey.id] = 'Updated', _a));
764
785
  } })];
765
- case 27:
786
+ case 30:
766
787
  _g.sent();
767
788
  return [4 /*yield*/, async_test("journey-updateState verify propagation to enduser 2", function () { return sdk.api.endusers.getOne(e2.id); }, { onResult: function (e) {
768
789
  var _a;
769
790
  return objects_equivalent(e.journeys, (_a = {}, _a[journey.id] = 'Updated', _a[journey2.id] = 'New', _a));
770
791
  } })];
771
- case 28:
792
+ case 31:
772
793
  _g.sent();
773
794
  return [4 /*yield*/, queries.deleteOne(journey.id)];
774
- case 29:
795
+ case 32:
775
796
  _g.sent();
776
797
  return [4 /*yield*/, wait(undefined, 25)]; // wait for side effects to update endusers
777
- case 30:
798
+ case 33:
778
799
  _g.sent(); // wait for side effects to update endusers
779
800
  return [4 /*yield*/, async_test("journey-delete - corresponding enduser journeys are unset 1", function () { return sdk.api.endusers.getOne(e1.id); }, { onResult: function (e) { return objects_equivalent(e.journeys, {}); } })];
780
- case 31:
801
+ case 34:
781
802
  _g.sent();
782
803
  return [4 /*yield*/, async_test("journey-delete - corresponding enduser journeys are unset, others left", function () { return sdk.api.endusers.getOne(e2.id); }, { onResult: function (e) {
783
804
  var _a;
784
805
  return objects_equivalent(e.journeys, (_a = {}, _a[journey2.id] = 'New', _a));
785
806
  } })];
786
- case 32:
807
+ case 35:
787
808
  _g.sent();
788
809
  return [2 /*return*/];
789
810
  }
@@ -806,9 +827,9 @@ var tasks_tests = function (queries) {
806
827
  return [4 /*yield*/, sdk.api.endusers.deleteOne(e.id)];
807
828
  case 3:
808
829
  _a.sent();
809
- return [4 /*yield*/, wait(undefined, 25)]; // allow dependency updates to fire in background
830
+ return [4 /*yield*/, wait(undefined, 100)]; // allow dependency updates to fire in background (there are a lot for endusers)
810
831
  case 4:
811
- _a.sent(); // allow dependency updates to fire in background
832
+ _a.sent(); // allow dependency updates to fire in background (there are a lot for endusers)
812
833
  return [4 /*yield*/, async_test("get-task - enduserId unset on enduser deletion", function () { return queries.getOne(t.id); }, { onResult: function (t) { return t.enduserId === undefined; } })];
813
834
  case 5:
814
835
  _a.sent();
@@ -1151,8 +1172,11 @@ var chat_tests = function () { return __awaiter(void 0, void 0, void 0, function
1151
1172
  return [4 /*yield*/, sdk.api.chats.deleteOne(chatNull.id)];
1152
1173
  case 23:
1153
1174
  _a.sent();
1154
- return [4 /*yield*/, async_test("get-chat (setNull working)", function () { return sdk.api.chats.getOne(chat2Null.id); }, { onResult: function (c) { return c.replyId === null; } })];
1175
+ return [4 /*yield*/, wait(undefined, 250)];
1155
1176
  case 24:
1177
+ _a.sent();
1178
+ return [4 /*yield*/, async_test("get-chat (setNull working)", function () { return sdk.api.chats.getOne(chat2Null.id); }, { onResult: function (c) { return c.replyId === null; } })];
1179
+ case 25:
1156
1180
  _a.sent();
1157
1181
  return [2 /*return*/];
1158
1182
  }
@@ -1164,6 +1188,7 @@ var enduserAccessTests = function () { return __awaiter(void 0, void 0, void 0,
1164
1188
  return __generator(this, function (_j) {
1165
1189
  switch (_j.label) {
1166
1190
  case 0:
1191
+ log_header("Enduser Access");
1167
1192
  email = 'enduser@tellescope.com';
1168
1193
  password = 'testpassword';
1169
1194
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: email })];
@@ -1266,7 +1291,7 @@ var enduserAccessTests = function () { return __awaiter(void 0, void 0, void 0,
1266
1291
  return [4 /*yield*/, sdk.api.tickets.createOne({ enduserId: PLACEHOLDER_ID, title: "Inaccessible ticket" })];
1267
1292
  case 15:
1268
1293
  ticketInaccessible = _j.sent();
1269
- return [4 /*yield*/, async_test("enduser cannot create ticket for another enduser", function () { return enduserSDK.api.tickets.createOne({ enduserId: sdk.userInfo.id, title: "Error on Creation" }); }, { shouldError: true, onError: function (e) { return e.message === "enduserId does not match creator id for enduser session"; } })];
1294
+ return [4 /*yield*/, async_test("enduser cannot create ticket for another enduser", function () { return enduserSDK.api.tickets.createOne({ enduserId: sdk.userInfo.id, title: "Error on Creation" }); }, { shouldError: true, onError: function (e) { return !!e.message; } })];
1270
1295
  case 16:
1271
1296
  _j.sent();
1272
1297
  return [4 /*yield*/, async_test("enduser-access default, no access constraints, matching enduserId", function () { return enduserSDK.api.tickets.getOne(ticketAccessible.id); }, { onResult: function (t) { return t.id === ticketAccessible.id; } })];
@@ -1343,6 +1368,7 @@ var enduser_session_tests = function () { return __awaiter(void 0, void 0, void
1343
1368
  return __generator(this, function (_a) {
1344
1369
  switch (_a.label) {
1345
1370
  case 0:
1371
+ log_header("Enduser Session");
1346
1372
  email = 'enduser@tellescope.com';
1347
1373
  password = 'testpassword';
1348
1374
  return [4 /*yield*/, sdk.api.endusers.createOne({ email: email })];
@@ -1470,6 +1496,128 @@ var calendar_events_tests = function () { return __awaiter(void 0, void 0, void
1470
1496
  }
1471
1497
  });
1472
1498
  }); };
1499
+ var automation_events_tests = function () { return __awaiter(void 0, void 0, void 0, function () {
1500
+ var state1, state2, journey, testAction, a1, a2, a3, enduser;
1501
+ var _a, _b;
1502
+ return __generator(this, function (_c) {
1503
+ switch (_c.label) {
1504
+ case 0:
1505
+ log_header("Automation Events");
1506
+ state1 = "State 1", state2 = "State 2";
1507
+ return [4 /*yield*/, sdk.api.journeys.createOne({
1508
+ title: "Automations Test",
1509
+ defaultState: state1,
1510
+ states: [
1511
+ { name: state1, priority: 'N/A' },
1512
+ { name: state2, priority: 'N/A' },
1513
+ ]
1514
+ })];
1515
+ case 1:
1516
+ journey = _c.sent();
1517
+ return [4 /*yield*/, async_test("enterState cannot match updateStateForJourney", function () { return sdk.api.event_automations.createOne({
1518
+ journeyId: journey.id,
1519
+ event: {
1520
+ type: "enterState",
1521
+ info: { state: state1, journeyId: journey.id }
1522
+ },
1523
+ action: {
1524
+ type: 'updateStateForJourney',
1525
+ info: { state: state1, journeyId: journey.id },
1526
+ },
1527
+ }); }, { shouldError: true, onError: function (e) { return e.message === 'updateStateForJourney cannot have the same journey and state as the enterState event'; } })];
1528
+ case 2:
1529
+ _c.sent();
1530
+ return [4 /*yield*/, async_test("leaveState cannot match updateStateForJourney", function () { return sdk.api.event_automations.createOne({
1531
+ journeyId: journey.id,
1532
+ event: {
1533
+ type: "leaveState",
1534
+ info: { state: state1, journeyId: journey.id }
1535
+ },
1536
+ action: {
1537
+ type: 'updateStateForJourney',
1538
+ info: { state: state1, journeyId: journey.id },
1539
+ },
1540
+ }); }, { shouldError: true, onError: function (e) { return e.message === 'updateStateForJourney cannot have the same journey and state as the leaveState event'; } })];
1541
+ case 3:
1542
+ _c.sent();
1543
+ testAction = {
1544
+ type: 'sendWebhook',
1545
+ info: { message: 'test' }
1546
+ };
1547
+ return [4 /*yield*/, sdk.api.event_automations.createOne({
1548
+ journeyId: journey.id,
1549
+ event: {
1550
+ type: "enterState",
1551
+ info: { state: state1, journeyId: journey.id }
1552
+ },
1553
+ action: testAction,
1554
+ })];
1555
+ case 4:
1556
+ a1 = _c.sent();
1557
+ return [4 /*yield*/, sdk.api.event_automations.createOne({
1558
+ journeyId: journey.id,
1559
+ event: {
1560
+ type: "leaveState",
1561
+ info: { state: state1, journeyId: journey.id }
1562
+ },
1563
+ action: testAction,
1564
+ })];
1565
+ case 5:
1566
+ a2 = _c.sent();
1567
+ return [4 /*yield*/, sdk.api.event_automations.createOne({
1568
+ journeyId: journey.id,
1569
+ event: {
1570
+ type: "enterState",
1571
+ info: { state: state2, journeyId: journey.id }
1572
+ },
1573
+ action: testAction,
1574
+ })];
1575
+ case 6:
1576
+ a3 = _c.sent();
1577
+ return [4 /*yield*/, async_test("Cannot insert duplicate event/action pair", function () { return sdk.api.event_automations.createOne({
1578
+ journeyId: journey.id,
1579
+ event: {
1580
+ type: "enterState",
1581
+ info: { state: state2, journeyId: journey.id }
1582
+ },
1583
+ action: testAction,
1584
+ }); }, { shouldError: true, onError: function (e) { return e.message === UniquenessViolationMessage; } })
1585
+ // trigger a1 on create
1586
+ ];
1587
+ case 7:
1588
+ _c.sent();
1589
+ return [4 /*yield*/, sdk.api.endusers.createOne({
1590
+ email: "automations@tellescope.com",
1591
+ journeys: (_a = {}, _a[journey.id] = journey.defaultState, _a)
1592
+ })
1593
+ // trigger a2 and a3 by leaving state 1 an going to state 2
1594
+ ];
1595
+ case 8:
1596
+ enduser = _c.sent();
1597
+ // trigger a2 and a3 by leaving state 1 an going to state 2
1598
+ return [4 /*yield*/, sdk.api.endusers.updateOne(enduser.id, { journeys: (_b = {}, _b[journey.id] = state2, _b) })];
1599
+ case 9:
1600
+ // trigger a2 and a3 by leaving state 1 an going to state 2
1601
+ _c.sent();
1602
+ return [4 /*yield*/, async_test("Automation events triggered correctly",
1603
+ // () => sdk.api.automation_endusers.getSome(),
1604
+ function () { return sdk.api.automation_endusers.getSome({ filter: { enduserId: enduser.id } }); }, { onResult: function (es) { return es && es.length === 3 && es.filter(function (a) { return a.automationId === "ONE_TIME"; }).length === 3; } })
1605
+ // cleanup
1606
+ ];
1607
+ case 10:
1608
+ _c.sent();
1609
+ // cleanup
1610
+ return [4 /*yield*/, sdk.api.journeys.deleteOne(journey.id)]; // automation events deleted as side effect
1611
+ case 11:
1612
+ // cleanup
1613
+ _c.sent(); // automation events deleted as side effect
1614
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(enduser.id)];
1615
+ case 12:
1616
+ _c.sent();
1617
+ return [2 /*return*/];
1618
+ }
1619
+ });
1620
+ }); };
1473
1621
  var tests = {
1474
1622
  chats: chat_tests,
1475
1623
  endusers: enduser_tests,
@@ -1490,6 +1638,9 @@ var tests = {
1490
1638
  form_responses: function () { },
1491
1639
  calendar_events: calendar_events_tests,
1492
1640
  webhooks: function () { },
1641
+ event_automations: automation_events_tests,
1642
+ sequence_automations: function () { },
1643
+ automation_endusers: function () { },
1493
1644
  };
1494
1645
  (function () { return __awaiter(void 0, void 0, void 0, function () {
1495
1646
  var err_1, n, _a, _b, _i, returnValidation, t, _c, _d, _e, err_2;
@@ -1539,7 +1690,7 @@ var tests = {
1539
1690
  err_1 = _h.sent();
1540
1691
  console.error("Failed during custom test");
1541
1692
  console.error(err_1);
1542
- process.exit();
1693
+ process.exit(1);
1543
1694
  return [3 /*break*/, 13];
1544
1695
  case 13:
1545
1696
  _a = [];
@@ -1585,6 +1736,7 @@ var tests = {
1585
1736
  err_2 = _h.sent();
1586
1737
  console.error("Error running test:");
1587
1738
  console.error(err_2);
1739
+ process.exit(1);
1588
1740
  return [3 /*break*/, 22];
1589
1741
  case 22:
1590
1742
  _e++;