@tellescope/sdk 1.237.0 → 1.237.2
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.
- package/lib/cjs/sdk.d.ts +1 -0
- package/lib/cjs/sdk.d.ts.map +1 -1
- package/lib/cjs/sdk.js +1 -0
- package/lib/cjs/sdk.js.map +1 -1
- package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.d.ts.map +1 -1
- package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.js +227 -64
- package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/inbox_thread_draft_scheduled.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/inbox_thread_draft_scheduled.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/inbox_thread_draft_scheduled.test.js +717 -0
- package/lib/cjs/tests/api_tests/inbox_thread_draft_scheduled.test.js.map +1 -0
- package/lib/cjs/tests/api_tests/inbox_thread_mdb_filter.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/inbox_thread_mdb_filter.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/inbox_thread_mdb_filter.test.js +372 -0
- package/lib/cjs/tests/api_tests/inbox_thread_mdb_filter.test.js.map +1 -0
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +575 -105
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/sdk.d.ts +1 -0
- package/lib/esm/sdk.d.ts.map +1 -1
- package/lib/esm/sdk.js +1 -0
- package/lib/esm/sdk.js.map +1 -1
- package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.d.ts.map +1 -1
- package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.js +227 -64
- package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.js.map +1 -1
- package/lib/esm/tests/api_tests/inbox_thread_draft_scheduled.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/inbox_thread_draft_scheduled.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/inbox_thread_draft_scheduled.test.js +713 -0
- package/lib/esm/tests/api_tests/inbox_thread_draft_scheduled.test.js.map +1 -0
- package/lib/esm/tests/api_tests/inbox_thread_mdb_filter.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/inbox_thread_mdb_filter.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/inbox_thread_mdb_filter.test.js +368 -0
- package/lib/esm/tests/api_tests/inbox_thread_mdb_filter.test.js.map +1 -0
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +575 -105
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/sdk.ts +4 -0
- package/src/tests/api_tests/inbox_thread_assignment_updates.test.ts +149 -0
- package/src/tests/api_tests/inbox_thread_draft_scheduled.test.ts +625 -0
- package/src/tests/tests.ts +401 -1
- package/test_generated.pdf +0 -0
|
@@ -0,0 +1,717 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.inbox_thread_draft_scheduled_tests = void 0;
|
|
40
|
+
require('source-map-support').install();
|
|
41
|
+
var sdk_1 = require("../../sdk");
|
|
42
|
+
var testing_1 = require("@tellescope/testing");
|
|
43
|
+
var setup_1 = require("../setup");
|
|
44
|
+
var host = process.env.API_URL || 'http://localhost:8080';
|
|
45
|
+
var inbox_thread_draft_scheduled_tests = function (_a) {
|
|
46
|
+
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
47
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
48
|
+
var timestamp, from, testUser, testEnduser, resetAndBuildThreads, phoneNumber_1, enduserPhoneNumber_1, sentSMS, draftSMS, loadedThreads, smsThread, futureDate, scheduledSMS, loadedThreads2, threadWithScheduled, emailSubject_1, sentEmail, draftEmail, loadedThreads3, emailThread, scheduledEmail, loadedThreads4, emailThreadWithScheduled, draftOnlyEnduserPhoneNumber_1, draftOnlySMS, loadedThreads5, draftOnlyThread, sentOnlyPhoneNumber_1, sentOnlyEnduserPhoneNumber_1, loadedThreads6, sentOnlyThread, chatRoom, farFuture, draftChat, loadedThreads7, chatThreadBefore_1, loadedThreads7b, chatThreadWithDraft, loadedThreads8, chatThreadAfter, deleteTestPhoneNumber_1, deleteTestEnduserPhoneNumber_1, draftSmsToDelete, loadedThreads9a, smsDeleteThread_1, loadedThreads9b, smsDeleteThreadAfter, deleteEmailSubject_1, draftEmailToDelete, loadedThreads10a, emailDeleteThread_1, loadedThreads10b, emailDeleteThreadAfter, chatRoomForDeletion, farFuture2, draftChatToDelete, loadedThreads11a, chatDeleteThread_1, loadedThreads11b, chatDeleteThreadWithDraft, loadedThreads11c, chatDeleteThreadAfter;
|
|
49
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
50
|
+
return __generator(this, function (_v) {
|
|
51
|
+
switch (_v.label) {
|
|
52
|
+
case 0:
|
|
53
|
+
(0, testing_1.log_header)("InboxThread Draft and Scheduled Message Tests");
|
|
54
|
+
timestamp = Date.now();
|
|
55
|
+
from = new Date(Date.now() - 1000 * 60 * 60) // 1 hour ago
|
|
56
|
+
;
|
|
57
|
+
return [4 /*yield*/, sdk.api.users.createOne({
|
|
58
|
+
fname: "Test",
|
|
59
|
+
lname: "User",
|
|
60
|
+
email: "test-draft-scheduled-".concat(timestamp, "@test.com"),
|
|
61
|
+
notificationEmailsDisabled: true
|
|
62
|
+
})];
|
|
63
|
+
case 1:
|
|
64
|
+
testUser = _v.sent();
|
|
65
|
+
return [4 /*yield*/, sdk.api.endusers.createOne({
|
|
66
|
+
fname: "Test",
|
|
67
|
+
lname: "Patient",
|
|
68
|
+
email: "test-patient-draft-".concat(timestamp, "@test.com"),
|
|
69
|
+
phone: "+15555555555", // Required for SMS tests
|
|
70
|
+
})
|
|
71
|
+
// Helper to reset and rebuild threads
|
|
72
|
+
];
|
|
73
|
+
case 2:
|
|
74
|
+
testEnduser = _v.sent();
|
|
75
|
+
resetAndBuildThreads = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
76
|
+
return __generator(this, function (_a) {
|
|
77
|
+
switch (_a.label) {
|
|
78
|
+
case 0: return [4 /*yield*/, sdk.api.inbox_threads.reset_threads()];
|
|
79
|
+
case 1:
|
|
80
|
+
_a.sent();
|
|
81
|
+
return [4 /*yield*/, sdk.api.inbox_threads.build_threads({ from: from, to: new Date() })];
|
|
82
|
+
case 2:
|
|
83
|
+
_a.sent();
|
|
84
|
+
return [2 /*return*/];
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}); };
|
|
88
|
+
_v.label = 3;
|
|
89
|
+
case 3:
|
|
90
|
+
_v.trys.push([3, , 62, 66]);
|
|
91
|
+
// ===== SMS Draft/Scheduled Tests =====
|
|
92
|
+
(0, testing_1.log_header)("SMS Draft and Scheduled Tests");
|
|
93
|
+
// Test 1: Draft SMS should be tracked in draftMessageIds but excluded from preview
|
|
94
|
+
console.log("Testing draft SMS tracking...");
|
|
95
|
+
phoneNumber_1 = "+15555555550";
|
|
96
|
+
enduserPhoneNumber_1 = "+15555555551";
|
|
97
|
+
// Create an inbound SMS to establish the thread with proper phone numbers
|
|
98
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
99
|
+
message: "Inbound message to establish thread",
|
|
100
|
+
enduserId: testEnduser.id,
|
|
101
|
+
userId: testUser.id,
|
|
102
|
+
inbound: true,
|
|
103
|
+
phoneNumber: phoneNumber_1,
|
|
104
|
+
enduserPhoneNumber: enduserPhoneNumber_1,
|
|
105
|
+
logOnly: true,
|
|
106
|
+
})
|
|
107
|
+
// Create a regular outbound SMS
|
|
108
|
+
];
|
|
109
|
+
case 4:
|
|
110
|
+
// Create an inbound SMS to establish the thread with proper phone numbers
|
|
111
|
+
_v.sent();
|
|
112
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
113
|
+
message: "This is a sent message",
|
|
114
|
+
enduserId: testEnduser.id,
|
|
115
|
+
userId: testUser.id,
|
|
116
|
+
inbound: false,
|
|
117
|
+
phoneNumber: phoneNumber_1,
|
|
118
|
+
enduserPhoneNumber: enduserPhoneNumber_1,
|
|
119
|
+
logOnly: true,
|
|
120
|
+
})
|
|
121
|
+
// Create a draft SMS
|
|
122
|
+
];
|
|
123
|
+
case 5:
|
|
124
|
+
sentSMS = _v.sent();
|
|
125
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
126
|
+
message: "This is a draft message",
|
|
127
|
+
enduserId: testEnduser.id,
|
|
128
|
+
userId: testUser.id,
|
|
129
|
+
inbound: false,
|
|
130
|
+
phoneNumber: phoneNumber_1,
|
|
131
|
+
enduserPhoneNumber: enduserPhoneNumber_1,
|
|
132
|
+
isDraft: true,
|
|
133
|
+
logOnly: true,
|
|
134
|
+
})
|
|
135
|
+
// Build threads from messages
|
|
136
|
+
];
|
|
137
|
+
case 6:
|
|
138
|
+
draftSMS = _v.sent();
|
|
139
|
+
// Build threads from messages
|
|
140
|
+
return [4 /*yield*/, resetAndBuildThreads()
|
|
141
|
+
// Load the thread and verify
|
|
142
|
+
];
|
|
143
|
+
case 7:
|
|
144
|
+
// Build threads from messages
|
|
145
|
+
_v.sent();
|
|
146
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
147
|
+
case 8:
|
|
148
|
+
loadedThreads = _v.sent();
|
|
149
|
+
smsThread = loadedThreads.threads.find(function (t) {
|
|
150
|
+
return t.type === 'SMS' && t.phoneNumber === phoneNumber_1 && t.enduserPhoneNumber === enduserPhoneNumber_1;
|
|
151
|
+
});
|
|
152
|
+
(0, testing_1.assert)(!!smsThread, "SMS thread should be found");
|
|
153
|
+
(0, testing_1.assert)(((_b = smsThread.draftMessageIds) === null || _b === void 0 ? void 0 : _b.includes(draftSMS.id)) === true, "Draft SMS ID should be in draftMessageIds. Got: ".concat(JSON.stringify(smsThread.draftMessageIds)));
|
|
154
|
+
(0, testing_1.assert)(((_c = smsThread.preview) === null || _c === void 0 ? void 0 : _c.includes("This is a sent message")) === true, "Preview should be from sent message, not draft. Got: ".concat(smsThread.preview));
|
|
155
|
+
console.log("✅ Draft SMS tracking test passed");
|
|
156
|
+
// Test 2: Scheduled SMS (future sendAt) should be tracked in scheduledMessageIds
|
|
157
|
+
console.log("Testing scheduled SMS tracking...");
|
|
158
|
+
futureDate = new Date(Date.now() + 24 * 60 * 60 * 1000) // 24 hours from now
|
|
159
|
+
;
|
|
160
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
161
|
+
message: "This is a scheduled message",
|
|
162
|
+
enduserId: testEnduser.id,
|
|
163
|
+
userId: testUser.id,
|
|
164
|
+
inbound: false,
|
|
165
|
+
phoneNumber: phoneNumber_1,
|
|
166
|
+
enduserPhoneNumber: enduserPhoneNumber_1,
|
|
167
|
+
sendAt: futureDate,
|
|
168
|
+
logOnly: true,
|
|
169
|
+
})
|
|
170
|
+
// Rebuild threads
|
|
171
|
+
];
|
|
172
|
+
case 9:
|
|
173
|
+
scheduledSMS = _v.sent();
|
|
174
|
+
// Rebuild threads
|
|
175
|
+
return [4 /*yield*/, resetAndBuildThreads()];
|
|
176
|
+
case 10:
|
|
177
|
+
// Rebuild threads
|
|
178
|
+
_v.sent();
|
|
179
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
180
|
+
case 11:
|
|
181
|
+
loadedThreads2 = _v.sent();
|
|
182
|
+
threadWithScheduled = loadedThreads2.threads.find(function (t) {
|
|
183
|
+
return t.type === 'SMS' && t.phoneNumber === phoneNumber_1 && t.enduserPhoneNumber === enduserPhoneNumber_1;
|
|
184
|
+
});
|
|
185
|
+
(0, testing_1.assert)(!!threadWithScheduled, "SMS thread should be found");
|
|
186
|
+
(0, testing_1.assert)(((_d = threadWithScheduled.scheduledMessageIds) === null || _d === void 0 ? void 0 : _d.includes(scheduledSMS.id)) === true, "Scheduled SMS ID should be in scheduledMessageIds. Got: ".concat(JSON.stringify(threadWithScheduled.scheduledMessageIds)));
|
|
187
|
+
(0, testing_1.assert)(((_e = threadWithScheduled.preview) === null || _e === void 0 ? void 0 : _e.includes("This is a scheduled message")) !== true, "Preview should NOT be from scheduled message. Got: ".concat(threadWithScheduled.preview));
|
|
188
|
+
console.log("✅ Scheduled SMS tracking test passed");
|
|
189
|
+
// ===== Email Draft/Scheduled Tests =====
|
|
190
|
+
(0, testing_1.log_header)("Email Draft and Scheduled Tests");
|
|
191
|
+
// Test 3: Draft email should be tracked in draftMessageIds
|
|
192
|
+
console.log("Testing draft email tracking...");
|
|
193
|
+
emailSubject_1 = "Draft Test Email ".concat(timestamp);
|
|
194
|
+
return [4 /*yield*/, sdk.api.emails.createOne({
|
|
195
|
+
subject: emailSubject_1,
|
|
196
|
+
textContent: "This is a sent email",
|
|
197
|
+
enduserId: testEnduser.id,
|
|
198
|
+
userId: testUser.id,
|
|
199
|
+
messageId: "sent-email-".concat(timestamp),
|
|
200
|
+
logOnly: true,
|
|
201
|
+
})
|
|
202
|
+
// Create a draft email
|
|
203
|
+
];
|
|
204
|
+
case 12:
|
|
205
|
+
sentEmail = _v.sent();
|
|
206
|
+
return [4 /*yield*/, sdk.api.emails.createOne({
|
|
207
|
+
subject: emailSubject_1,
|
|
208
|
+
textContent: "This is a draft email",
|
|
209
|
+
enduserId: testEnduser.id,
|
|
210
|
+
userId: testUser.id,
|
|
211
|
+
messageId: "draft-email-".concat(timestamp),
|
|
212
|
+
isDraft: true,
|
|
213
|
+
logOnly: true,
|
|
214
|
+
})
|
|
215
|
+
// Rebuild threads
|
|
216
|
+
];
|
|
217
|
+
case 13:
|
|
218
|
+
draftEmail = _v.sent();
|
|
219
|
+
// Rebuild threads
|
|
220
|
+
return [4 /*yield*/, resetAndBuildThreads()];
|
|
221
|
+
case 14:
|
|
222
|
+
// Rebuild threads
|
|
223
|
+
_v.sent();
|
|
224
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
225
|
+
case 15:
|
|
226
|
+
loadedThreads3 = _v.sent();
|
|
227
|
+
emailThread = loadedThreads3.threads.find(function (t) { return t.type === 'Email' && t.title === emailSubject_1; });
|
|
228
|
+
(0, testing_1.assert)(!!emailThread, "Email thread should be found");
|
|
229
|
+
(0, testing_1.assert)(((_f = emailThread.draftMessageIds) === null || _f === void 0 ? void 0 : _f.includes(draftEmail.id)) === true, "Draft Email ID should be in draftMessageIds. Got: ".concat(JSON.stringify(emailThread.draftMessageIds)));
|
|
230
|
+
(0, testing_1.assert)(((_g = emailThread.preview) === null || _g === void 0 ? void 0 : _g.includes("This is a sent email")) === true, "Preview should be from sent email, not draft. Got: ".concat(emailThread.preview));
|
|
231
|
+
console.log("✅ Draft email tracking test passed");
|
|
232
|
+
// Test 4: Scheduled email (future sendAt) should be tracked in scheduledMessageIds
|
|
233
|
+
console.log("Testing scheduled email tracking...");
|
|
234
|
+
return [4 /*yield*/, sdk.api.emails.createOne({
|
|
235
|
+
subject: emailSubject_1,
|
|
236
|
+
textContent: "This is a scheduled email",
|
|
237
|
+
enduserId: testEnduser.id,
|
|
238
|
+
userId: testUser.id,
|
|
239
|
+
messageId: "scheduled-email-".concat(timestamp),
|
|
240
|
+
sendAt: futureDate,
|
|
241
|
+
logOnly: true,
|
|
242
|
+
})
|
|
243
|
+
// Rebuild threads
|
|
244
|
+
];
|
|
245
|
+
case 16:
|
|
246
|
+
scheduledEmail = _v.sent();
|
|
247
|
+
// Rebuild threads
|
|
248
|
+
return [4 /*yield*/, resetAndBuildThreads()];
|
|
249
|
+
case 17:
|
|
250
|
+
// Rebuild threads
|
|
251
|
+
_v.sent();
|
|
252
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
253
|
+
case 18:
|
|
254
|
+
loadedThreads4 = _v.sent();
|
|
255
|
+
emailThreadWithScheduled = loadedThreads4.threads.find(function (t) { return t.type === 'Email' && t.title === emailSubject_1; });
|
|
256
|
+
(0, testing_1.assert)(!!emailThreadWithScheduled, "Email thread should be found");
|
|
257
|
+
(0, testing_1.assert)(((_h = emailThreadWithScheduled.scheduledMessageIds) === null || _h === void 0 ? void 0 : _h.includes(scheduledEmail.id)) === true, "Scheduled Email ID should be in scheduledMessageIds. Got: ".concat(JSON.stringify(emailThreadWithScheduled.scheduledMessageIds)));
|
|
258
|
+
(0, testing_1.assert)(((_j = emailThreadWithScheduled.preview) === null || _j === void 0 ? void 0 : _j.includes("This is a scheduled email")) !== true, "Preview should NOT be from scheduled email. Got: ".concat(emailThreadWithScheduled.preview));
|
|
259
|
+
console.log("✅ Scheduled email tracking test passed");
|
|
260
|
+
// Test 5: Thread with ONLY drafts should still have a preview from the drafts
|
|
261
|
+
console.log("Testing thread with only draft messages...");
|
|
262
|
+
draftOnlyEnduserPhoneNumber_1 = "+15555555561";
|
|
263
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
264
|
+
message: "This is the only message and it is a draft",
|
|
265
|
+
enduserId: testEnduser.id,
|
|
266
|
+
userId: testUser.id,
|
|
267
|
+
inbound: false,
|
|
268
|
+
phoneNumber: "+15555555560",
|
|
269
|
+
enduserPhoneNumber: draftOnlyEnduserPhoneNumber_1,
|
|
270
|
+
isDraft: true,
|
|
271
|
+
logOnly: true,
|
|
272
|
+
})
|
|
273
|
+
// Rebuild threads
|
|
274
|
+
];
|
|
275
|
+
case 19:
|
|
276
|
+
draftOnlySMS = _v.sent();
|
|
277
|
+
// Rebuild threads
|
|
278
|
+
return [4 /*yield*/, resetAndBuildThreads()];
|
|
279
|
+
case 20:
|
|
280
|
+
// Rebuild threads
|
|
281
|
+
_v.sent();
|
|
282
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})
|
|
283
|
+
// Match only on enduserPhoneNumber since there's no inbound to set phoneNumber
|
|
284
|
+
];
|
|
285
|
+
case 21:
|
|
286
|
+
loadedThreads5 = _v.sent();
|
|
287
|
+
draftOnlyThread = loadedThreads5.threads.find(function (t) {
|
|
288
|
+
return t.type === 'SMS' && t.enduserPhoneNumber === draftOnlyEnduserPhoneNumber_1;
|
|
289
|
+
});
|
|
290
|
+
(0, testing_1.assert)(!!draftOnlyThread, "Draft-only thread should be found");
|
|
291
|
+
(0, testing_1.assert)(((_k = draftOnlyThread.draftMessageIds) === null || _k === void 0 ? void 0 : _k.includes(draftOnlySMS.id)) === true, "Draft SMS ID should be in draftMessageIds");
|
|
292
|
+
// When only drafts exist, the draft is used as fallback for preview
|
|
293
|
+
(0, testing_1.assert)(((_l = draftOnlyThread.preview) === null || _l === void 0 ? void 0 : _l.includes("only message")) === true, "Preview should fall back to draft when no sent messages exist. Got: ".concat(draftOnlyThread.preview));
|
|
294
|
+
console.log("✅ Thread with only draft messages test passed");
|
|
295
|
+
// Test 6: Verify fields are correctly typed as arrays
|
|
296
|
+
console.log("Testing field types...");
|
|
297
|
+
(0, testing_1.assert)(Array.isArray(smsThread.draftMessageIds), "draftMessageIds should be an array");
|
|
298
|
+
(0, testing_1.assert)(Array.isArray(threadWithScheduled.scheduledMessageIds), "scheduledMessageIds should be an array");
|
|
299
|
+
console.log("✅ Field types test passed");
|
|
300
|
+
// Test 7: Threads with NO drafts/scheduled should have empty arrays (not undefined)
|
|
301
|
+
console.log("Testing empty array defaults for threads with only sent messages...");
|
|
302
|
+
sentOnlyPhoneNumber_1 = "+15555555570";
|
|
303
|
+
sentOnlyEnduserPhoneNumber_1 = "+15555555571";
|
|
304
|
+
// Create an inbound message to establish the thread with proper phone numbers
|
|
305
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
306
|
+
message: "Inbound message",
|
|
307
|
+
enduserId: testEnduser.id,
|
|
308
|
+
userId: testUser.id,
|
|
309
|
+
inbound: true,
|
|
310
|
+
phoneNumber: sentOnlyPhoneNumber_1,
|
|
311
|
+
enduserPhoneNumber: sentOnlyEnduserPhoneNumber_1,
|
|
312
|
+
logOnly: true,
|
|
313
|
+
})
|
|
314
|
+
// Create an outbound sent message (no draft, no scheduled)
|
|
315
|
+
];
|
|
316
|
+
case 22:
|
|
317
|
+
// Create an inbound message to establish the thread with proper phone numbers
|
|
318
|
+
_v.sent();
|
|
319
|
+
// Create an outbound sent message (no draft, no scheduled)
|
|
320
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
321
|
+
message: "This is a sent message only",
|
|
322
|
+
enduserId: testEnduser.id,
|
|
323
|
+
userId: testUser.id,
|
|
324
|
+
inbound: false,
|
|
325
|
+
phoneNumber: sentOnlyPhoneNumber_1,
|
|
326
|
+
enduserPhoneNumber: sentOnlyEnduserPhoneNumber_1,
|
|
327
|
+
logOnly: true,
|
|
328
|
+
})
|
|
329
|
+
// Rebuild threads
|
|
330
|
+
];
|
|
331
|
+
case 23:
|
|
332
|
+
// Create an outbound sent message (no draft, no scheduled)
|
|
333
|
+
_v.sent();
|
|
334
|
+
// Rebuild threads
|
|
335
|
+
return [4 /*yield*/, resetAndBuildThreads()];
|
|
336
|
+
case 24:
|
|
337
|
+
// Rebuild threads
|
|
338
|
+
_v.sent();
|
|
339
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
340
|
+
case 25:
|
|
341
|
+
loadedThreads6 = _v.sent();
|
|
342
|
+
sentOnlyThread = loadedThreads6.threads.find(function (t) {
|
|
343
|
+
return t.type === 'SMS' && t.phoneNumber === sentOnlyPhoneNumber_1 && t.enduserPhoneNumber === sentOnlyEnduserPhoneNumber_1;
|
|
344
|
+
});
|
|
345
|
+
(0, testing_1.assert)(!!sentOnlyThread, "Sent-only thread should be found");
|
|
346
|
+
(0, testing_1.assert)(Array.isArray(sentOnlyThread.draftMessageIds) && sentOnlyThread.draftMessageIds.length === 0, "draftMessageIds should be an empty array when no drafts exist. Got: ".concat(JSON.stringify(sentOnlyThread.draftMessageIds)));
|
|
347
|
+
(0, testing_1.assert)(Array.isArray(sentOnlyThread.scheduledMessageIds) && sentOnlyThread.scheduledMessageIds.length === 0, "scheduledMessageIds should be an empty array when no scheduled messages exist. Got: ".concat(JSON.stringify(sentOnlyThread.scheduledMessageIds)));
|
|
348
|
+
console.log("✅ Empty array defaults test passed");
|
|
349
|
+
// ===== Chat Draft Cleanup on Send Tests =====
|
|
350
|
+
(0, testing_1.log_header)("Chat Draft Cleanup on Send Tests");
|
|
351
|
+
// Test 8: Verify draftMessageIds is cleaned up when a draft chat is sent
|
|
352
|
+
// Note: Chat threads don't auto-populate draftMessageIds during build_threads,
|
|
353
|
+
// so we manually set it up to test the cleanup logic in the event handler
|
|
354
|
+
console.log("Testing draft chat cleanup on send...");
|
|
355
|
+
return [4 /*yield*/, sdk.api.chat_rooms.createOne({
|
|
356
|
+
userIds: [testUser.id],
|
|
357
|
+
enduserIds: [testEnduser.id],
|
|
358
|
+
})
|
|
359
|
+
// Create a non-draft message first to establish the room (sets recentMessageSentAt)
|
|
360
|
+
// This is required for the room to be included in build_threads
|
|
361
|
+
];
|
|
362
|
+
case 26:
|
|
363
|
+
chatRoom = _v.sent();
|
|
364
|
+
// Create a non-draft message first to establish the room (sets recentMessageSentAt)
|
|
365
|
+
// This is required for the room to be included in build_threads
|
|
366
|
+
return [4 /*yield*/, sdk.api.chats.createOne({
|
|
367
|
+
roomId: chatRoom.id,
|
|
368
|
+
message: "Initial message to establish room",
|
|
369
|
+
senderId: testEnduser.id,
|
|
370
|
+
})
|
|
371
|
+
// Create a draft chat message (isDraft: true, sendAt far in future like webapp does)
|
|
372
|
+
];
|
|
373
|
+
case 27:
|
|
374
|
+
// Create a non-draft message first to establish the room (sets recentMessageSentAt)
|
|
375
|
+
// This is required for the room to be included in build_threads
|
|
376
|
+
_v.sent();
|
|
377
|
+
farFuture = new Date(Date.now() + 100 * 365 * 24 * 60 * 60 * 1000) // 100 years
|
|
378
|
+
;
|
|
379
|
+
return [4 /*yield*/, sdk.api.chats.createOne({
|
|
380
|
+
roomId: chatRoom.id,
|
|
381
|
+
message: "This is a draft chat message",
|
|
382
|
+
senderId: testUser.id,
|
|
383
|
+
isDraft: true,
|
|
384
|
+
sendAt: farFuture,
|
|
385
|
+
})
|
|
386
|
+
// Build threads to create the Chat thread
|
|
387
|
+
];
|
|
388
|
+
case 28:
|
|
389
|
+
draftChat = _v.sent();
|
|
390
|
+
// Build threads to create the Chat thread
|
|
391
|
+
return [4 /*yield*/, resetAndBuildThreads()];
|
|
392
|
+
case 29:
|
|
393
|
+
// Build threads to create the Chat thread
|
|
394
|
+
_v.sent();
|
|
395
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
396
|
+
case 30:
|
|
397
|
+
loadedThreads7 = _v.sent();
|
|
398
|
+
chatThreadBefore_1 = loadedThreads7.threads.find(function (t) { var _a; return t.type === 'Chat' && ((_a = t.enduserIds) === null || _a === void 0 ? void 0 : _a.includes(testEnduser.id)); });
|
|
399
|
+
(0, testing_1.assert)(!!chatThreadBefore_1, "Chat thread should be found");
|
|
400
|
+
// Manually add the draft ID to draftMessageIds to simulate the setup
|
|
401
|
+
// (Chat thread building doesn't auto-populate this, but the cleanup should still work)
|
|
402
|
+
return [4 /*yield*/, sdk.api.inbox_threads.updateOne(chatThreadBefore_1.id, {
|
|
403
|
+
draftMessageIds: [draftChat.id],
|
|
404
|
+
})
|
|
405
|
+
// Verify manual setup worked
|
|
406
|
+
];
|
|
407
|
+
case 31:
|
|
408
|
+
// Manually add the draft ID to draftMessageIds to simulate the setup
|
|
409
|
+
// (Chat thread building doesn't auto-populate this, but the cleanup should still work)
|
|
410
|
+
_v.sent();
|
|
411
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
412
|
+
case 32:
|
|
413
|
+
loadedThreads7b = _v.sent();
|
|
414
|
+
chatThreadWithDraft = loadedThreads7b.threads.find(function (t) { return t.id === chatThreadBefore_1.id; });
|
|
415
|
+
(0, testing_1.assert)(((_m = chatThreadWithDraft.draftMessageIds) === null || _m === void 0 ? void 0 : _m.includes(draftChat.id)) === true, "Draft chat ID should be in draftMessageIds after manual setup. Got: ".concat(JSON.stringify(chatThreadWithDraft.draftMessageIds)));
|
|
416
|
+
console.log("✅ Draft chat manually added to draftMessageIds");
|
|
417
|
+
// "Send" the draft by updating isDraft to false and sendAt to now
|
|
418
|
+
// This mimics what the webapp does when user clicks send
|
|
419
|
+
return [4 /*yield*/, sdk.api.chats.updateOne(draftChat.id, {
|
|
420
|
+
isDraft: false,
|
|
421
|
+
sendAt: new Date(), // Now - triggers the scheduled chat handler
|
|
422
|
+
})
|
|
423
|
+
// Wait for the side effect to process
|
|
424
|
+
];
|
|
425
|
+
case 33:
|
|
426
|
+
// "Send" the draft by updating isDraft to false and sendAt to now
|
|
427
|
+
// This mimics what the webapp does when user clicks send
|
|
428
|
+
_v.sent();
|
|
429
|
+
// Wait for the side effect to process
|
|
430
|
+
return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)
|
|
431
|
+
// Reload the thread and verify cleanup happened
|
|
432
|
+
];
|
|
433
|
+
case 34:
|
|
434
|
+
// Wait for the side effect to process
|
|
435
|
+
_v.sent();
|
|
436
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
437
|
+
case 35:
|
|
438
|
+
loadedThreads8 = _v.sent();
|
|
439
|
+
chatThreadAfter = loadedThreads8.threads.find(function (t) { return t.id === chatThreadBefore_1.id; });
|
|
440
|
+
(0, testing_1.assert)(!!chatThreadAfter, "Chat thread should be found after send");
|
|
441
|
+
(0, testing_1.assert)(((_o = chatThreadAfter.draftMessageIds) === null || _o === void 0 ? void 0 : _o.includes(draftChat.id)) === false, "Draft chat ID should be REMOVED from draftMessageIds after send. Got: ".concat(JSON.stringify(chatThreadAfter.draftMessageIds)));
|
|
442
|
+
console.log("✅ Draft chat cleanup on send test passed");
|
|
443
|
+
// Cleanup chat room
|
|
444
|
+
return [4 /*yield*/, sdk.api.chat_rooms.deleteOne(chatRoom.id).catch(console.error)
|
|
445
|
+
// ===== Message Deletion Cleanup Tests =====
|
|
446
|
+
];
|
|
447
|
+
case 36:
|
|
448
|
+
// Cleanup chat room
|
|
449
|
+
_v.sent();
|
|
450
|
+
// ===== Message Deletion Cleanup Tests =====
|
|
451
|
+
(0, testing_1.log_header)("Message Deletion Cleanup Tests");
|
|
452
|
+
// Test 9: SMS draft deletion should remove ID from draftMessageIds
|
|
453
|
+
console.log("Testing SMS draft deletion cleanup...");
|
|
454
|
+
deleteTestPhoneNumber_1 = "+15555555580";
|
|
455
|
+
deleteTestEnduserPhoneNumber_1 = "+15555555581";
|
|
456
|
+
// Create an inbound SMS to establish the thread
|
|
457
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
458
|
+
message: "Inbound message to establish thread for deletion test",
|
|
459
|
+
enduserId: testEnduser.id,
|
|
460
|
+
userId: testUser.id,
|
|
461
|
+
inbound: true,
|
|
462
|
+
phoneNumber: deleteTestPhoneNumber_1,
|
|
463
|
+
enduserPhoneNumber: deleteTestEnduserPhoneNumber_1,
|
|
464
|
+
logOnly: true,
|
|
465
|
+
})
|
|
466
|
+
// Create a draft SMS
|
|
467
|
+
];
|
|
468
|
+
case 37:
|
|
469
|
+
// Create an inbound SMS to establish the thread
|
|
470
|
+
_v.sent();
|
|
471
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
472
|
+
message: "This draft will be deleted",
|
|
473
|
+
enduserId: testEnduser.id,
|
|
474
|
+
userId: testUser.id,
|
|
475
|
+
inbound: false,
|
|
476
|
+
phoneNumber: deleteTestPhoneNumber_1,
|
|
477
|
+
enduserPhoneNumber: deleteTestEnduserPhoneNumber_1,
|
|
478
|
+
isDraft: true,
|
|
479
|
+
logOnly: true,
|
|
480
|
+
})
|
|
481
|
+
// Build threads to populate draftMessageIds
|
|
482
|
+
];
|
|
483
|
+
case 38:
|
|
484
|
+
draftSmsToDelete = _v.sent();
|
|
485
|
+
// Build threads to populate draftMessageIds
|
|
486
|
+
return [4 /*yield*/, resetAndBuildThreads()
|
|
487
|
+
// Verify the draft ID is in the thread
|
|
488
|
+
];
|
|
489
|
+
case 39:
|
|
490
|
+
// Build threads to populate draftMessageIds
|
|
491
|
+
_v.sent();
|
|
492
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
493
|
+
case 40:
|
|
494
|
+
loadedThreads9a = _v.sent();
|
|
495
|
+
smsDeleteThread_1 = loadedThreads9a.threads.find(function (t) {
|
|
496
|
+
return t.type === 'SMS' && t.phoneNumber === deleteTestPhoneNumber_1 && t.enduserPhoneNumber === deleteTestEnduserPhoneNumber_1;
|
|
497
|
+
});
|
|
498
|
+
(0, testing_1.assert)(!!smsDeleteThread_1, "SMS thread for deletion test should be found");
|
|
499
|
+
(0, testing_1.assert)(((_p = smsDeleteThread_1.draftMessageIds) === null || _p === void 0 ? void 0 : _p.includes(draftSmsToDelete.id)) === true, "Draft SMS ID should be in draftMessageIds before deletion. Got: ".concat(JSON.stringify(smsDeleteThread_1.draftMessageIds)));
|
|
500
|
+
// Delete the draft SMS
|
|
501
|
+
return [4 /*yield*/, sdk.api.sms_messages.deleteOne(draftSmsToDelete.id)
|
|
502
|
+
// Wait for the delete side effect to process
|
|
503
|
+
];
|
|
504
|
+
case 41:
|
|
505
|
+
// Delete the draft SMS
|
|
506
|
+
_v.sent();
|
|
507
|
+
// Wait for the delete side effect to process
|
|
508
|
+
return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)
|
|
509
|
+
// Verify the draft ID has been removed
|
|
510
|
+
];
|
|
511
|
+
case 42:
|
|
512
|
+
// Wait for the delete side effect to process
|
|
513
|
+
_v.sent();
|
|
514
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
515
|
+
case 43:
|
|
516
|
+
loadedThreads9b = _v.sent();
|
|
517
|
+
smsDeleteThreadAfter = loadedThreads9b.threads.find(function (t) { return t.id === smsDeleteThread_1.id; });
|
|
518
|
+
(0, testing_1.assert)(!!smsDeleteThreadAfter, "SMS thread should still exist after draft deletion");
|
|
519
|
+
(0, testing_1.assert)(((_q = smsDeleteThreadAfter.draftMessageIds) === null || _q === void 0 ? void 0 : _q.includes(draftSmsToDelete.id)) === false, "Draft SMS ID should be REMOVED from draftMessageIds after deletion. Got: ".concat(JSON.stringify(smsDeleteThreadAfter.draftMessageIds)));
|
|
520
|
+
console.log("✅ SMS draft deletion cleanup test passed");
|
|
521
|
+
// Test 10: Email draft deletion should remove ID from draftMessageIds
|
|
522
|
+
console.log("Testing email draft deletion cleanup...");
|
|
523
|
+
deleteEmailSubject_1 = "Delete Test Email ".concat(timestamp);
|
|
524
|
+
// Create a sent email first to establish the thread
|
|
525
|
+
return [4 /*yield*/, sdk.api.emails.createOne({
|
|
526
|
+
subject: deleteEmailSubject_1,
|
|
527
|
+
textContent: "Sent email to establish thread for deletion test",
|
|
528
|
+
enduserId: testEnduser.id,
|
|
529
|
+
userId: testUser.id,
|
|
530
|
+
messageId: "sent-email-delete-test-".concat(timestamp),
|
|
531
|
+
logOnly: true,
|
|
532
|
+
})
|
|
533
|
+
// Create a draft email
|
|
534
|
+
];
|
|
535
|
+
case 44:
|
|
536
|
+
// Create a sent email first to establish the thread
|
|
537
|
+
_v.sent();
|
|
538
|
+
return [4 /*yield*/, sdk.api.emails.createOne({
|
|
539
|
+
subject: deleteEmailSubject_1,
|
|
540
|
+
textContent: "This draft email will be deleted",
|
|
541
|
+
enduserId: testEnduser.id,
|
|
542
|
+
userId: testUser.id,
|
|
543
|
+
messageId: "draft-email-delete-test-".concat(timestamp),
|
|
544
|
+
isDraft: true,
|
|
545
|
+
logOnly: true,
|
|
546
|
+
})
|
|
547
|
+
// Build threads to populate draftMessageIds
|
|
548
|
+
];
|
|
549
|
+
case 45:
|
|
550
|
+
draftEmailToDelete = _v.sent();
|
|
551
|
+
// Build threads to populate draftMessageIds
|
|
552
|
+
return [4 /*yield*/, resetAndBuildThreads()
|
|
553
|
+
// Verify the draft ID is in the thread
|
|
554
|
+
];
|
|
555
|
+
case 46:
|
|
556
|
+
// Build threads to populate draftMessageIds
|
|
557
|
+
_v.sent();
|
|
558
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
559
|
+
case 47:
|
|
560
|
+
loadedThreads10a = _v.sent();
|
|
561
|
+
emailDeleteThread_1 = loadedThreads10a.threads.find(function (t) { return t.type === 'Email' && t.title === deleteEmailSubject_1; });
|
|
562
|
+
(0, testing_1.assert)(!!emailDeleteThread_1, "Email thread for deletion test should be found");
|
|
563
|
+
(0, testing_1.assert)(((_r = emailDeleteThread_1.draftMessageIds) === null || _r === void 0 ? void 0 : _r.includes(draftEmailToDelete.id)) === true, "Draft Email ID should be in draftMessageIds before deletion. Got: ".concat(JSON.stringify(emailDeleteThread_1.draftMessageIds)));
|
|
564
|
+
// Delete the draft email
|
|
565
|
+
return [4 /*yield*/, sdk.api.emails.deleteOne(draftEmailToDelete.id)
|
|
566
|
+
// Wait for the delete side effect to process
|
|
567
|
+
];
|
|
568
|
+
case 48:
|
|
569
|
+
// Delete the draft email
|
|
570
|
+
_v.sent();
|
|
571
|
+
// Wait for the delete side effect to process
|
|
572
|
+
return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)
|
|
573
|
+
// Verify the draft ID has been removed
|
|
574
|
+
];
|
|
575
|
+
case 49:
|
|
576
|
+
// Wait for the delete side effect to process
|
|
577
|
+
_v.sent();
|
|
578
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
579
|
+
case 50:
|
|
580
|
+
loadedThreads10b = _v.sent();
|
|
581
|
+
emailDeleteThreadAfter = loadedThreads10b.threads.find(function (t) { return t.id === emailDeleteThread_1.id; });
|
|
582
|
+
(0, testing_1.assert)(!!emailDeleteThreadAfter, "Email thread should still exist after draft deletion");
|
|
583
|
+
(0, testing_1.assert)(((_s = emailDeleteThreadAfter.draftMessageIds) === null || _s === void 0 ? void 0 : _s.includes(draftEmailToDelete.id)) === false, "Draft Email ID should be REMOVED from draftMessageIds after deletion. Got: ".concat(JSON.stringify(emailDeleteThreadAfter.draftMessageIds)));
|
|
584
|
+
console.log("✅ Email draft deletion cleanup test passed");
|
|
585
|
+
// Test 11: Chat draft deletion should remove ID from draftMessageIds
|
|
586
|
+
console.log("Testing chat draft deletion cleanup...");
|
|
587
|
+
return [4 /*yield*/, sdk.api.chat_rooms.createOne({
|
|
588
|
+
userIds: [testUser.id],
|
|
589
|
+
enduserIds: [testEnduser.id],
|
|
590
|
+
})
|
|
591
|
+
// Create a non-draft message first to establish the room
|
|
592
|
+
];
|
|
593
|
+
case 51:
|
|
594
|
+
chatRoomForDeletion = _v.sent();
|
|
595
|
+
// Create a non-draft message first to establish the room
|
|
596
|
+
return [4 /*yield*/, sdk.api.chats.createOne({
|
|
597
|
+
roomId: chatRoomForDeletion.id,
|
|
598
|
+
message: "Initial message to establish room for deletion test",
|
|
599
|
+
senderId: testEnduser.id,
|
|
600
|
+
})
|
|
601
|
+
// Create a draft chat message
|
|
602
|
+
];
|
|
603
|
+
case 52:
|
|
604
|
+
// Create a non-draft message first to establish the room
|
|
605
|
+
_v.sent();
|
|
606
|
+
farFuture2 = new Date(Date.now() + 100 * 365 * 24 * 60 * 60 * 1000);
|
|
607
|
+
return [4 /*yield*/, sdk.api.chats.createOne({
|
|
608
|
+
roomId: chatRoomForDeletion.id,
|
|
609
|
+
message: "This draft chat will be deleted",
|
|
610
|
+
senderId: testUser.id,
|
|
611
|
+
isDraft: true,
|
|
612
|
+
sendAt: farFuture2,
|
|
613
|
+
})
|
|
614
|
+
// Build threads to create the Chat thread
|
|
615
|
+
];
|
|
616
|
+
case 53:
|
|
617
|
+
draftChatToDelete = _v.sent();
|
|
618
|
+
// Build threads to create the Chat thread
|
|
619
|
+
return [4 /*yield*/, resetAndBuildThreads()];
|
|
620
|
+
case 54:
|
|
621
|
+
// Build threads to create the Chat thread
|
|
622
|
+
_v.sent();
|
|
623
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
624
|
+
case 55:
|
|
625
|
+
loadedThreads11a = _v.sent();
|
|
626
|
+
chatDeleteThread_1 = loadedThreads11a.threads.find(function (t) { var _a; return t.type === 'Chat' && ((_a = t.enduserIds) === null || _a === void 0 ? void 0 : _a.includes(testEnduser.id)); });
|
|
627
|
+
(0, testing_1.assert)(!!chatDeleteThread_1, "Chat thread for deletion test should be found");
|
|
628
|
+
// Manually add the draft ID to draftMessageIds (since chat threads don't auto-populate this)
|
|
629
|
+
return [4 /*yield*/, sdk.api.inbox_threads.updateOne(chatDeleteThread_1.id, {
|
|
630
|
+
draftMessageIds: [draftChatToDelete.id],
|
|
631
|
+
})
|
|
632
|
+
// Verify manual setup worked
|
|
633
|
+
];
|
|
634
|
+
case 56:
|
|
635
|
+
// Manually add the draft ID to draftMessageIds (since chat threads don't auto-populate this)
|
|
636
|
+
_v.sent();
|
|
637
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
638
|
+
case 57:
|
|
639
|
+
loadedThreads11b = _v.sent();
|
|
640
|
+
chatDeleteThreadWithDraft = loadedThreads11b.threads.find(function (t) { return t.id === chatDeleteThread_1.id; });
|
|
641
|
+
(0, testing_1.assert)(((_t = chatDeleteThreadWithDraft.draftMessageIds) === null || _t === void 0 ? void 0 : _t.includes(draftChatToDelete.id)) === true, "Draft chat ID should be in draftMessageIds after manual setup. Got: ".concat(JSON.stringify(chatDeleteThreadWithDraft.draftMessageIds)));
|
|
642
|
+
// Delete the draft chat
|
|
643
|
+
return [4 /*yield*/, sdk.api.chats.deleteOne(draftChatToDelete.id)
|
|
644
|
+
// Wait for the delete side effect to process
|
|
645
|
+
];
|
|
646
|
+
case 58:
|
|
647
|
+
// Delete the draft chat
|
|
648
|
+
_v.sent();
|
|
649
|
+
// Wait for the delete side effect to process
|
|
650
|
+
return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)
|
|
651
|
+
// Verify the draft ID has been removed
|
|
652
|
+
];
|
|
653
|
+
case 59:
|
|
654
|
+
// Wait for the delete side effect to process
|
|
655
|
+
_v.sent();
|
|
656
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
657
|
+
case 60:
|
|
658
|
+
loadedThreads11c = _v.sent();
|
|
659
|
+
chatDeleteThreadAfter = loadedThreads11c.threads.find(function (t) { return t.id === chatDeleteThread_1.id; });
|
|
660
|
+
(0, testing_1.assert)(!!chatDeleteThreadAfter, "Chat thread should still exist after draft deletion");
|
|
661
|
+
(0, testing_1.assert)(((_u = chatDeleteThreadAfter.draftMessageIds) === null || _u === void 0 ? void 0 : _u.includes(draftChatToDelete.id)) === false, "Draft Chat ID should be REMOVED from draftMessageIds after deletion. Got: ".concat(JSON.stringify(chatDeleteThreadAfter.draftMessageIds)));
|
|
662
|
+
console.log("✅ Chat draft deletion cleanup test passed");
|
|
663
|
+
// Cleanup deletion test chat room
|
|
664
|
+
return [4 /*yield*/, sdk.api.chat_rooms.deleteOne(chatRoomForDeletion.id).catch(console.error)];
|
|
665
|
+
case 61:
|
|
666
|
+
// Cleanup deletion test chat room
|
|
667
|
+
_v.sent();
|
|
668
|
+
console.log("🎉 All InboxThread draft/scheduled tests passed!");
|
|
669
|
+
return [3 /*break*/, 66];
|
|
670
|
+
case 62:
|
|
671
|
+
// Cleanup
|
|
672
|
+
return [4 /*yield*/, sdk.api.inbox_threads.reset_threads().catch(console.error)];
|
|
673
|
+
case 63:
|
|
674
|
+
// Cleanup
|
|
675
|
+
_v.sent();
|
|
676
|
+
return [4 /*yield*/, sdk.api.endusers.deleteOne(testEnduser.id).catch(console.error)];
|
|
677
|
+
case 64:
|
|
678
|
+
_v.sent();
|
|
679
|
+
return [4 /*yield*/, sdk.api.users.deleteOne(testUser.id).catch(console.error)];
|
|
680
|
+
case 65:
|
|
681
|
+
_v.sent();
|
|
682
|
+
return [7 /*endfinally*/];
|
|
683
|
+
case 66: return [2 /*return*/];
|
|
684
|
+
}
|
|
685
|
+
});
|
|
686
|
+
});
|
|
687
|
+
};
|
|
688
|
+
exports.inbox_thread_draft_scheduled_tests = inbox_thread_draft_scheduled_tests;
|
|
689
|
+
// Allow running this test file independently
|
|
690
|
+
if (require.main === module) {
|
|
691
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
692
|
+
var sdk_2 = new sdk_1.Session({ host: host });
|
|
693
|
+
var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
|
|
694
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
695
|
+
return __generator(this, function (_a) {
|
|
696
|
+
switch (_a.label) {
|
|
697
|
+
case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
|
|
698
|
+
case 1:
|
|
699
|
+
_a.sent();
|
|
700
|
+
return [4 /*yield*/, (0, exports.inbox_thread_draft_scheduled_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
701
|
+
case 2:
|
|
702
|
+
_a.sent();
|
|
703
|
+
return [2 /*return*/];
|
|
704
|
+
}
|
|
705
|
+
});
|
|
706
|
+
}); };
|
|
707
|
+
runTests()
|
|
708
|
+
.then(function () {
|
|
709
|
+
console.log("✅ InboxThread draft/scheduled test suite completed successfully");
|
|
710
|
+
process.exit(0);
|
|
711
|
+
})
|
|
712
|
+
.catch(function (error) {
|
|
713
|
+
console.error("❌ InboxThread draft/scheduled test suite failed:", error);
|
|
714
|
+
process.exit(1);
|
|
715
|
+
});
|
|
716
|
+
}
|
|
717
|
+
//# sourceMappingURL=inbox_thread_draft_scheduled.test.js.map
|