@tellescope/sdk 1.237.2 → 1.237.4
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/enduser.d.ts +1 -1
- package/lib/cjs/tests/api_tests/database_cascade_delete.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/database_cascade_delete.test.d.ts.map +1 -0
- package/lib/cjs/tests/api_tests/database_cascade_delete.test.js +298 -0
- package/lib/cjs/tests/api_tests/database_cascade_delete.test.js.map +1 -0
- 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 +173 -11
- package/lib/cjs/tests/api_tests/inbox_thread_assignment_updates.test.js.map +1 -1
- package/lib/cjs/tests/api_tests/inbox_thread_status_preservation.test.d.ts +6 -0
- package/lib/cjs/tests/api_tests/inbox_thread_status_preservation.test.d.ts.map +1 -0
- package/lib/cjs/tests/tests.d.ts.map +1 -1
- package/lib/cjs/tests/tests.js +30 -3
- package/lib/cjs/tests/tests.js.map +1 -1
- package/lib/esm/enduser.d.ts +1 -1
- package/lib/esm/tests/api_tests/database_cascade_delete.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/database_cascade_delete.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/database_cascade_delete.test.js +294 -0
- package/lib/esm/tests/api_tests/database_cascade_delete.test.js.map +1 -0
- 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 +173 -11
- package/lib/esm/tests/api_tests/inbox_thread_assignment_updates.test.js.map +1 -1
- package/lib/esm/tests/api_tests/inbox_thread_status_preservation.test.d.ts +6 -0
- package/lib/esm/tests/api_tests/inbox_thread_status_preservation.test.d.ts.map +1 -0
- package/lib/esm/tests/api_tests/inbox_thread_status_preservation.test.js +435 -0
- package/lib/esm/tests/api_tests/inbox_thread_status_preservation.test.js.map +1 -0
- package/lib/esm/tests/tests.d.ts.map +1 -1
- package/lib/esm/tests/tests.js +30 -3
- package/lib/esm/tests/tests.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -10
- package/src/tests/api_tests/database_cascade_delete.test.ts +193 -0
- package/src/tests/api_tests/inbox_thread_assignment_updates.test.ts +158 -0
- package/src/tests/tests.ts +23 -0
- package/test_generated.pdf +0 -0
package/lib/cjs/enduser.d.ts
CHANGED
|
@@ -1958,7 +1958,7 @@ export declare class EnduserSession extends Session {
|
|
|
1958
1958
|
};
|
|
1959
1959
|
}>;
|
|
1960
1960
|
begin_login_flow: (a: Omit<extractFields<PublicActions['endusers']['begin_login_flow']['parameters']>, 'businessId' | 'organizationIds'>) => Promise<{
|
|
1961
|
-
result: "continue-with-password" | "sent-email" | "sent-sms";
|
|
1961
|
+
result: "continue-with-password" | "sent-email" | "sent-sms" | "requires-dob";
|
|
1962
1962
|
email?: string | undefined;
|
|
1963
1963
|
otpToken?: string | undefined;
|
|
1964
1964
|
}>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database_cascade_delete.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/database_cascade_delete.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYnC,eAAO,MAAM,6BAA6B;SAAwC,OAAO;iBAAe,OAAO;mBA4J9G,CAAA"}
|
|
@@ -0,0 +1,298 @@
|
|
|
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.database_cascade_delete_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
|
+
// Main test function that can be called independently or from main test suite
|
|
46
|
+
var database_cascade_delete_tests = function (_a) {
|
|
47
|
+
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
48
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
49
|
+
return __generator(this, function (_b) {
|
|
50
|
+
switch (_b.label) {
|
|
51
|
+
case 0:
|
|
52
|
+
(0, testing_1.log_header)("Database Cascade Delete Tests");
|
|
53
|
+
// Test 1: Create database and records, then delete database and verify records are cascade deleted
|
|
54
|
+
return [4 /*yield*/, (0, testing_1.async_test)('cascade delete - deleting database deletes all database_records', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
55
|
+
var database, records, recordIds, recordsBefore, recordsAfter, _i, recordIds_1, recordId, err_1;
|
|
56
|
+
var _a, _b;
|
|
57
|
+
return __generator(this, function (_c) {
|
|
58
|
+
switch (_c.label) {
|
|
59
|
+
case 0: return [4 /*yield*/, sdk.api.databases.createOne({
|
|
60
|
+
title: "__Test__CascadeDelete_".concat(Date.now()),
|
|
61
|
+
fields: [
|
|
62
|
+
{ type: 'Text', label: "Name" },
|
|
63
|
+
{ type: 'Number', label: "Age" },
|
|
64
|
+
],
|
|
65
|
+
})
|
|
66
|
+
// Create multiple database records
|
|
67
|
+
];
|
|
68
|
+
case 1:
|
|
69
|
+
database = _c.sent();
|
|
70
|
+
return [4 /*yield*/, sdk.api.database_records.createSome([
|
|
71
|
+
{
|
|
72
|
+
databaseId: database.id,
|
|
73
|
+
values: [
|
|
74
|
+
{ type: 'Text', value: 'Alice', label: 'Name' },
|
|
75
|
+
{ type: 'Number', value: 25, label: 'Age' },
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
databaseId: database.id,
|
|
80
|
+
values: [
|
|
81
|
+
{ type: 'Text', value: 'Bob', label: 'Name' },
|
|
82
|
+
{ type: 'Number', value: 30, label: 'Age' },
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
databaseId: database.id,
|
|
87
|
+
values: [
|
|
88
|
+
{ type: 'Text', value: 'Charlie', label: 'Name' },
|
|
89
|
+
{ type: 'Number', value: 35, label: 'Age' },
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
])];
|
|
93
|
+
case 2:
|
|
94
|
+
records = _c.sent();
|
|
95
|
+
recordIds = records.created.map(function (r) { return r.id; });
|
|
96
|
+
console.log("Created database ".concat(database.id, " with ").concat(recordIds.length, " records"));
|
|
97
|
+
return [4 /*yield*/, sdk.api.database_records.getSome({ filter: { databaseId: database.id } })];
|
|
98
|
+
case 3:
|
|
99
|
+
recordsBefore = _c.sent();
|
|
100
|
+
if (recordsBefore.length !== 3) {
|
|
101
|
+
throw new Error("Expected 3 records before delete, got ".concat(recordsBefore.length));
|
|
102
|
+
}
|
|
103
|
+
console.log("Verified ".concat(recordsBefore.length, " records exist before deletion"));
|
|
104
|
+
// Delete the database
|
|
105
|
+
return [4 /*yield*/, sdk.api.databases.deleteOne(database.id)];
|
|
106
|
+
case 4:
|
|
107
|
+
// Delete the database
|
|
108
|
+
_c.sent();
|
|
109
|
+
console.log("Deleted database ".concat(database.id));
|
|
110
|
+
// Wait a moment for cascade delete to propagate
|
|
111
|
+
return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)
|
|
112
|
+
// Verify all records were cascade deleted
|
|
113
|
+
];
|
|
114
|
+
case 5:
|
|
115
|
+
// Wait a moment for cascade delete to propagate
|
|
116
|
+
_c.sent();
|
|
117
|
+
return [4 /*yield*/, sdk.api.database_records.getSome({ filter: { databaseId: database.id } })];
|
|
118
|
+
case 6:
|
|
119
|
+
recordsAfter = _c.sent();
|
|
120
|
+
if (recordsAfter.length !== 0) {
|
|
121
|
+
throw new Error("Expected 0 records after cascade delete, got ".concat(recordsAfter.length));
|
|
122
|
+
}
|
|
123
|
+
console.log("\u2713 Verified all records were cascade deleted");
|
|
124
|
+
_i = 0, recordIds_1 = recordIds;
|
|
125
|
+
_c.label = 7;
|
|
126
|
+
case 7:
|
|
127
|
+
if (!(_i < recordIds_1.length)) return [3 /*break*/, 12];
|
|
128
|
+
recordId = recordIds_1[_i];
|
|
129
|
+
_c.label = 8;
|
|
130
|
+
case 8:
|
|
131
|
+
_c.trys.push([8, 10, , 11]);
|
|
132
|
+
return [4 /*yield*/, sdk.api.database_records.getOne(recordId)];
|
|
133
|
+
case 9:
|
|
134
|
+
_c.sent();
|
|
135
|
+
throw new Error("Record ".concat(recordId, " should have been deleted but was still found"));
|
|
136
|
+
case 10:
|
|
137
|
+
err_1 = _c.sent();
|
|
138
|
+
if (!((_a = err_1.message) === null || _a === void 0 ? void 0 : _a.includes('Could not find')) && !((_b = err_1.message) === null || _b === void 0 ? void 0 : _b.includes('404'))) {
|
|
139
|
+
throw new Error("Unexpected error fetching deleted record: ".concat(err_1.message));
|
|
140
|
+
}
|
|
141
|
+
return [3 /*break*/, 11];
|
|
142
|
+
case 11:
|
|
143
|
+
_i++;
|
|
144
|
+
return [3 /*break*/, 7];
|
|
145
|
+
case 12:
|
|
146
|
+
console.log("\u2713 Verified individual record fetches return not found");
|
|
147
|
+
return [2 /*return*/, true];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}); }, { onResult: function (result) { return result === true; } })
|
|
151
|
+
// Test 2: Verify database with no records can be deleted without error
|
|
152
|
+
];
|
|
153
|
+
case 1:
|
|
154
|
+
// Test 1: Create database and records, then delete database and verify records are cascade deleted
|
|
155
|
+
_b.sent();
|
|
156
|
+
// Test 2: Verify database with no records can be deleted without error
|
|
157
|
+
return [4 /*yield*/, (0, testing_1.async_test)('cascade delete - deleting empty database works', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
158
|
+
var database, err_2;
|
|
159
|
+
var _a, _b;
|
|
160
|
+
return __generator(this, function (_c) {
|
|
161
|
+
switch (_c.label) {
|
|
162
|
+
case 0: return [4 /*yield*/, sdk.api.databases.createOne({
|
|
163
|
+
title: "__Test__EmptyDB_".concat(Date.now()),
|
|
164
|
+
fields: [{ type: 'Text', label: "Field" }],
|
|
165
|
+
})
|
|
166
|
+
// Delete immediately without adding records
|
|
167
|
+
];
|
|
168
|
+
case 1:
|
|
169
|
+
database = _c.sent();
|
|
170
|
+
// Delete immediately without adding records
|
|
171
|
+
return [4 /*yield*/, sdk.api.databases.deleteOne(database.id)
|
|
172
|
+
// Verify database is gone
|
|
173
|
+
];
|
|
174
|
+
case 2:
|
|
175
|
+
// Delete immediately without adding records
|
|
176
|
+
_c.sent();
|
|
177
|
+
_c.label = 3;
|
|
178
|
+
case 3:
|
|
179
|
+
_c.trys.push([3, 5, , 6]);
|
|
180
|
+
return [4 /*yield*/, sdk.api.databases.getOne(database.id)];
|
|
181
|
+
case 4:
|
|
182
|
+
_c.sent();
|
|
183
|
+
throw new Error('Database should have been deleted');
|
|
184
|
+
case 5:
|
|
185
|
+
err_2 = _c.sent();
|
|
186
|
+
if (!((_a = err_2.message) === null || _a === void 0 ? void 0 : _a.includes('Could not find')) && !((_b = err_2.message) === null || _b === void 0 ? void 0 : _b.includes('404'))) {
|
|
187
|
+
throw new Error("Unexpected error: ".concat(err_2.message));
|
|
188
|
+
}
|
|
189
|
+
return [3 /*break*/, 6];
|
|
190
|
+
case 6: return [2 /*return*/, true];
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}); }, { onResult: function (result) { return result === true; } })
|
|
194
|
+
// Test 3: Verify records from other databases are not affected
|
|
195
|
+
];
|
|
196
|
+
case 2:
|
|
197
|
+
// Test 2: Verify database with no records can be deleted without error
|
|
198
|
+
_b.sent();
|
|
199
|
+
// Test 3: Verify records from other databases are not affected
|
|
200
|
+
return [4 /*yield*/, (0, testing_1.async_test)('cascade delete - only affects records from deleted database', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
201
|
+
var database1, database2, db2Record, db2RecordAfter;
|
|
202
|
+
return __generator(this, function (_a) {
|
|
203
|
+
switch (_a.label) {
|
|
204
|
+
case 0: return [4 /*yield*/, sdk.api.databases.createOne({
|
|
205
|
+
title: "__Test__DB1_".concat(Date.now()),
|
|
206
|
+
fields: [{ type: 'Text', label: "Value" }],
|
|
207
|
+
})];
|
|
208
|
+
case 1:
|
|
209
|
+
database1 = _a.sent();
|
|
210
|
+
return [4 /*yield*/, sdk.api.databases.createOne({
|
|
211
|
+
title: "__Test__DB2_".concat(Date.now()),
|
|
212
|
+
fields: [{ type: 'Text', label: "Value" }],
|
|
213
|
+
})
|
|
214
|
+
// Create records in both databases
|
|
215
|
+
];
|
|
216
|
+
case 2:
|
|
217
|
+
database2 = _a.sent();
|
|
218
|
+
// Create records in both databases
|
|
219
|
+
return [4 /*yield*/, sdk.api.database_records.createOne({
|
|
220
|
+
databaseId: database1.id,
|
|
221
|
+
values: [{ type: 'Text', value: 'DB1 Record', label: 'Value' }],
|
|
222
|
+
})];
|
|
223
|
+
case 3:
|
|
224
|
+
// Create records in both databases
|
|
225
|
+
_a.sent();
|
|
226
|
+
return [4 /*yield*/, sdk.api.database_records.createOne({
|
|
227
|
+
databaseId: database2.id,
|
|
228
|
+
values: [{ type: 'Text', value: 'DB2 Record', label: 'Value' }],
|
|
229
|
+
})
|
|
230
|
+
// Delete database1
|
|
231
|
+
];
|
|
232
|
+
case 4:
|
|
233
|
+
db2Record = _a.sent();
|
|
234
|
+
// Delete database1
|
|
235
|
+
return [4 /*yield*/, sdk.api.databases.deleteOne(database1.id)];
|
|
236
|
+
case 5:
|
|
237
|
+
// Delete database1
|
|
238
|
+
_a.sent();
|
|
239
|
+
return [4 /*yield*/, (0, testing_1.wait)(undefined, 500)
|
|
240
|
+
// Verify database2's record still exists
|
|
241
|
+
];
|
|
242
|
+
case 6:
|
|
243
|
+
_a.sent();
|
|
244
|
+
return [4 /*yield*/, sdk.api.database_records.getOne(db2Record.id)];
|
|
245
|
+
case 7:
|
|
246
|
+
db2RecordAfter = _a.sent();
|
|
247
|
+
if (!db2RecordAfter) {
|
|
248
|
+
throw new Error('Database2 record should still exist');
|
|
249
|
+
}
|
|
250
|
+
console.log("\u2713 Verified database2 record was not affected by database1 deletion");
|
|
251
|
+
// Cleanup database2
|
|
252
|
+
return [4 /*yield*/, sdk.api.databases.deleteOne(database2.id)];
|
|
253
|
+
case 8:
|
|
254
|
+
// Cleanup database2
|
|
255
|
+
_a.sent();
|
|
256
|
+
return [2 /*return*/, true];
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}); }, { onResult: function (result) { return result === true; } })];
|
|
260
|
+
case 3:
|
|
261
|
+
// Test 3: Verify records from other databases are not affected
|
|
262
|
+
_b.sent();
|
|
263
|
+
console.log("✅ All Database Cascade Delete tests passed!");
|
|
264
|
+
return [2 /*return*/];
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
};
|
|
269
|
+
exports.database_cascade_delete_tests = database_cascade_delete_tests;
|
|
270
|
+
// Allow running this test file independently
|
|
271
|
+
if (require.main === module) {
|
|
272
|
+
console.log("\uD83C\uDF10 Using API URL: ".concat(host));
|
|
273
|
+
var sdk_2 = new sdk_1.Session({ host: host });
|
|
274
|
+
var sdkNonAdmin_1 = new sdk_1.Session({ host: host });
|
|
275
|
+
var runTests = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
276
|
+
return __generator(this, function (_a) {
|
|
277
|
+
switch (_a.label) {
|
|
278
|
+
case 0: return [4 /*yield*/, (0, setup_1.setup_tests)(sdk_2, sdkNonAdmin_1)];
|
|
279
|
+
case 1:
|
|
280
|
+
_a.sent();
|
|
281
|
+
return [4 /*yield*/, (0, exports.database_cascade_delete_tests)({ sdk: sdk_2, sdkNonAdmin: sdkNonAdmin_1 })];
|
|
282
|
+
case 2:
|
|
283
|
+
_a.sent();
|
|
284
|
+
return [2 /*return*/];
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}); };
|
|
288
|
+
runTests()
|
|
289
|
+
.then(function () {
|
|
290
|
+
console.log("✅ Database cascade delete test suite completed successfully");
|
|
291
|
+
process.exit(0);
|
|
292
|
+
})
|
|
293
|
+
.catch(function (error) {
|
|
294
|
+
console.error("❌ Database cascade delete test suite failed:", error);
|
|
295
|
+
process.exit(1);
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=database_cascade_delete.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database_cascade_delete.test.js","sourceRoot":"","sources":["../../../../src/tests/api_tests/database_cascade_delete.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox_thread_assignment_updates.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/inbox_thread_assignment_updates.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,eAAO,MAAM,qCAAqC;SAAuC,OAAO;iBAAe,OAAO;
|
|
1
|
+
{"version":3,"file":"inbox_thread_assignment_updates.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/api_tests/inbox_thread_assignment_updates.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,eAAO,MAAM,qCAAqC;SAAuC,OAAO;iBAAe,OAAO;mBA+pBrH,CAAA"}
|
|
@@ -56,7 +56,7 @@ var host = process.env.API_URL || 'http://localhost:8080';
|
|
|
56
56
|
var inbox_thread_assignment_updates_tests = function (_a) {
|
|
57
57
|
var sdk = _a.sdk, sdkNonAdmin = _a.sdkNonAdmin;
|
|
58
58
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
59
|
-
var timestamp, testUser, testEnduser, defaultThreadFields, emailSubject, emailThreadId, emailThread, testEmail, smsThread, testSMS, testChatRoom, chatThread, loadedThreads, updatedEmailThread, loadedThreads2, updatedSMSThread, loadedThreads3, updatedChatThread, loadedThreads4, unchangedThread, loadedThreads5, clearedAssignThread, fixedTimestamp, matchingTimestampSubject, matchingTimestampThreadId, matchingTimestampEmailThread_1, matchingTimestampEmail, loadedThreads6, matchingTimestampUpdatedThread, matchingTimestampSMSThread_1, matchingTimestampSMS, loadedThreads7, matchingTimestampSMSUpdatedThread, orphanEmail, threadsBeforeOrphanUpdate, threadCountBefore, threadsAfterOrphanUpdate, threadCountAfter, upsertSMS, threadsAfterUpsertTest, upsertedThread, countResult, allThreads, filteredThreads, filteredCount, nonMatchingCount, emailTypeFilter, foundEmailByType, foundSmsByType, multiTypeFilter, foundEmailMulti, foundSmsMulti, foundChatMulti, assigneeFilter, foundAssigned, combinedFilter, foundCombined, mdbFilterCount, emptyMdbFilter, idsFilterResult, foundEmailById, foundSmsById, foundChatById, singleIdResult, idsCombinedResult, idsCountResult, emptyIdsResult, err_1;
|
|
59
|
+
var timestamp, testUser, testEnduser, defaultThreadFields, emailSubject, emailThreadId, emailThread, testEmail, smsThread, testSMS, testChatRoom, chatThread, loadedThreads, updatedEmailThread, loadedThreads2, updatedSMSThread, loadedThreads3, updatedChatThread, loadedThreads4, unchangedThread, loadedThreads5, clearedAssignThread, fixedTimestamp, matchingTimestampSubject, matchingTimestampThreadId, matchingTimestampEmailThread_1, matchingTimestampEmail, loadedThreads6, matchingTimestampUpdatedThread, matchingTimestampSMSThread_1, matchingTimestampSMS, loadedThreads7, matchingTimestampSMSUpdatedThread, orphanEmail, threadsBeforeOrphanUpdate, threadCountBefore, threadsAfterOrphanUpdate, threadCountAfter, upsertSMS, threadsAfterUpsertTest, upsertedThread, countResult, allThreads, filteredThreads, filteredCount, nonMatchingCount, emailTypeFilter, foundEmailByType, foundSmsByType, multiTypeFilter, foundEmailMulti, foundSmsMulti, foundChatMulti, assigneeFilter, foundAssigned, combinedFilter, foundCombined, mdbFilterCount, emptyMdbFilter, idsFilterResult, foundEmailById, foundSmsById, foundChatById, singleIdResult, idsCombinedResult, idsCountResult, emptyIdsResult, sortTestBaseTime, sortThread1, sortThread2, sortThread3, defaultSortResult, timestampSortResult, outboundSortResult, statusTestSMS1, statusTestFrom, statusTestThreads, statusTestThread, statusTestSMS2, threadAfterOutbound, statusTestSMS3, threadAfterNewInbound, err_1;
|
|
60
60
|
var _b;
|
|
61
61
|
return __generator(this, function (_c) {
|
|
62
62
|
switch (_c.label) {
|
|
@@ -150,7 +150,7 @@ var inbox_thread_assignment_updates_tests = function (_a) {
|
|
|
150
150
|
_c.sent();
|
|
151
151
|
_c.label = 11;
|
|
152
152
|
case 11:
|
|
153
|
-
_c.trys.push([11, ,
|
|
153
|
+
_c.trys.push([11, , 87, 91]);
|
|
154
154
|
// Test 1: Email Assignment Updates
|
|
155
155
|
console.log("Testing email assignment updates...");
|
|
156
156
|
// Update email assignment
|
|
@@ -584,10 +584,172 @@ var inbox_thread_assignment_updates_tests = function (_a) {
|
|
|
584
584
|
emptyIdsResult = _c.sent();
|
|
585
585
|
(0, testing_1.assert)(emptyIdsResult.threads.length >= 3, 'Empty ids array should not filter (return all threads)');
|
|
586
586
|
console.log("✅ ids filter empty array test passed");
|
|
587
|
-
|
|
588
|
-
|
|
587
|
+
// Test 24: sortBy parameter - default behavior (timestamp)
|
|
588
|
+
console.log("Testing sortBy parameter - default behavior...");
|
|
589
|
+
sortTestBaseTime = Date.now();
|
|
590
|
+
return [4 /*yield*/, sdk.api.inbox_threads.createOne(__assign(__assign({}, defaultThreadFields), { type: "SMS", title: "Sort Test Thread 1", threadId: "sort-test-1-".concat(timestamp), phoneNumber: "+15555550001", enduserPhoneNumber: "+15555550002", timestamp: new Date(sortTestBaseTime - 3000), outboundTimestamp: new Date(sortTestBaseTime) }))];
|
|
589
591
|
case 67:
|
|
590
|
-
_c.
|
|
592
|
+
sortThread1 = _c.sent();
|
|
593
|
+
return [4 /*yield*/, sdk.api.inbox_threads.createOne(__assign(__assign({}, defaultThreadFields), { type: "SMS", title: "Sort Test Thread 2", threadId: "sort-test-2-".concat(timestamp), phoneNumber: "+15555550003", enduserPhoneNumber: "+15555550004", timestamp: new Date(sortTestBaseTime - 1000), outboundTimestamp: new Date(sortTestBaseTime - 3000) }))];
|
|
594
|
+
case 68:
|
|
595
|
+
sortThread2 = _c.sent();
|
|
596
|
+
return [4 /*yield*/, sdk.api.inbox_threads.createOne(__assign(__assign({}, defaultThreadFields), { type: "SMS", title: "Sort Test Thread 3", threadId: "sort-test-3-".concat(timestamp), phoneNumber: "+15555550005", enduserPhoneNumber: "+15555550006", timestamp: new Date(sortTestBaseTime - 2000), outboundTimestamp: new Date(sortTestBaseTime - 2000) }))
|
|
597
|
+
// Test default sort (should be by timestamp descending)
|
|
598
|
+
];
|
|
599
|
+
case 69:
|
|
600
|
+
sortThread3 = _c.sent();
|
|
601
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({
|
|
602
|
+
ids: [sortThread1.id, sortThread2.id, sortThread3.id]
|
|
603
|
+
})];
|
|
604
|
+
case 70:
|
|
605
|
+
defaultSortResult = _c.sent();
|
|
606
|
+
(0, testing_1.assert)(defaultSortResult.threads.length === 3, 'Should return 3 sort test threads');
|
|
607
|
+
(0, testing_1.assert)(defaultSortResult.threads[0].id === sortThread2.id, 'Default sort: newest timestamp should be first');
|
|
608
|
+
(0, testing_1.assert)(defaultSortResult.threads[1].id === sortThread3.id, 'Default sort: middle timestamp should be second');
|
|
609
|
+
(0, testing_1.assert)(defaultSortResult.threads[2].id === sortThread1.id, 'Default sort: oldest timestamp should be last');
|
|
610
|
+
console.log("✅ sortBy default behavior test passed");
|
|
611
|
+
// Test 25: sortBy='timestamp' explicit
|
|
612
|
+
console.log("Testing sortBy='timestamp' explicit...");
|
|
613
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({
|
|
614
|
+
ids: [sortThread1.id, sortThread2.id, sortThread3.id],
|
|
615
|
+
sortBy: 'timestamp'
|
|
616
|
+
})];
|
|
617
|
+
case 71:
|
|
618
|
+
timestampSortResult = _c.sent();
|
|
619
|
+
(0, testing_1.assert)(timestampSortResult.threads[0].id === sortThread2.id, 'Explicit timestamp sort: newest should be first');
|
|
620
|
+
(0, testing_1.assert)(timestampSortResult.threads[1].id === sortThread3.id, 'Explicit timestamp sort: middle should be second');
|
|
621
|
+
(0, testing_1.assert)(timestampSortResult.threads[2].id === sortThread1.id, 'Explicit timestamp sort: oldest should be last');
|
|
622
|
+
console.log("✅ sortBy='timestamp' test passed");
|
|
623
|
+
// Test 26: sortBy='outboundTimestamp'
|
|
624
|
+
console.log("Testing sortBy='outboundTimestamp'...");
|
|
625
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({
|
|
626
|
+
ids: [sortThread1.id, sortThread2.id, sortThread3.id],
|
|
627
|
+
sortBy: 'outboundTimestamp'
|
|
628
|
+
})];
|
|
629
|
+
case 72:
|
|
630
|
+
outboundSortResult = _c.sent();
|
|
631
|
+
(0, testing_1.assert)(outboundSortResult.threads[0].id === sortThread1.id, 'OutboundTimestamp sort: newest outbound should be first');
|
|
632
|
+
(0, testing_1.assert)(outboundSortResult.threads[1].id === sortThread3.id, 'OutboundTimestamp sort: middle outbound should be second');
|
|
633
|
+
(0, testing_1.assert)(outboundSortResult.threads[2].id === sortThread2.id, 'OutboundTimestamp sort: oldest outbound should be last');
|
|
634
|
+
console.log("✅ sortBy='outboundTimestamp' test passed");
|
|
635
|
+
// Cleanup sort test threads
|
|
636
|
+
return [4 /*yield*/, Promise.all([
|
|
637
|
+
sdk.api.inbox_threads.deleteOne(sortThread1.id),
|
|
638
|
+
sdk.api.inbox_threads.deleteOne(sortThread2.id),
|
|
639
|
+
sdk.api.inbox_threads.deleteOne(sortThread3.id),
|
|
640
|
+
])
|
|
641
|
+
// ========== InboxStatus Preservation Tests ==========
|
|
642
|
+
// These tests verify that outbound messages do NOT reset inboxStatus
|
|
643
|
+
// Test 27: Outbound SMS should NOT reset inboxStatus
|
|
644
|
+
];
|
|
645
|
+
case 73:
|
|
646
|
+
// Cleanup sort test threads
|
|
647
|
+
_c.sent();
|
|
648
|
+
// ========== InboxStatus Preservation Tests ==========
|
|
649
|
+
// These tests verify that outbound messages do NOT reset inboxStatus
|
|
650
|
+
// Test 27: Outbound SMS should NOT reset inboxStatus
|
|
651
|
+
console.log("Testing outbound SMS should NOT reset inboxStatus...");
|
|
652
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
653
|
+
message: "Inbound test message for status test",
|
|
654
|
+
enduserId: testEnduser.id,
|
|
655
|
+
inbound: true,
|
|
656
|
+
phoneNumber: "+15555559999",
|
|
657
|
+
enduserPhoneNumber: "+15555559876",
|
|
658
|
+
logOnly: true,
|
|
659
|
+
})
|
|
660
|
+
// Build threads using reset_threads + build_threads pattern
|
|
661
|
+
];
|
|
662
|
+
case 74:
|
|
663
|
+
statusTestSMS1 = _c.sent();
|
|
664
|
+
statusTestFrom = new Date(Date.now() - 60000);
|
|
665
|
+
return [4 /*yield*/, sdk.api.inbox_threads.reset_threads()];
|
|
666
|
+
case 75:
|
|
667
|
+
_c.sent();
|
|
668
|
+
return [4 /*yield*/, sdk.api.inbox_threads.build_threads({ from: statusTestFrom, to: new Date() })];
|
|
669
|
+
case 76:
|
|
670
|
+
_c.sent();
|
|
671
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({})];
|
|
672
|
+
case 77:
|
|
673
|
+
statusTestThreads = _c.sent();
|
|
674
|
+
statusTestThread = statusTestThreads.threads.find(function (t) {
|
|
675
|
+
return t.type === 'SMS' && t.enduserIds.includes(testEnduser.id) && t.phoneNumber === "+15555559999";
|
|
676
|
+
});
|
|
677
|
+
(0, testing_1.assert)(!!statusTestThread, "Status test SMS thread should be created");
|
|
678
|
+
(0, testing_1.assert)(statusTestThread.inboxStatus === 'New', "Initial status should be 'New', got '".concat(statusTestThread.inboxStatus, "'"));
|
|
679
|
+
// Update thread status to "Resolved"
|
|
680
|
+
return [4 /*yield*/, sdk.api.inbox_threads.updateOne(statusTestThread.id, { inboxStatus: "Resolved" })
|
|
681
|
+
// Create outbound SMS (should NOT reset status)
|
|
682
|
+
];
|
|
683
|
+
case 78:
|
|
684
|
+
// Update thread status to "Resolved"
|
|
685
|
+
_c.sent();
|
|
686
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
687
|
+
message: "Outbound reply - should not reset status",
|
|
688
|
+
enduserId: testEnduser.id,
|
|
689
|
+
inbound: false,
|
|
690
|
+
phoneNumber: "+15555559999",
|
|
691
|
+
enduserPhoneNumber: "+15555559876",
|
|
692
|
+
logOnly: true,
|
|
693
|
+
})
|
|
694
|
+
// Rebuild threads - status should remain "Resolved"
|
|
695
|
+
];
|
|
696
|
+
case 79:
|
|
697
|
+
statusTestSMS2 = _c.sent();
|
|
698
|
+
// Rebuild threads - status should remain "Resolved"
|
|
699
|
+
return [4 /*yield*/, sdk.api.inbox_threads.build_threads({ from: statusTestFrom, to: new Date() })];
|
|
700
|
+
case 80:
|
|
701
|
+
// Rebuild threads - status should remain "Resolved"
|
|
702
|
+
_c.sent();
|
|
703
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({ ids: [statusTestThread.id] })];
|
|
704
|
+
case 81:
|
|
705
|
+
threadAfterOutbound = (_c.sent()).threads[0];
|
|
706
|
+
(0, testing_1.assert)(threadAfterOutbound.inboxStatus === 'Resolved', "Status should remain 'Resolved' after outbound message, got '".concat(threadAfterOutbound.inboxStatus, "'"));
|
|
707
|
+
(0, testing_1.assert)(!!threadAfterOutbound.outboundTimestamp, "outboundTimestamp should be set after outbound message");
|
|
708
|
+
console.log("✅ Outbound SMS does NOT reset inboxStatus test passed");
|
|
709
|
+
// Test 28: New inbound SMS SHOULD update inboxStatus
|
|
710
|
+
console.log("Testing new inbound SMS SHOULD update inboxStatus...");
|
|
711
|
+
// Wait to ensure ObjectId timestamps are in different seconds (MongoDB ObjectIds have second-level precision)
|
|
712
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1100); })];
|
|
713
|
+
case 82:
|
|
714
|
+
// Wait to ensure ObjectId timestamps are in different seconds (MongoDB ObjectIds have second-level precision)
|
|
715
|
+
_c.sent();
|
|
716
|
+
return [4 /*yield*/, sdk.api.sms_messages.createOne({
|
|
717
|
+
message: "New inbound - should update status",
|
|
718
|
+
enduserId: testEnduser.id,
|
|
719
|
+
inbound: true,
|
|
720
|
+
phoneNumber: "+15555559999",
|
|
721
|
+
enduserPhoneNumber: "+15555559876",
|
|
722
|
+
inboxStatus: "New",
|
|
723
|
+
logOnly: true,
|
|
724
|
+
})
|
|
725
|
+
// Rebuild threads - status SHOULD be updated from new inbound
|
|
726
|
+
];
|
|
727
|
+
case 83:
|
|
728
|
+
statusTestSMS3 = _c.sent();
|
|
729
|
+
// Rebuild threads - status SHOULD be updated from new inbound
|
|
730
|
+
return [4 /*yield*/, sdk.api.inbox_threads.build_threads({ from: statusTestFrom, to: new Date() })];
|
|
731
|
+
case 84:
|
|
732
|
+
// Rebuild threads - status SHOULD be updated from new inbound
|
|
733
|
+
_c.sent();
|
|
734
|
+
return [4 /*yield*/, sdk.api.inbox_threads.load_threads({ ids: [statusTestThread.id] })];
|
|
735
|
+
case 85:
|
|
736
|
+
threadAfterNewInbound = (_c.sent()).threads[0];
|
|
737
|
+
(0, testing_1.assert)(threadAfterNewInbound.inboxStatus === 'New', "Status SHOULD be 'New' after new inbound message, got '".concat(threadAfterNewInbound.inboxStatus, "'"));
|
|
738
|
+
console.log("✅ New inbound SMS DOES update inboxStatus test passed");
|
|
739
|
+
// Cleanup status preservation test resources
|
|
740
|
+
return [4 /*yield*/, Promise.all([
|
|
741
|
+
sdk.api.sms_messages.deleteOne(statusTestSMS1.id),
|
|
742
|
+
sdk.api.sms_messages.deleteOne(statusTestSMS2.id),
|
|
743
|
+
sdk.api.sms_messages.deleteOne(statusTestSMS3.id),
|
|
744
|
+
sdk.api.inbox_threads.deleteOne(statusTestThread.id),
|
|
745
|
+
])];
|
|
746
|
+
case 86:
|
|
747
|
+
// Cleanup status preservation test resources
|
|
748
|
+
_c.sent();
|
|
749
|
+
console.log("🎉 All InboxThread assignment update tests passed!");
|
|
750
|
+
return [3 /*break*/, 91];
|
|
751
|
+
case 87:
|
|
752
|
+
_c.trys.push([87, 89, , 90]);
|
|
591
753
|
return [4 /*yield*/, Promise.all([
|
|
592
754
|
sdk.api.inbox_threads.deleteOne(emailThread.id),
|
|
593
755
|
sdk.api.inbox_threads.deleteOne(smsThread.id),
|
|
@@ -598,15 +760,15 @@ var inbox_thread_assignment_updates_tests = function (_a) {
|
|
|
598
760
|
sdk.api.endusers.deleteOne(testEnduser.id),
|
|
599
761
|
sdk.api.users.deleteOne(testUser.id),
|
|
600
762
|
])];
|
|
601
|
-
case
|
|
763
|
+
case 88:
|
|
602
764
|
_c.sent();
|
|
603
|
-
return [3 /*break*/,
|
|
604
|
-
case
|
|
765
|
+
return [3 /*break*/, 90];
|
|
766
|
+
case 89:
|
|
605
767
|
err_1 = _c.sent();
|
|
606
768
|
console.error("Cleanup error:", err_1);
|
|
607
|
-
return [3 /*break*/,
|
|
608
|
-
case
|
|
609
|
-
case
|
|
769
|
+
return [3 /*break*/, 90];
|
|
770
|
+
case 90: return [7 /*endfinally*/];
|
|
771
|
+
case 91: return [2 /*return*/];
|
|
610
772
|
}
|
|
611
773
|
});
|
|
612
774
|
});
|