@livetemplate/client 0.4.0 → 0.4.1

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.
@@ -0,0 +1,365 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const upload_handler_1 = require("../upload/upload-handler");
4
+ // Mock FileReader to simulate async file reading behavior.
5
+ // The UploadHandler uses FileReader.readAsDataURL() to convert file chunks
6
+ // to base64 for WebSocket transmission. This mock returns a fixed base64 string
7
+ // after a 0ms timeout to simulate the async nature of the real FileReader API.
8
+ class MockFileReader {
9
+ constructor() {
10
+ this.onload = null;
11
+ this.onerror = null;
12
+ this.result = "";
13
+ }
14
+ readAsDataURL(blob) {
15
+ setTimeout(() => {
16
+ this.result = "data:application/octet-stream;base64,dGVzdCBjb250ZW50";
17
+ if (this.onload)
18
+ this.onload();
19
+ }, 0);
20
+ }
21
+ }
22
+ global.FileReader = MockFileReader;
23
+ describe("UploadHandler", () => {
24
+ let handler;
25
+ let mockSendMessage;
26
+ beforeEach(() => {
27
+ document.body.innerHTML = "";
28
+ mockSendMessage = jest.fn();
29
+ handler = new upload_handler_1.UploadHandler(mockSendMessage);
30
+ jest.useFakeTimers();
31
+ });
32
+ afterEach(() => {
33
+ jest.useRealTimers();
34
+ });
35
+ const createMockFile = (name = "test.txt", content = "test content", type = "text/plain") => {
36
+ return new File([content], name, { type });
37
+ };
38
+ describe("initializeFileInputs", () => {
39
+ it("detects file inputs with lvt-upload attribute", () => {
40
+ document.body.innerHTML = `
41
+ <input type="file" lvt-upload="avatar" id="avatar-input" />
42
+ <input type="file" id="regular-input" />
43
+ `;
44
+ handler.initializeFileInputs(document.body);
45
+ const avatarInput = document.getElementById("avatar-input");
46
+ // Create a file and dispatch change event
47
+ const file = createMockFile();
48
+ Object.defineProperty(avatarInput, "files", { value: [file] });
49
+ avatarInput.dispatchEvent(new Event("change"));
50
+ expect(mockSendMessage).toHaveBeenCalledWith(expect.objectContaining({
51
+ action: "upload_start",
52
+ upload_name: "avatar",
53
+ }));
54
+ });
55
+ it("removes existing listener before adding new one", () => {
56
+ document.body.innerHTML = `<input type="file" lvt-upload="test" id="test-input" />`;
57
+ handler.initializeFileInputs(document.body);
58
+ handler.initializeFileInputs(document.body);
59
+ const input = document.getElementById("test-input");
60
+ const file = createMockFile();
61
+ Object.defineProperty(input, "files", { value: [file] });
62
+ input.dispatchEvent(new Event("change"));
63
+ // Should only send one message, not two
64
+ expect(mockSendMessage).toHaveBeenCalledTimes(1);
65
+ });
66
+ it("does nothing for empty file selection", () => {
67
+ document.body.innerHTML = `<input type="file" lvt-upload="test" id="test-input" />`;
68
+ handler.initializeFileInputs(document.body);
69
+ const input = document.getElementById("test-input");
70
+ Object.defineProperty(input, "files", { value: [] });
71
+ input.dispatchEvent(new Event("change"));
72
+ expect(mockSendMessage).not.toHaveBeenCalled();
73
+ });
74
+ it("ignores inputs without lvt-upload value", () => {
75
+ document.body.innerHTML = `<input type="file" lvt-upload="" id="test-input" />`;
76
+ handler.initializeFileInputs(document.body);
77
+ const input = document.getElementById("test-input");
78
+ const file = createMockFile();
79
+ Object.defineProperty(input, "files", { value: [file] });
80
+ input.dispatchEvent(new Event("change"));
81
+ expect(mockSendMessage).not.toHaveBeenCalled();
82
+ });
83
+ });
84
+ describe("startUpload", () => {
85
+ it("sends upload_start message with file metadata", async () => {
86
+ const files = [
87
+ createMockFile("doc1.pdf", "content1", "application/pdf"),
88
+ createMockFile("doc2.txt", "content2", "text/plain"),
89
+ ];
90
+ await handler.startUpload("documents", files);
91
+ expect(mockSendMessage).toHaveBeenCalledWith({
92
+ action: "upload_start",
93
+ upload_name: "documents",
94
+ files: [
95
+ { name: "doc1.pdf", type: "application/pdf", size: 8 },
96
+ { name: "doc2.txt", type: "text/plain", size: 8 },
97
+ ],
98
+ });
99
+ });
100
+ it("uses default MIME type for files without type", async () => {
101
+ const file = new File(["content"], "unknown");
102
+ Object.defineProperty(file, "type", { value: "" });
103
+ await handler.startUpload("test", [file]);
104
+ expect(mockSendMessage).toHaveBeenCalledWith(expect.objectContaining({
105
+ files: [expect.objectContaining({ type: "application/octet-stream" })],
106
+ }));
107
+ });
108
+ });
109
+ describe("handleUploadStartResponse", () => {
110
+ it("creates upload entries from server response", async () => {
111
+ const file = createMockFile("test.txt");
112
+ await handler.startUpload("test", [file]);
113
+ const response = {
114
+ upload_name: "test",
115
+ entries: [
116
+ {
117
+ entry_id: "entry-1",
118
+ client_name: "test.txt",
119
+ valid: true,
120
+ auto_upload: false,
121
+ },
122
+ ],
123
+ };
124
+ await handler.handleUploadStartResponse(response);
125
+ const entries = handler.getEntries("test");
126
+ expect(entries).toHaveLength(1);
127
+ expect(entries[0].id).toBe("entry-1");
128
+ expect(entries[0].valid).toBe(true);
129
+ });
130
+ it("handles invalid entries with error callback", async () => {
131
+ const onError = jest.fn();
132
+ handler = new upload_handler_1.UploadHandler(mockSendMessage, { onError });
133
+ const file = createMockFile("large.zip");
134
+ await handler.startUpload("test", [file]);
135
+ const response = {
136
+ upload_name: "test",
137
+ entries: [
138
+ {
139
+ entry_id: "entry-1",
140
+ client_name: "large.zip",
141
+ valid: false,
142
+ auto_upload: false,
143
+ error: "File too large",
144
+ },
145
+ ],
146
+ };
147
+ await handler.handleUploadStartResponse(response);
148
+ expect(onError).toHaveBeenCalledWith(expect.objectContaining({ id: "entry-1" }), "File too large");
149
+ });
150
+ it("starts chunked upload when auto_upload is true", async () => {
151
+ const file = createMockFile("test.txt");
152
+ await handler.startUpload("test", [file]);
153
+ const response = {
154
+ upload_name: "test",
155
+ entries: [
156
+ {
157
+ entry_id: "entry-1",
158
+ client_name: "test.txt",
159
+ valid: true,
160
+ auto_upload: true,
161
+ },
162
+ ],
163
+ };
164
+ await handler.handleUploadStartResponse(response);
165
+ // Wait for async file reading
166
+ await jest.runAllTimersAsync();
167
+ // Should have sent chunk message
168
+ expect(mockSendMessage).toHaveBeenCalledWith(expect.objectContaining({
169
+ action: "upload_chunk",
170
+ entry_id: "entry-1",
171
+ }));
172
+ });
173
+ it("logs warning for missing files", async () => {
174
+ const consoleSpy = jest.spyOn(console, "warn").mockImplementation();
175
+ // Start upload but don't provide matching file
176
+ await handler.startUpload("test", [createMockFile("other.txt")]);
177
+ const response = {
178
+ upload_name: "test",
179
+ entries: [
180
+ {
181
+ entry_id: "entry-1",
182
+ client_name: "missing.txt",
183
+ valid: true,
184
+ auto_upload: false,
185
+ },
186
+ ],
187
+ };
188
+ await handler.handleUploadStartResponse(response);
189
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("No file found for entry"));
190
+ consoleSpy.mockRestore();
191
+ });
192
+ it("logs error when no pending files found", async () => {
193
+ const consoleSpy = jest.spyOn(console, "error").mockImplementation();
194
+ const response = {
195
+ upload_name: "unknown",
196
+ entries: [],
197
+ };
198
+ await handler.handleUploadStartResponse(response);
199
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("No pending files found for upload"));
200
+ consoleSpy.mockRestore();
201
+ });
202
+ });
203
+ describe("handleProgressMessage", () => {
204
+ it("updates entry progress and calls callback", async () => {
205
+ const onProgress = jest.fn();
206
+ handler = new upload_handler_1.UploadHandler(mockSendMessage, { onProgress });
207
+ const file = createMockFile("test.txt");
208
+ await handler.startUpload("test", [file]);
209
+ const response = {
210
+ upload_name: "test",
211
+ entries: [
212
+ {
213
+ entry_id: "entry-1",
214
+ client_name: "test.txt",
215
+ valid: true,
216
+ auto_upload: false,
217
+ },
218
+ ],
219
+ };
220
+ await handler.handleUploadStartResponse(response);
221
+ handler.handleProgressMessage({
222
+ type: "upload_progress",
223
+ upload_name: "test",
224
+ entry_id: "entry-1",
225
+ client_name: "test.txt",
226
+ progress: 50,
227
+ bytes_recv: 500,
228
+ bytes_total: 1000,
229
+ });
230
+ const entries = handler.getEntries("test");
231
+ expect(entries[0].progress).toBe(50);
232
+ expect(entries[0].bytesUploaded).toBe(500);
233
+ expect(onProgress).toHaveBeenCalled();
234
+ });
235
+ it("ignores progress for unknown entry", () => {
236
+ const onProgress = jest.fn();
237
+ handler = new upload_handler_1.UploadHandler(mockSendMessage, { onProgress });
238
+ handler.handleProgressMessage({
239
+ type: "upload_progress",
240
+ upload_name: "test",
241
+ entry_id: "unknown",
242
+ client_name: "unknown.txt",
243
+ progress: 50,
244
+ bytes_recv: 500,
245
+ bytes_total: 1000,
246
+ });
247
+ expect(onProgress).not.toHaveBeenCalled();
248
+ });
249
+ });
250
+ describe("cancelUpload", () => {
251
+ it("cancels upload and sends cancel message", async () => {
252
+ const file = createMockFile("test.txt");
253
+ await handler.startUpload("test", [file]);
254
+ const response = {
255
+ upload_name: "test",
256
+ entries: [
257
+ {
258
+ entry_id: "entry-1",
259
+ client_name: "test.txt",
260
+ valid: true,
261
+ auto_upload: false,
262
+ },
263
+ ],
264
+ };
265
+ await handler.handleUploadStartResponse(response);
266
+ handler.cancelUpload("entry-1");
267
+ expect(mockSendMessage).toHaveBeenCalledWith({
268
+ action: "cancel_upload",
269
+ entry_id: "entry-1",
270
+ });
271
+ const entries = handler.getEntries("test");
272
+ expect(entries).toHaveLength(0);
273
+ });
274
+ it("does nothing for unknown entry", () => {
275
+ handler.cancelUpload("unknown");
276
+ expect(mockSendMessage).not.toHaveBeenCalledWith(expect.objectContaining({ action: "cancel_upload" }));
277
+ });
278
+ });
279
+ describe("triggerPendingUploads", () => {
280
+ it("starts uploads for pending entries", async () => {
281
+ const file = createMockFile("test.txt");
282
+ await handler.startUpload("test", [file]);
283
+ const response = {
284
+ upload_name: "test",
285
+ entries: [
286
+ {
287
+ entry_id: "entry-1",
288
+ client_name: "test.txt",
289
+ valid: true,
290
+ auto_upload: false, // Not auto-uploading
291
+ },
292
+ ],
293
+ };
294
+ await handler.handleUploadStartResponse(response);
295
+ // No chunk sent yet
296
+ expect(mockSendMessage).not.toHaveBeenCalledWith(expect.objectContaining({ action: "upload_chunk" }));
297
+ // Trigger pending uploads
298
+ handler.triggerPendingUploads("test");
299
+ await jest.runAllTimersAsync();
300
+ // Now chunk should be sent
301
+ expect(mockSendMessage).toHaveBeenCalledWith(expect.objectContaining({
302
+ action: "upload_chunk",
303
+ entry_id: "entry-1",
304
+ }));
305
+ });
306
+ });
307
+ describe("registerUploader", () => {
308
+ it("registers custom uploader", () => {
309
+ const customUploader = {
310
+ upload: jest.fn().mockResolvedValue(undefined),
311
+ };
312
+ handler.registerUploader("custom", customUploader);
313
+ // Uploader is registered (internal state)
314
+ // Would be used when external upload with uploader: "custom" is received
315
+ });
316
+ });
317
+ describe("getEntries", () => {
318
+ it("returns entries for specified upload name", async () => {
319
+ const file1 = createMockFile("file1.txt");
320
+ const file2 = createMockFile("file2.txt");
321
+ await handler.startUpload("upload1", [file1]);
322
+ await handler.startUpload("upload2", [file2]);
323
+ const response1 = {
324
+ upload_name: "upload1",
325
+ entries: [{ entry_id: "e1", client_name: "file1.txt", valid: true, auto_upload: false }],
326
+ };
327
+ const response2 = {
328
+ upload_name: "upload2",
329
+ entries: [{ entry_id: "e2", client_name: "file2.txt", valid: true, auto_upload: false }],
330
+ };
331
+ await handler.handleUploadStartResponse(response1);
332
+ await handler.handleUploadStartResponse(response2);
333
+ const entries1 = handler.getEntries("upload1");
334
+ const entries2 = handler.getEntries("upload2");
335
+ expect(entries1).toHaveLength(1);
336
+ expect(entries1[0].id).toBe("e1");
337
+ expect(entries2).toHaveLength(1);
338
+ expect(entries2[0].id).toBe("e2");
339
+ });
340
+ });
341
+ describe("cleanupEntries", () => {
342
+ it("removes completed entries after delay", async () => {
343
+ const file = createMockFile("test.txt");
344
+ await handler.startUpload("test", [file]);
345
+ const response = {
346
+ upload_name: "test",
347
+ entries: [
348
+ { entry_id: "entry-1", client_name: "test.txt", valid: true, auto_upload: false },
349
+ ],
350
+ };
351
+ await handler.handleUploadStartResponse(response);
352
+ // Manually mark entry as done to test cleanup
353
+ const entries = handler.getEntries("test");
354
+ expect(entries).toHaveLength(1);
355
+ entries[0].done = true;
356
+ // Trigger cleanup
357
+ handler.cleanupEntries("test", 1000);
358
+ // Wait for cleanup delay
359
+ jest.advanceTimersByTime(1500);
360
+ const entriesAfterCleanup = handler.getEntries("test");
361
+ expect(entriesAfterCleanup).toHaveLength(0);
362
+ });
363
+ });
364
+ });
365
+ //# sourceMappingURL=upload-handler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-handler.test.js","sourceRoot":"","sources":["../../tests/upload-handler.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=websocket.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.test.d.ts","sourceRoot":"","sources":["../../tests/websocket.test.ts"],"names":[],"mappings":""}