@tellescope/sdk 1.256.6 → 1.256.7

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.
Files changed (115) hide show
  1. package/lib/cjs/enduser.d.ts +1 -1
  2. package/lib/cjs/enduser.d.ts.map +1 -1
  3. package/lib/cjs/enduser.js +1 -0
  4. package/lib/cjs/enduser.js.map +1 -1
  5. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts +6 -0
  6. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts.map +1 -0
  7. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js +505 -0
  8. package/lib/cjs/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js.map +1 -0
  9. package/lib/cjs/tests/api_tests/configurations_public_read.test.d.ts +6 -0
  10. package/lib/cjs/tests/api_tests/configurations_public_read.test.d.ts.map +1 -0
  11. package/lib/cjs/tests/api_tests/configurations_public_read.test.js +173 -0
  12. package/lib/cjs/tests/api_tests/configurations_public_read.test.js.map +1 -0
  13. package/lib/cjs/tests/api_tests/form_started_trigger.test.d.ts.map +1 -1
  14. package/lib/cjs/tests/api_tests/form_started_trigger.test.js +87 -24
  15. package/lib/cjs/tests/api_tests/form_started_trigger.test.js.map +1 -1
  16. package/lib/cjs/tests/api_tests/form_translations.test.d.ts +6 -0
  17. package/lib/cjs/tests/api_tests/form_translations.test.d.ts.map +1 -0
  18. package/lib/cjs/tests/api_tests/form_translations.test.js +259 -0
  19. package/lib/cjs/tests/api_tests/form_translations.test.js.map +1 -0
  20. package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.d.ts.map +1 -1
  21. package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.js +340 -124
  22. package/lib/cjs/tests/api_tests/group_event_attendee_status_triggers.test.js.map +1 -1
  23. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.d.ts +6 -0
  24. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.d.ts.map +1 -0
  25. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.js +277 -0
  26. package/lib/cjs/tests/api_tests/mdi_trigger_refill.test.js.map +1 -0
  27. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
  28. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js +262 -78
  29. package/lib/cjs/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
  30. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts +31 -0
  31. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
  32. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js +230 -0
  33. package/lib/cjs/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js.map +1 -0
  34. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -1
  35. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +206 -198
  36. package/lib/cjs/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -1
  37. package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -1
  38. package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js +343 -80
  39. package/lib/cjs/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -1
  40. package/lib/cjs/tests/api_tests/welle_partner_token.test.d.ts.map +1 -1
  41. package/lib/cjs/tests/api_tests/welle_partner_token.test.js +74 -35
  42. package/lib/cjs/tests/api_tests/welle_partner_token.test.js.map +1 -1
  43. package/lib/cjs/tests/stripe_webhook_helpers.d.ts +134 -0
  44. package/lib/cjs/tests/stripe_webhook_helpers.d.ts.map +1 -1
  45. package/lib/cjs/tests/stripe_webhook_helpers.js +126 -1
  46. package/lib/cjs/tests/stripe_webhook_helpers.js.map +1 -1
  47. package/lib/cjs/tests/tests.d.ts.map +1 -1
  48. package/lib/cjs/tests/tests.js +238 -212
  49. package/lib/cjs/tests/tests.js.map +1 -1
  50. package/lib/esm/enduser.d.ts +1 -1
  51. package/lib/esm/enduser.d.ts.map +1 -1
  52. package/lib/esm/enduser.js +1 -0
  53. package/lib/esm/enduser.js.map +1 -1
  54. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts +6 -0
  55. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.d.ts.map +1 -0
  56. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js +501 -0
  57. package/lib/esm/tests/api_tests/calendar_event_create_and_bulk_triggers.test.js.map +1 -0
  58. package/lib/esm/tests/api_tests/configurations_public_read.test.d.ts +6 -0
  59. package/lib/esm/tests/api_tests/configurations_public_read.test.d.ts.map +1 -0
  60. package/lib/esm/tests/api_tests/configurations_public_read.test.js +169 -0
  61. package/lib/esm/tests/api_tests/configurations_public_read.test.js.map +1 -0
  62. package/lib/esm/tests/api_tests/form_started_trigger.test.d.ts.map +1 -1
  63. package/lib/esm/tests/api_tests/form_started_trigger.test.js +87 -24
  64. package/lib/esm/tests/api_tests/form_started_trigger.test.js.map +1 -1
  65. package/lib/esm/tests/api_tests/form_translations.test.d.ts +6 -0
  66. package/lib/esm/tests/api_tests/form_translations.test.d.ts.map +1 -0
  67. package/lib/esm/tests/api_tests/form_translations.test.js +255 -0
  68. package/lib/esm/tests/api_tests/form_translations.test.js.map +1 -0
  69. package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.d.ts.map +1 -1
  70. package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.js +340 -124
  71. package/lib/esm/tests/api_tests/group_event_attendee_status_triggers.test.js.map +1 -1
  72. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.d.ts +6 -0
  73. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.d.ts.map +1 -0
  74. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.js +273 -0
  75. package/lib/esm/tests/api_tests/mdi_trigger_refill.test.js.map +1 -0
  76. package/lib/esm/tests/api_tests/purchase_made_trigger.test.d.ts.map +1 -1
  77. package/lib/esm/tests/api_tests/purchase_made_trigger.test.js +262 -78
  78. package/lib/esm/tests/api_tests/purchase_made_trigger.test.js.map +1 -1
  79. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts +31 -0
  80. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.d.ts.map +1 -0
  81. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js +226 -0
  82. package/lib/esm/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.js.map +1 -0
  83. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.d.ts.map +1 -1
  84. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js +206 -198
  85. package/lib/esm/tests/api_tests/security/public_endpoint_auth_field_lock.test.js.map +1 -1
  86. package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.d.ts.map +1 -1
  87. package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js +344 -81
  88. package/lib/esm/tests/api_tests/stripe_webhook_triggers.test.js.map +1 -1
  89. package/lib/esm/tests/api_tests/welle_partner_token.test.d.ts.map +1 -1
  90. package/lib/esm/tests/api_tests/welle_partner_token.test.js +74 -35
  91. package/lib/esm/tests/api_tests/welle_partner_token.test.js.map +1 -1
  92. package/lib/esm/tests/stripe_webhook_helpers.d.ts +134 -0
  93. package/lib/esm/tests/stripe_webhook_helpers.d.ts.map +1 -1
  94. package/lib/esm/tests/stripe_webhook_helpers.js +119 -0
  95. package/lib/esm/tests/stripe_webhook_helpers.js.map +1 -1
  96. package/lib/esm/tests/tests.d.ts.map +1 -1
  97. package/lib/esm/tests/tests.js +238 -212
  98. package/lib/esm/tests/tests.js.map +1 -1
  99. package/lib/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +10 -10
  101. package/src/enduser.ts +4 -2
  102. package/src/tests/api_tests/calendar_event_create_and_bulk_triggers.test.ts +293 -0
  103. package/src/tests/api_tests/configurations_public_read.test.ts +116 -0
  104. package/src/tests/api_tests/form_started_trigger.test.ts +49 -1
  105. package/src/tests/api_tests/form_translations.test.ts +205 -0
  106. package/src/tests/api_tests/group_event_attendee_status_triggers.test.ts +135 -0
  107. package/src/tests/api_tests/mdi_trigger_refill.test.ts +184 -0
  108. package/src/tests/api_tests/purchase_made_trigger.test.ts +137 -0
  109. package/src/tests/api_tests/security/F-0006-develop-health-benefit-verification-rbac.test.ts +144 -0
  110. package/src/tests/api_tests/security/public_endpoint_auth_field_lock.test.ts +16 -6
  111. package/src/tests/api_tests/stripe_webhook_triggers.test.ts +221 -0
  112. package/src/tests/api_tests/welle_partner_token.test.ts +49 -6
  113. package/src/tests/stripe_webhook_helpers.ts +116 -0
  114. package/src/tests/tests.ts +27 -12
  115. package/test_generated.pdf +0 -0
@@ -50,9 +50,9 @@ var ALL_STATUSES = ['Completed', 'No-showed', 'Rescheduled', 'Cancelled'];
50
50
  export var group_event_attendee_status_triggers_tests = function (_a) {
51
51
  var sdk = _a.sdk;
52
52
  return __awaiter(void 0, void 0, void 0, function () {
53
- var createdTriggerIds, createdEnduserIds, createdEventIds, createEnduser, createGroupEvent, setAttendeeStatuses, tagsOf, _i, ALL_STATUSES_1, status_1, t, _loop_1, _b, ALL_STATUSES_2, status_2, aCompleted_1, bNoShow_1, cCancelled_1, dUnset_1, mixedEvent, transA_1, transABystander_1, transAEvent, transB_1, transBBystander_1, transBEvent, byUserTrigger, byEnduserTrigger, byTarget_1, byBystander_1, byEvent, bulkTarget_1, bulkBystander_1, now, DAY, rootEvent, childEvent, confirmEnduser_1, clearEnduser_1, noopEvent, _c, createdEventIds_1, id, _1, _d, createdEnduserIds_1, id, _2, _e, createdTriggerIds_1, id, _3;
54
- return __generator(this, function (_f) {
55
- switch (_f.label) {
53
+ var createdTriggerIds, createdEnduserIds, createdEventIds, createEnduser, createGroupEvent, setAttendeeStatuses, markEventCompleted, tagsOf, _i, ALL_STATUSES_1, status_1, t, _loop_1, _b, ALL_STATUSES_2, status_2, aCompleted_1, bNoShow_1, cCancelled_1, dUnset_1, mixedEvent, transA_1, transABystander_1, transAEvent, transB_1, transBBystander_1, transBEvent, byUserTrigger, byEnduserTrigger, byTarget_1, byBystander_1, byEvent, bulkTarget_1, bulkBystander_1, now, DAY, rootEvent, childEvent, confirmEnduser_1, clearEnduser_1, noopEvent, _loop_2, _c, _d, status_3, portalCancelled_1, portalActive_1, portalEvent, confirmed_1, confirmedBystander_1, confirmedEvent, plain1, plain2, plain3, plainEvent, plainAttendees, _loop_3, i, _e, createdEventIds_1, id, _1, _f, createdEnduserIds_1, id, _2, _g, createdTriggerIds_1, id, _3;
54
+ return __generator(this, function (_h) {
55
+ switch (_h.label) {
56
56
  case 0:
57
57
  log_header("Automation Trigger Tests (Group Event Per-Attendee Status)");
58
58
  createdTriggerIds = [];
@@ -94,7 +94,14 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
94
94
  cancelledGroupAttendees: (statuses
95
95
  .filter(function (s) { return s.status === 'Cancelled' || s.status === 'No-showed' || s.status === 'Rescheduled'; })
96
96
  .map(function (s) { return ({ id: s.id, at: new Date() }); })),
97
- }, { replaceObjectFields: true }))];
97
+ }, { replaceObjectFields: true }))
98
+ // Replicates the webapp "Mark Completed" action on the whole event (Calendar.tsx)
99
+ ];
100
+ });
101
+ }); };
102
+ markEventCompleted = function (eventId) { return __awaiter(void 0, void 0, void 0, function () {
103
+ return __generator(this, function (_a) {
104
+ return [2 /*return*/, (sdk.api.calendar_events.updateOne(eventId, { completedAt: new Date(), completedBy: sdk.userInfo.id }))];
98
105
  });
99
106
  }); };
100
107
  tagsOf = function (enduserId) { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
@@ -103,11 +110,11 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
103
110
  case 1: return [2 /*return*/, (_a.sent()).tags || []];
104
111
  }
105
112
  }); }); };
106
- _f.label = 1;
113
+ _h.label = 1;
107
114
  case 1:
108
- _f.trys.push([1, , 68, 87]);
115
+ _h.trys.push([1, , 101, 120]);
109
116
  _i = 0, ALL_STATUSES_1 = ALL_STATUSES;
110
- _f.label = 2;
117
+ _h.label = 2;
111
118
  case 2:
112
119
  if (!(_i < ALL_STATUSES_1.length)) return [3 /*break*/, 5];
113
120
  status_1 = ALL_STATUSES_1[_i];
@@ -124,74 +131,74 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
124
131
  title: "Group Attendee ".concat(status_1),
125
132
  })];
126
133
  case 3:
127
- t = _f.sent();
134
+ t = _h.sent();
128
135
  createdTriggerIds.push(t.id);
129
- _f.label = 4;
136
+ _h.label = 4;
130
137
  case 4:
131
138
  _i++;
132
139
  return [3 /*break*/, 2];
133
140
  case 5:
134
141
  _loop_1 = function (status_2) {
135
142
  var target, bystander1, bystander2, event_1;
136
- return __generator(this, function (_g) {
137
- switch (_g.label) {
143
+ return __generator(this, function (_j) {
144
+ switch (_j.label) {
138
145
  case 0:
139
146
  log_header("Per-attendee '".concat(status_2, "' in a group event"));
140
147
  return [4 /*yield*/, createEnduser()];
141
148
  case 1:
142
- target = _g.sent();
149
+ target = _j.sent();
143
150
  return [4 /*yield*/, createEnduser()];
144
151
  case 2:
145
- bystander1 = _g.sent();
152
+ bystander1 = _j.sent();
146
153
  return [4 /*yield*/, createEnduser()];
147
154
  case 3:
148
- bystander2 = _g.sent();
155
+ bystander2 = _j.sent();
149
156
  return [4 /*yield*/, createGroupEvent([target.id, bystander1.id, bystander2.id])];
150
157
  case 4:
151
- event_1 = _g.sent();
158
+ event_1 = _j.sent();
152
159
  return [4 /*yield*/, setAttendeeStatuses(event_1.id, [{ id: target.id, status: status_2 }])];
153
160
  case 5:
154
- _g.sent();
161
+ _j.sent();
155
162
  return [4 /*yield*/, wait(undefined, 750)
156
163
  // 1 + 2. True positive / no false negative: target has the correct tag
157
164
  ]; // allow trigger to fire
158
165
  case 6:
159
- _g.sent(); // allow trigger to fire
166
+ _j.sent(); // allow trigger to fire
160
167
  // 1 + 2. True positive / no false negative: target has the correct tag
161
168
  return [4 /*yield*/, async_test("'".concat(status_2, "' fires its trigger for the target attendee"), function () { return tagsOf(target.id); }, { onResult: function (tags) { return tags.includes(TAG[status_2]); } })
162
169
  // 3. No false positive (wrong trigger): target has none of the other status tags
163
170
  ];
164
171
  case 7:
165
172
  // 1 + 2. True positive / no false negative: target has the correct tag
166
- _g.sent();
173
+ _j.sent();
167
174
  // 3. No false positive (wrong trigger): target has none of the other status tags
168
175
  return [4 /*yield*/, async_test("'".concat(status_2, "' does NOT fire any other status trigger for the target"), function () { return tagsOf(target.id); }, { onResult: function (tags) { return ALL_STATUSES.every(function (s) { return s === status_2 || !tags.includes(TAG[s]); }); } })
169
176
  // 4. No false positive (collateral): bystanders received zero tags
170
177
  ];
171
178
  case 8:
172
179
  // 3. No false positive (wrong trigger): target has none of the other status tags
173
- _g.sent();
180
+ _j.sent();
174
181
  // 4. No false positive (collateral): bystanders received zero tags
175
182
  return [4 /*yield*/, async_test("'".concat(status_2, "' does NOT fire for bystander attendee #1"), function () { return sdk.api.endusers.getOne(bystander1.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })];
176
183
  case 9:
177
184
  // 4. No false positive (collateral): bystanders received zero tags
178
- _g.sent();
185
+ _j.sent();
179
186
  return [4 /*yield*/, async_test("'".concat(status_2, "' does NOT fire for bystander attendee #2"), function () { return sdk.api.endusers.getOne(bystander2.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })];
180
187
  case 10:
181
- _g.sent();
188
+ _j.sent();
182
189
  return [2 /*return*/];
183
190
  }
184
191
  });
185
192
  };
186
193
  _b = 0, ALL_STATUSES_2 = ALL_STATUSES;
187
- _f.label = 6;
194
+ _h.label = 6;
188
195
  case 6:
189
196
  if (!(_b < ALL_STATUSES_2.length)) return [3 /*break*/, 9];
190
197
  status_2 = ALL_STATUSES_2[_b];
191
198
  return [5 /*yield**/, _loop_1(status_2)];
192
199
  case 7:
193
- _f.sent();
194
- _f.label = 8;
200
+ _h.sent();
201
+ _h.label = 8;
195
202
  case 8:
196
203
  _b++;
197
204
  return [3 /*break*/, 6];
@@ -202,19 +209,19 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
202
209
  log_header("Multiple distinct per-attendee statuses in one group event");
203
210
  return [4 /*yield*/, createEnduser()];
204
211
  case 10:
205
- aCompleted_1 = _f.sent();
212
+ aCompleted_1 = _h.sent();
206
213
  return [4 /*yield*/, createEnduser()];
207
214
  case 11:
208
- bNoShow_1 = _f.sent();
215
+ bNoShow_1 = _h.sent();
209
216
  return [4 /*yield*/, createEnduser()];
210
217
  case 12:
211
- cCancelled_1 = _f.sent();
218
+ cCancelled_1 = _h.sent();
212
219
  return [4 /*yield*/, createEnduser()];
213
220
  case 13:
214
- dUnset_1 = _f.sent();
221
+ dUnset_1 = _h.sent();
215
222
  return [4 /*yield*/, createGroupEvent([aCompleted_1.id, bNoShow_1.id, cCancelled_1.id, dUnset_1.id])];
216
223
  case 14:
217
- mixedEvent = _f.sent();
224
+ mixedEvent = _h.sent();
218
225
  return [4 /*yield*/, setAttendeeStatuses(mixedEvent.id, [
219
226
  { id: aCompleted_1.id, status: 'Completed' },
220
227
  { id: bNoShow_1.id, status: 'No-showed' },
@@ -222,19 +229,19 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
222
229
  // dUnset intentionally left without a status
223
230
  ])];
224
231
  case 15:
225
- _f.sent();
232
+ _h.sent();
226
233
  return [4 /*yield*/, wait(undefined, 1000)]; // allow all triggers to fire
227
234
  case 16:
228
- _f.sent(); // allow all triggers to fire
235
+ _h.sent(); // allow all triggers to fire
229
236
  return [4 /*yield*/, async_test("mixed: Completed attendee gets only the Completed tag", function () { return tagsOf(aCompleted_1.id); }, { onResult: function (tags) { return tags.includes(TAG['Completed']) && ALL_STATUSES.every(function (s) { return s === 'Completed' || !tags.includes(TAG[s]); }); } })];
230
237
  case 17:
231
- _f.sent();
238
+ _h.sent();
232
239
  return [4 /*yield*/, async_test("mixed: No-showed attendee gets only the No-showed tag", function () { return tagsOf(bNoShow_1.id); }, { onResult: function (tags) { return tags.includes(TAG['No-showed']) && ALL_STATUSES.every(function (s) { return s === 'No-showed' || !tags.includes(TAG[s]); }); } })];
233
240
  case 18:
234
- _f.sent();
241
+ _h.sent();
235
242
  return [4 /*yield*/, async_test("mixed: Cancelled attendee gets only the Cancelled tag", function () { return tagsOf(cCancelled_1.id); }, { onResult: function (tags) { return tags.includes(TAG['Cancelled']) && ALL_STATUSES.every(function (s) { return s === 'Cancelled' || !tags.includes(TAG[s]); }); } })];
236
243
  case 19:
237
- _f.sent();
244
+ _h.sent();
238
245
  return [4 /*yield*/, async_test("mixed: unset attendee receives no tags", function () { return sdk.api.endusers.getOne(dUnset_1.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })
239
246
  // ============================================================
240
247
  // Status transitions (A -> B): changing an attendee's status fires the NEW status's trigger.
@@ -246,7 +253,7 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
246
253
  // ============================================================
247
254
  ];
248
255
  case 20:
249
- _f.sent();
256
+ _h.sent();
250
257
  // ============================================================
251
258
  // Status transitions (A -> B): changing an attendee's status fires the NEW status's trigger.
252
259
  // Exercises both directions of the cancelledGroupAttendees mirroring:
@@ -258,28 +265,28 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
258
265
  log_header("Per-attendee status transitions fire the new status only");
259
266
  return [4 /*yield*/, createEnduser()];
260
267
  case 21:
261
- transA_1 = _f.sent();
268
+ transA_1 = _h.sent();
262
269
  return [4 /*yield*/, createEnduser()];
263
270
  case 22:
264
- transABystander_1 = _f.sent();
271
+ transABystander_1 = _h.sent();
265
272
  return [4 /*yield*/, createGroupEvent([transA_1.id, transABystander_1.id])];
266
273
  case 23:
267
- transAEvent = _f.sent();
274
+ transAEvent = _h.sent();
268
275
  return [4 /*yield*/, setAttendeeStatuses(transAEvent.id, [{ id: transA_1.id, status: 'No-showed' }])];
269
276
  case 24:
270
- _f.sent();
277
+ _h.sent();
271
278
  return [4 /*yield*/, wait(undefined, 750)];
272
279
  case 25:
273
- _f.sent();
280
+ _h.sent();
274
281
  return [4 /*yield*/, async_test("transition step 1: No-showed fires No-showed", function () { return tagsOf(transA_1.id); }, { onResult: function (tags) { return tags.includes(TAG['No-showed']); } })];
275
282
  case 26:
276
- _f.sent();
283
+ _h.sent();
277
284
  return [4 /*yield*/, setAttendeeStatuses(transAEvent.id, [{ id: transA_1.id, status: 'Completed' }])];
278
285
  case 27:
279
- _f.sent();
286
+ _h.sent();
280
287
  return [4 /*yield*/, wait(undefined, 750)];
281
288
  case 28:
282
- _f.sent();
289
+ _h.sent();
283
290
  return [4 /*yield*/, async_test("transition No-showed -> Completed fires Completed (No-showed tag retained, no Cancelled)", function () { return tagsOf(transA_1.id); }, { onResult: function (tags) {
284
291
  return tags.includes(TAG['Completed'])
285
292
  && tags.includes(TAG['No-showed'])
@@ -288,33 +295,33 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
288
295
  }
289
296
  })];
290
297
  case 29:
291
- _f.sent();
298
+ _h.sent();
292
299
  return [4 /*yield*/, async_test("transition (mirrored->unmirrored): bystander never fires", function () { return sdk.api.endusers.getOne(transABystander_1.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })
293
300
  // unmirrored -> mirrored
294
301
  ];
295
302
  case 30:
296
- _f.sent();
303
+ _h.sent();
297
304
  return [4 /*yield*/, createEnduser()];
298
305
  case 31:
299
- transB_1 = _f.sent();
306
+ transB_1 = _h.sent();
300
307
  return [4 /*yield*/, createEnduser()];
301
308
  case 32:
302
- transBBystander_1 = _f.sent();
309
+ transBBystander_1 = _h.sent();
303
310
  return [4 /*yield*/, createGroupEvent([transB_1.id, transBBystander_1.id])];
304
311
  case 33:
305
- transBEvent = _f.sent();
312
+ transBEvent = _h.sent();
306
313
  return [4 /*yield*/, setAttendeeStatuses(transBEvent.id, [{ id: transB_1.id, status: 'Completed' }])];
307
314
  case 34:
308
- _f.sent();
315
+ _h.sent();
309
316
  return [4 /*yield*/, wait(undefined, 750)];
310
317
  case 35:
311
- _f.sent();
318
+ _h.sent();
312
319
  return [4 /*yield*/, setAttendeeStatuses(transBEvent.id, [{ id: transB_1.id, status: 'No-showed' }])];
313
320
  case 36:
314
- _f.sent();
321
+ _h.sent();
315
322
  return [4 /*yield*/, wait(undefined, 750)];
316
323
  case 37:
317
- _f.sent();
324
+ _h.sent();
318
325
  return [4 /*yield*/, async_test("transition Completed -> No-showed fires No-showed (Completed tag retained, no Cancelled)", function () { return tagsOf(transB_1.id); }, { onResult: function (tags) {
319
326
  return tags.includes(TAG['No-showed'])
320
327
  && tags.includes(TAG['Completed'])
@@ -323,7 +330,7 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
323
330
  }
324
331
  })];
325
332
  case 38:
326
- _f.sent();
333
+ _h.sent();
327
334
  return [4 /*yield*/, async_test("transition (unmirrored->mirrored): bystander never fires", function () { return sdk.api.endusers.getOne(transBBystander_1.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })
328
335
  // ============================================================
329
336
  // 'by' filter on the per-attendee Cancelled path. The AttendeeStatusEditor update does not set
@@ -334,7 +341,7 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
334
341
  // ============================================================
335
342
  ];
336
343
  case 39:
337
- _f.sent();
344
+ _h.sent();
338
345
  // ============================================================
339
346
  // 'by' filter on the per-attendee Cancelled path. The AttendeeStatusEditor update does not set
340
347
  // statusChangeSource, so handle_cancelled_event's by-filter (which requires statusChangeSource
@@ -350,7 +357,7 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
350
357
  title: "Group Attendee Cancelled by user",
351
358
  })];
352
359
  case 40:
353
- byUserTrigger = _f.sent();
360
+ byUserTrigger = _h.sent();
354
361
  createdTriggerIds.push(byUserTrigger.id);
355
362
  return [4 /*yield*/, sdk.api.automation_triggers.createOne({
356
363
  event: { type: 'Appointment Cancelled', info: { by: 'enduser' } },
@@ -359,32 +366,32 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
359
366
  title: "Group Attendee Cancelled by enduser",
360
367
  })];
361
368
  case 41:
362
- byEnduserTrigger = _f.sent();
369
+ byEnduserTrigger = _h.sent();
363
370
  createdTriggerIds.push(byEnduserTrigger.id);
364
371
  return [4 /*yield*/, createEnduser()];
365
372
  case 42:
366
- byTarget_1 = _f.sent();
373
+ byTarget_1 = _h.sent();
367
374
  return [4 /*yield*/, createEnduser()];
368
375
  case 43:
369
- byBystander_1 = _f.sent();
376
+ byBystander_1 = _h.sent();
370
377
  return [4 /*yield*/, createGroupEvent([byTarget_1.id, byBystander_1.id])];
371
378
  case 44:
372
- byEvent = _f.sent();
379
+ byEvent = _h.sent();
373
380
  return [4 /*yield*/, setAttendeeStatuses(byEvent.id, [{ id: byTarget_1.id, status: 'Cancelled' }])];
374
381
  case 45:
375
- _f.sent();
382
+ _h.sent();
376
383
  return [4 /*yield*/, wait(undefined, 750)];
377
384
  case 46:
378
- _f.sent();
385
+ _h.sent();
379
386
  return [4 /*yield*/, async_test("per-attendee cancel fires the unfiltered (by: undefined) Cancelled trigger", function () { return tagsOf(byTarget_1.id); }, { onResult: function (tags) { return tags.includes(TAG['Cancelled']); } })];
380
387
  case 47:
381
- _f.sent();
388
+ _h.sent();
382
389
  return [4 /*yield*/, async_test("per-attendee cancel does NOT fire by:'enduser' Cancelled trigger", function () { return tagsOf(byTarget_1.id); }, { onResult: function (tags) { return !tags.includes('Group Attendee Cancelled by:enduser'); } })];
383
390
  case 48:
384
- _f.sent();
391
+ _h.sent();
385
392
  return [4 /*yield*/, async_test("per-attendee cancel does NOT fire by:'user' Cancelled trigger (statusChangeSource unset)", function () { return tagsOf(byTarget_1.id); }, { onResult: function (tags) { return !tags.includes('Group Attendee Cancelled by:user'); } })];
386
393
  case 49:
387
- _f.sent();
394
+ _h.sent();
388
395
  return [4 /*yield*/, async_test("'by' filter case: bystander never fires", function () { return sdk.api.endusers.getOne(byBystander_1.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })
389
396
  // ============================================================
390
397
  // bulk_update cancel_for_attendee fires Cancelled exactly once (via the new handler;
@@ -392,7 +399,7 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
392
399
  // ============================================================
393
400
  ];
394
401
  case 50:
395
- _f.sent();
402
+ _h.sent();
396
403
  // ============================================================
397
404
  // bulk_update cancel_for_attendee fires Cancelled exactly once (via the new handler;
398
405
  // the legacy cancelledGroupAttendees branch is suppressed by the attendeeStatuses filter).
@@ -400,10 +407,10 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
400
407
  log_header("bulk_update cancel_for_attendee fires Cancelled for attendee");
401
408
  return [4 /*yield*/, createEnduser()];
402
409
  case 51:
403
- bulkTarget_1 = _f.sent();
410
+ bulkTarget_1 = _h.sent();
404
411
  return [4 /*yield*/, createEnduser()];
405
412
  case 52:
406
- bulkBystander_1 = _f.sent();
413
+ bulkBystander_1 = _h.sent();
407
414
  now = Date.now();
408
415
  DAY = 24 * 60 * 60 * 1000;
409
416
  return [4 /*yield*/, sdk.api.calendar_events.createOne({
@@ -413,7 +420,7 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
413
420
  attendees: [{ type: 'enduser', id: bulkTarget_1.id }, { type: 'enduser', id: bulkBystander_1.id }],
414
421
  })];
415
422
  case 53:
416
- rootEvent = _f.sent();
423
+ rootEvent = _h.sent();
417
424
  createdEventIds.push(rootEvent.id);
418
425
  return [4 /*yield*/, sdk.api.calendar_events.createOne({
419
426
  title: 'Group Status Test',
@@ -423,7 +430,7 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
423
430
  attendees: [{ type: 'enduser', id: bulkTarget_1.id }, { type: 'enduser', id: bulkBystander_1.id }],
424
431
  })];
425
432
  case 54:
426
- childEvent = _f.sent();
433
+ childEvent = _h.sent();
427
434
  createdEventIds.push(childEvent.id);
428
435
  return [4 /*yield*/, sdk.api.calendar_events.bulk_update({
429
436
  recurringEventId: rootEvent.id,
@@ -432,122 +439,331 @@ export var group_event_attendee_status_triggers_tests = function (_a) {
432
439
  enduserId: bulkTarget_1.id,
433
440
  })];
434
441
  case 55:
435
- _f.sent();
442
+ _h.sent();
436
443
  return [4 /*yield*/, wait(undefined, 750)];
437
444
  case 56:
438
- _f.sent();
445
+ _h.sent();
439
446
  return [4 /*yield*/, async_test("cancel_for_attendee fires Cancelled trigger for the target", function () { return tagsOf(bulkTarget_1.id); }, { onResult: function (tags) { return tags.includes(TAG['Cancelled']); } })];
440
447
  case 57:
441
- _f.sent();
448
+ _h.sent();
442
449
  return [4 /*yield*/, async_test("cancel_for_attendee does NOT fire for the bystander", function () { return sdk.api.endusers.getOne(bulkBystander_1.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })
443
450
  // ============================================================
444
451
  // 'Confirmed' and clearing a status fire nothing.
445
452
  // ============================================================
446
453
  ];
447
454
  case 58:
448
- _f.sent();
455
+ _h.sent();
449
456
  // ============================================================
450
457
  // 'Confirmed' and clearing a status fire nothing.
451
458
  // ============================================================
452
459
  log_header("Confirmed / cleared statuses fire no triggers");
453
460
  return [4 /*yield*/, createEnduser()];
454
461
  case 59:
455
- confirmEnduser_1 = _f.sent();
462
+ confirmEnduser_1 = _h.sent();
456
463
  return [4 /*yield*/, createEnduser()];
457
464
  case 60:
458
- clearEnduser_1 = _f.sent();
465
+ clearEnduser_1 = _h.sent();
459
466
  return [4 /*yield*/, createGroupEvent([confirmEnduser_1.id, clearEnduser_1.id])
460
467
  // set clearEnduser to No-showed, then clear it; set confirmEnduser to Confirmed
461
468
  ];
462
469
  case 61:
463
- noopEvent = _f.sent();
470
+ noopEvent = _h.sent();
464
471
  // set clearEnduser to No-showed, then clear it; set confirmEnduser to Confirmed
465
472
  return [4 /*yield*/, setAttendeeStatuses(noopEvent.id, [{ id: clearEnduser_1.id, status: 'No-showed' }])];
466
473
  case 62:
467
474
  // set clearEnduser to No-showed, then clear it; set confirmEnduser to Confirmed
468
- _f.sent();
475
+ _h.sent();
469
476
  return [4 /*yield*/, wait(undefined, 750)];
470
477
  case 63:
471
- _f.sent();
478
+ _h.sent();
472
479
  return [4 /*yield*/, setAttendeeStatuses(noopEvent.id, [{ id: confirmEnduser_1.id, status: 'Confirmed' }])]; // also clears clearEnduser
473
480
  case 64:
474
- _f.sent(); // also clears clearEnduser
481
+ _h.sent(); // also clears clearEnduser
475
482
  return [4 /*yield*/, wait(undefined, 750)];
476
483
  case 65:
477
- _f.sent();
484
+ _h.sent();
478
485
  return [4 /*yield*/, async_test("'Confirmed' status fires no trigger", function () { return sdk.api.endusers.getOne(confirmEnduser_1.id); }, { onResult: function (e) { var _a; return !((_a = e.tags) === null || _a === void 0 ? void 0 : _a.length); } })
479
486
  // clearEnduser previously got the No-showed tag (that firing is expected); clearing must not
480
487
  // add anything new. Assert it still has exactly the one No-showed tag and nothing else.
481
488
  ];
482
489
  case 66:
483
- _f.sent();
490
+ _h.sent();
484
491
  // clearEnduser previously got the No-showed tag (that firing is expected); clearing must not
485
492
  // add anything new. Assert it still has exactly the one No-showed tag and nothing else.
486
- return [4 /*yield*/, async_test("clearing a status fires no additional trigger", function () { return tagsOf(clearEnduser_1.id); }, { onResult: function (tags) { return tags.length === 1 && tags.includes(TAG['No-showed']); } })];
493
+ return [4 /*yield*/, async_test("clearing a status fires no additional trigger", function () { return tagsOf(clearEnduser_1.id); }, { onResult: function (tags) { return tags.length === 1 && tags.includes(TAG['No-showed']); } })
494
+ // ============================================================
495
+ // Marking the WHOLE event Complete must not fan "Appointment Completed" out to attendees who
496
+ // already have an explicit per-attendee status — they were resolved individually (and already
497
+ // fired their own trigger via handle_attendee_status_change_triggers). Attendees with no status,
498
+ // or 'Confirmed', are still active participants and must still fire.
499
+ //
500
+ // Each case uses fresh endusers and a fresh event: triggers are throttled for 60s per
501
+ // trigger-per-enduser, and the completion handler early-returns once completedAt is already set.
502
+ //
503
+ // Not covered here: per-attendee 'Completed' followed by event-wide completion. That duplicate
504
+ // fire is already swallowed by the 60s throttle (which is applied before the action, and Add Tags
505
+ // is idempotent), so the assertion would pass with or without the filter.
506
+ // ============================================================
507
+ ];
487
508
  case 67:
488
509
  // clearEnduser previously got the No-showed tag (that firing is expected); clearing must not
489
510
  // add anything new. Assert it still has exactly the one No-showed tag and nothing else.
490
- _f.sent();
491
- return [3 /*break*/, 87];
511
+ _h.sent();
512
+ // ============================================================
513
+ // Marking the WHOLE event Complete must not fan "Appointment Completed" out to attendees who
514
+ // already have an explicit per-attendee status — they were resolved individually (and already
515
+ // fired their own trigger via handle_attendee_status_change_triggers). Attendees with no status,
516
+ // or 'Confirmed', are still active participants and must still fire.
517
+ //
518
+ // Each case uses fresh endusers and a fresh event: triggers are throttled for 60s per
519
+ // trigger-per-enduser, and the completion handler early-returns once completedAt is already set.
520
+ //
521
+ // Not covered here: per-attendee 'Completed' followed by event-wide completion. That duplicate
522
+ // fire is already swallowed by the 60s throttle (which is applied before the action, and Add Tags
523
+ // is idempotent), so the assertion would pass with or without the filter.
524
+ // ============================================================
525
+ log_header("Event-wide completion respects per-attendee statuses");
526
+ _loop_2 = function (status_3) {
527
+ var target, active, event_2;
528
+ return __generator(this, function (_k) {
529
+ switch (_k.label) {
530
+ case 0: return [4 /*yield*/, createEnduser()];
531
+ case 1:
532
+ target = _k.sent();
533
+ return [4 /*yield*/, createEnduser()];
534
+ case 2:
535
+ active = _k.sent();
536
+ return [4 /*yield*/, createGroupEvent([target.id, active.id])];
537
+ case 3:
538
+ event_2 = _k.sent();
539
+ return [4 /*yield*/, setAttendeeStatuses(event_2.id, [{ id: target.id, status: status_3 }])];
540
+ case 4:
541
+ _k.sent();
542
+ return [4 /*yield*/, wait(undefined, 750)
543
+ // pre-condition: the per-attendee status fired its own trigger
544
+ ];
545
+ case 5:
546
+ _k.sent();
547
+ // pre-condition: the per-attendee status fired its own trigger
548
+ return [4 /*yield*/, async_test("event-wide completion setup: '".concat(status_3, "' attendee has the '").concat(status_3, "' tag"), function () { return tagsOf(target.id); }, { onResult: function (tags) { return tags.includes(TAG[status_3]); } })];
549
+ case 6:
550
+ // pre-condition: the per-attendee status fired its own trigger
551
+ _k.sent();
552
+ return [4 /*yield*/, markEventCompleted(event_2.id)];
553
+ case 7:
554
+ _k.sent();
555
+ return [4 /*yield*/, wait(undefined, 1000)];
556
+ case 8:
557
+ _k.sent();
558
+ return [4 /*yield*/, async_test("event-wide completion does NOT fire Completed for the '".concat(status_3, "' attendee"), function () { return tagsOf(target.id); }, { onResult: function (tags) { return !tags.includes(TAG['Completed']); } })];
559
+ case 9:
560
+ _k.sent();
561
+ return [4 /*yield*/, async_test("event-wide completion leaves the '".concat(status_3, "' attendee with only its own tag"), function () { return tagsOf(target.id); }, { onResult: function (tags) { return tags.length === 1 && tags.includes(TAG[status_3]); } })
562
+ // guard against over-filtering: the un-statused attendee must still be completed
563
+ ];
564
+ case 10:
565
+ _k.sent();
566
+ // guard against over-filtering: the un-statused attendee must still be completed
567
+ return [4 /*yield*/, async_test("event-wide completion still fires Completed for the active attendee (alongside '".concat(status_3, "')"), function () { return tagsOf(active.id); }, { onResult: function (tags) { return tags.includes(TAG['Completed']); } })];
568
+ case 11:
569
+ // guard against over-filtering: the un-statused attendee must still be completed
570
+ _k.sent();
571
+ return [2 /*return*/];
572
+ }
573
+ });
574
+ };
575
+ _c = 0, _d = ['No-showed', 'Cancelled', 'Rescheduled'];
576
+ _h.label = 68;
492
577
  case 68:
493
- _c = 0, createdEventIds_1 = createdEventIds;
494
- _f.label = 69;
578
+ if (!(_c < _d.length)) return [3 /*break*/, 71];
579
+ status_3 = _d[_c];
580
+ return [5 /*yield**/, _loop_2(status_3)];
495
581
  case 69:
496
- if (!(_c < createdEventIds_1.length)) return [3 /*break*/, 74];
497
- id = createdEventIds_1[_c];
498
- _f.label = 70;
582
+ _h.sent();
583
+ _h.label = 70;
499
584
  case 70:
500
- _f.trys.push([70, 72, , 73]);
501
- return [4 /*yield*/, sdk.api.calendar_events.deleteOne(id)];
585
+ _c++;
586
+ return [3 /*break*/, 68];
502
587
  case 71:
503
- _f.sent();
504
- return [3 /*break*/, 73];
588
+ // cancelledGroupAttendees with no attendeeStatuses entry — the shape written by the patient
589
+ // portal when an enduser cancels themselves out of a group event.
590
+ log_header("Event-wide completion respects legacy cancelledGroupAttendees");
591
+ return [4 /*yield*/, createEnduser()];
505
592
  case 72:
506
- _1 = _f.sent();
507
- return [3 /*break*/, 73];
593
+ portalCancelled_1 = _h.sent();
594
+ return [4 /*yield*/, createEnduser()];
508
595
  case 73:
509
- _c++;
510
- return [3 /*break*/, 69];
596
+ portalActive_1 = _h.sent();
597
+ return [4 /*yield*/, createGroupEvent([portalCancelled_1.id, portalActive_1.id])];
511
598
  case 74:
512
- _d = 0, createdEnduserIds_1 = createdEnduserIds;
513
- _f.label = 75;
599
+ portalEvent = _h.sent();
600
+ return [4 /*yield*/, sdk.api.calendar_events.updateOne(portalEvent.id, {
601
+ cancelledGroupAttendees: [{ id: portalCancelled_1.id, at: new Date() }],
602
+ }, { replaceObjectFields: true })];
514
603
  case 75:
515
- if (!(_d < createdEnduserIds_1.length)) return [3 /*break*/, 80];
516
- id = createdEnduserIds_1[_d];
517
- _f.label = 76;
604
+ _h.sent();
605
+ return [4 /*yield*/, wait(undefined, 750)
606
+ // pre-condition: the legacy branch fires Cancelled for them
607
+ ];
518
608
  case 76:
519
- _f.trys.push([76, 78, , 79]);
520
- return [4 /*yield*/, sdk.api.endusers.deleteOne(id)];
609
+ _h.sent();
610
+ // pre-condition: the legacy branch fires Cancelled for them
611
+ return [4 /*yield*/, async_test("legacy cancelledGroupAttendees setup: attendee has the Cancelled tag", function () { return tagsOf(portalCancelled_1.id); }, { onResult: function (tags) { return tags.includes(TAG['Cancelled']); } })];
521
612
  case 77:
522
- _f.sent();
523
- return [3 /*break*/, 79];
613
+ // pre-condition: the legacy branch fires Cancelled for them
614
+ _h.sent();
615
+ return [4 /*yield*/, markEventCompleted(portalEvent.id)];
524
616
  case 78:
525
- _2 = _f.sent();
526
- return [3 /*break*/, 79];
617
+ _h.sent();
618
+ return [4 /*yield*/, wait(undefined, 1000)];
527
619
  case 79:
528
- _d++;
529
- return [3 /*break*/, 75];
620
+ _h.sent();
621
+ return [4 /*yield*/, async_test("event-wide completion does NOT fire Completed for a cancelledGroupAttendees attendee", function () { return tagsOf(portalCancelled_1.id); }, { onResult: function (tags) { return !tags.includes(TAG['Completed']); } })];
530
622
  case 80:
531
- _e = 0, createdTriggerIds_1 = createdTriggerIds;
532
- _f.label = 81;
623
+ _h.sent();
624
+ return [4 /*yield*/, async_test("event-wide completion still fires Completed for the active attendee (legacy cancel case)", function () { return tagsOf(portalActive_1.id); }, { onResult: function (tags) { return tags.includes(TAG['Completed']); } })
625
+ // ============================================================
626
+ // Over-filtering guards: 'Confirmed' and no-status attendees must still complete.
627
+ // ============================================================
628
+ ];
533
629
  case 81:
534
- if (!(_e < createdTriggerIds_1.length)) return [3 /*break*/, 86];
535
- id = createdTriggerIds_1[_e];
536
- _f.label = 82;
630
+ _h.sent();
631
+ // ============================================================
632
+ // Over-filtering guards: 'Confirmed' and no-status attendees must still complete.
633
+ // ============================================================
634
+ log_header("Event-wide completion still fires for Confirmed / un-statused attendees");
635
+ return [4 /*yield*/, createEnduser()];
537
636
  case 82:
538
- _f.trys.push([82, 84, , 85]);
539
- return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(id)];
637
+ confirmed_1 = _h.sent();
638
+ return [4 /*yield*/, createEnduser()];
540
639
  case 83:
541
- _f.sent();
542
- return [3 /*break*/, 85];
640
+ confirmedBystander_1 = _h.sent();
641
+ return [4 /*yield*/, createGroupEvent([confirmed_1.id, confirmedBystander_1.id])];
543
642
  case 84:
544
- _3 = _f.sent();
545
- return [3 /*break*/, 85];
643
+ confirmedEvent = _h.sent();
644
+ return [4 /*yield*/, setAttendeeStatuses(confirmedEvent.id, [{ id: confirmed_1.id, status: 'Confirmed' }])];
546
645
  case 85:
646
+ _h.sent();
647
+ return [4 /*yield*/, wait(undefined, 750)];
648
+ case 86:
649
+ _h.sent();
650
+ return [4 /*yield*/, markEventCompleted(confirmedEvent.id)];
651
+ case 87:
652
+ _h.sent();
653
+ return [4 /*yield*/, wait(undefined, 1000)];
654
+ case 88:
655
+ _h.sent();
656
+ return [4 /*yield*/, async_test("event-wide completion fires Completed for a 'Confirmed' attendee", function () { return tagsOf(confirmed_1.id); }, { onResult: function (tags) { return tags.includes(TAG['Completed']); } })];
657
+ case 89:
658
+ _h.sent();
659
+ return [4 /*yield*/, async_test("event-wide completion fires Completed for the bystander alongside 'Confirmed'", function () { return tagsOf(confirmedBystander_1.id); }, { onResult: function (tags) { return tags.includes(TAG['Completed']); } })
660
+ // baseline: a group event with no per-attendee statuses completes for everyone
661
+ ];
662
+ case 90:
663
+ _h.sent();
664
+ return [4 /*yield*/, createEnduser()];
665
+ case 91:
666
+ plain1 = _h.sent();
667
+ return [4 /*yield*/, createEnduser()];
668
+ case 92:
669
+ plain2 = _h.sent();
670
+ return [4 /*yield*/, createEnduser()];
671
+ case 93:
672
+ plain3 = _h.sent();
673
+ return [4 /*yield*/, createGroupEvent([plain1.id, plain2.id, plain3.id])];
674
+ case 94:
675
+ plainEvent = _h.sent();
676
+ return [4 /*yield*/, markEventCompleted(plainEvent.id)];
677
+ case 95:
678
+ _h.sent();
679
+ return [4 /*yield*/, wait(undefined, 1000)];
680
+ case 96:
681
+ _h.sent();
682
+ plainAttendees = [plain1, plain2, plain3];
683
+ _loop_3 = function (i) {
684
+ var enduserId;
685
+ return __generator(this, function (_l) {
686
+ switch (_l.label) {
687
+ case 0:
688
+ enduserId = plainAttendees[i].id;
689
+ return [4 /*yield*/, async_test("event-wide completion fires Completed for un-statused attendee #".concat(i + 1), function () { return tagsOf(enduserId); }, { onResult: function (tags) { return tags.includes(TAG['Completed']); } })];
690
+ case 1:
691
+ _l.sent();
692
+ return [2 /*return*/];
693
+ }
694
+ });
695
+ };
696
+ i = 0;
697
+ _h.label = 97;
698
+ case 97:
699
+ if (!(i < plainAttendees.length)) return [3 /*break*/, 100];
700
+ return [5 /*yield**/, _loop_3(i)];
701
+ case 98:
702
+ _h.sent();
703
+ _h.label = 99;
704
+ case 99:
705
+ i++;
706
+ return [3 /*break*/, 97];
707
+ case 100: return [3 /*break*/, 120];
708
+ case 101:
709
+ _e = 0, createdEventIds_1 = createdEventIds;
710
+ _h.label = 102;
711
+ case 102:
712
+ if (!(_e < createdEventIds_1.length)) return [3 /*break*/, 107];
713
+ id = createdEventIds_1[_e];
714
+ _h.label = 103;
715
+ case 103:
716
+ _h.trys.push([103, 105, , 106]);
717
+ return [4 /*yield*/, sdk.api.calendar_events.deleteOne(id)];
718
+ case 104:
719
+ _h.sent();
720
+ return [3 /*break*/, 106];
721
+ case 105:
722
+ _1 = _h.sent();
723
+ return [3 /*break*/, 106];
724
+ case 106:
547
725
  _e++;
548
- return [3 /*break*/, 81];
549
- case 86: return [7 /*endfinally*/];
550
- case 87: return [2 /*return*/];
726
+ return [3 /*break*/, 102];
727
+ case 107:
728
+ _f = 0, createdEnduserIds_1 = createdEnduserIds;
729
+ _h.label = 108;
730
+ case 108:
731
+ if (!(_f < createdEnduserIds_1.length)) return [3 /*break*/, 113];
732
+ id = createdEnduserIds_1[_f];
733
+ _h.label = 109;
734
+ case 109:
735
+ _h.trys.push([109, 111, , 112]);
736
+ return [4 /*yield*/, sdk.api.endusers.deleteOne(id)];
737
+ case 110:
738
+ _h.sent();
739
+ return [3 /*break*/, 112];
740
+ case 111:
741
+ _2 = _h.sent();
742
+ return [3 /*break*/, 112];
743
+ case 112:
744
+ _f++;
745
+ return [3 /*break*/, 108];
746
+ case 113:
747
+ _g = 0, createdTriggerIds_1 = createdTriggerIds;
748
+ _h.label = 114;
749
+ case 114:
750
+ if (!(_g < createdTriggerIds_1.length)) return [3 /*break*/, 119];
751
+ id = createdTriggerIds_1[_g];
752
+ _h.label = 115;
753
+ case 115:
754
+ _h.trys.push([115, 117, , 118]);
755
+ return [4 /*yield*/, sdk.api.automation_triggers.deleteOne(id)];
756
+ case 116:
757
+ _h.sent();
758
+ return [3 /*break*/, 118];
759
+ case 117:
760
+ _3 = _h.sent();
761
+ return [3 /*break*/, 118];
762
+ case 118:
763
+ _g++;
764
+ return [3 /*break*/, 114];
765
+ case 119: return [7 /*endfinally*/];
766
+ case 120: return [2 /*return*/];
551
767
  }
552
768
  });
553
769
  });