@livetemplate/client 0.8.5 → 0.8.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.
@@ -0,0 +1,526 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const change_auto_wirer_1 = require("../state/change-auto-wirer");
4
+ const logger_1 = require("../utils/logger");
5
+ describe("ChangeAutoWirer", () => {
6
+ let wirer;
7
+ let sendSpy;
8
+ let wrapper;
9
+ const createContext = () => ({
10
+ getWrapperElement: () => wrapper,
11
+ send: sendSpy,
12
+ });
13
+ beforeEach(() => {
14
+ jest.useFakeTimers();
15
+ sendSpy = jest.fn();
16
+ wrapper = document.createElement("div");
17
+ document.body.appendChild(wrapper);
18
+ const logger = (0, logger_1.createLogger)({ scope: "ChangeAutoWirerTest", level: "silent" });
19
+ wirer = new change_auto_wirer_1.ChangeAutoWirer(createContext(), logger);
20
+ });
21
+ afterEach(() => {
22
+ wirer.teardown();
23
+ document.body.innerHTML = "";
24
+ jest.useRealTimers();
25
+ });
26
+ // ===== Statics Analysis =====
27
+ describe("analyzeStatics", () => {
28
+ it("detects value-bound input", () => {
29
+ wirer.analyzeStatics({
30
+ s: ['<input name="Title" value="', '">'],
31
+ "0": "current value",
32
+ });
33
+ const fields = wirer.getBoundFields();
34
+ expect(fields.size).toBe(1);
35
+ expect(fields.get("Title")).toBe("value");
36
+ });
37
+ it("detects value-bound input with extra attributes", () => {
38
+ wirer.analyzeStatics({
39
+ s: ['<input type="text" class="form-control" name="Title" id="title-input" value="', '">'],
40
+ "0": "current value",
41
+ });
42
+ const fields = wirer.getBoundFields();
43
+ expect(fields.size).toBe(1);
44
+ expect(fields.get("Title")).toBe("value");
45
+ });
46
+ it("detects textarea content binding", () => {
47
+ wirer.analyzeStatics({
48
+ s: ['<textarea name="Bio">', "</textarea>"],
49
+ "0": "bio content",
50
+ });
51
+ const fields = wirer.getBoundFields();
52
+ expect(fields.size).toBe(1);
53
+ expect(fields.get("Bio")).toBe("content");
54
+ });
55
+ it("detects textarea with extra attributes", () => {
56
+ wirer.analyzeStatics({
57
+ s: ['<textarea class="big" name="Bio" rows="5">', "</textarea>"],
58
+ "0": "bio content",
59
+ });
60
+ const fields = wirer.getBoundFields();
61
+ expect(fields.size).toBe(1);
62
+ expect(fields.get("Bio")).toBe("content");
63
+ });
64
+ it("detects checkbox attribute binding", () => {
65
+ wirer.analyzeStatics({
66
+ s: ['<input type="checkbox" name="Active" ', ">"],
67
+ "0": "checked",
68
+ });
69
+ const fields = wirer.getBoundFields();
70
+ expect(fields.size).toBe(1);
71
+ expect(fields.get("Active")).toBe("attribute");
72
+ });
73
+ it("does NOT detect static-only inputs", () => {
74
+ wirer.analyzeStatics({
75
+ s: ['<input name="csrf" value="token123"><input name="Title" value="', '">'],
76
+ "0": "dynamic",
77
+ });
78
+ const fields = wirer.getBoundFields();
79
+ // Only Title should be detected, not csrf
80
+ expect(fields.size).toBe(1);
81
+ expect(fields.has("csrf")).toBe(false);
82
+ expect(fields.has("Title")).toBe(true);
83
+ });
84
+ it("handles multiple bound fields", () => {
85
+ wirer.analyzeStatics({
86
+ s: [
87
+ '<input name="Title" value="',
88
+ '"><textarea name="Bio">',
89
+ '</textarea><input type="checkbox" name="Active" ',
90
+ ">",
91
+ ],
92
+ "0": "title",
93
+ "1": "bio",
94
+ "2": "checked",
95
+ });
96
+ const fields = wirer.getBoundFields();
97
+ expect(fields.size).toBe(3);
98
+ expect(fields.has("Title")).toBe(true);
99
+ expect(fields.has("Bio")).toBe(true);
100
+ expect(fields.has("Active")).toBe(true);
101
+ });
102
+ it("handles nested tree structures", () => {
103
+ wirer.analyzeStatics({
104
+ s: ["<div>", "</div>"],
105
+ "0": {
106
+ s: ['<input name="Name" value="', '">'],
107
+ "0": "nested value",
108
+ },
109
+ });
110
+ const fields = wirer.getBoundFields();
111
+ expect(fields.size).toBe(1);
112
+ expect(fields.has("Name")).toBe(true);
113
+ });
114
+ it("handles range structures with form inputs", () => {
115
+ wirer.analyzeStatics({
116
+ s: ["<ul>", "</ul>"],
117
+ "0": {
118
+ d: [
119
+ { "0": "item1", _k: "1" },
120
+ { "0": "item2", _k: "2" },
121
+ ],
122
+ s: ['<li><input name="Item" value="', '"></li>'],
123
+ },
124
+ });
125
+ const fields = wirer.getBoundFields();
126
+ expect(fields.size).toBe(1);
127
+ expect(fields.has("Item")).toBe(true);
128
+ });
129
+ it("returns empty for tree with no form inputs", () => {
130
+ wirer.analyzeStatics({
131
+ s: ["<div>", "</div>"],
132
+ "0": "just text",
133
+ });
134
+ expect(wirer.getBoundFields().size).toBe(0);
135
+ });
136
+ it("does not detect value binding when > appears between tag start and end", () => {
137
+ // The value=" is after a >, so it's not inside the same tag as name=
138
+ wirer.analyzeStatics({
139
+ s: ['<div name="Foo">some text<span value="', '">'],
140
+ "0": "val",
141
+ });
142
+ // name="Foo" is in a <div> tag that is already closed
143
+ // value=" is in a <span> tag without name=
144
+ expect(wirer.getBoundFields().size).toBe(0);
145
+ });
146
+ });
147
+ // ===== Capabilities =====
148
+ describe("setCapabilities", () => {
149
+ it("enables when capabilities include 'change'", () => {
150
+ wirer.setCapabilities(["change"]);
151
+ expect(wirer.isEnabled()).toBe(true);
152
+ });
153
+ it("stays disabled when capabilities don't include 'change'", () => {
154
+ wirer.setCapabilities(["other"]);
155
+ expect(wirer.isEnabled()).toBe(false);
156
+ });
157
+ it("stays disabled with empty capabilities", () => {
158
+ wirer.setCapabilities([]);
159
+ expect(wirer.isEnabled()).toBe(false);
160
+ });
161
+ });
162
+ // ===== DOM Wiring =====
163
+ describe("wireElements", () => {
164
+ const setupWirer = (statics) => {
165
+ wirer.setCapabilities(["change"]);
166
+ wirer.analyzeStatics(statics);
167
+ };
168
+ it("wires input element and sends change on input event", () => {
169
+ const input = document.createElement("input");
170
+ input.setAttribute("name", "Title");
171
+ input.value = "old";
172
+ wrapper.appendChild(input);
173
+ setupWirer({
174
+ s: ['<input name="Title" value="', '">'],
175
+ "0": "old",
176
+ });
177
+ wirer.wireElements();
178
+ input.value = "new value";
179
+ input.dispatchEvent(new Event("input", { bubbles: true }));
180
+ // Advance past debounce
181
+ jest.advanceTimersByTime(300);
182
+ expect(sendSpy).toHaveBeenCalledWith({
183
+ action: "change",
184
+ data: { Title: "new value" },
185
+ });
186
+ });
187
+ it("debounces input events at 300ms default", () => {
188
+ const input = document.createElement("input");
189
+ input.setAttribute("name", "Title");
190
+ wrapper.appendChild(input);
191
+ setupWirer({
192
+ s: ['<input name="Title" value="', '">'],
193
+ "0": "",
194
+ });
195
+ wirer.wireElements();
196
+ // Rapid typing
197
+ input.value = "a";
198
+ input.dispatchEvent(new Event("input", { bubbles: true }));
199
+ jest.advanceTimersByTime(100);
200
+ input.value = "ab";
201
+ input.dispatchEvent(new Event("input", { bubbles: true }));
202
+ jest.advanceTimersByTime(100);
203
+ input.value = "abc";
204
+ input.dispatchEvent(new Event("input", { bubbles: true }));
205
+ // Not yet fired
206
+ expect(sendSpy).not.toHaveBeenCalled();
207
+ // Advance past debounce
208
+ jest.advanceTimersByTime(300);
209
+ // Should have been called once with the latest value
210
+ expect(sendSpy).toHaveBeenCalledTimes(1);
211
+ expect(sendSpy).toHaveBeenCalledWith({
212
+ action: "change",
213
+ data: { Title: "abc" },
214
+ });
215
+ });
216
+ it("respects lvt-debounce override", () => {
217
+ const input = document.createElement("input");
218
+ input.setAttribute("name", "Title");
219
+ input.setAttribute("lvt-debounce", "500");
220
+ wrapper.appendChild(input);
221
+ setupWirer({
222
+ s: ['<input name="Title" value="', '">'],
223
+ "0": "",
224
+ });
225
+ wirer.wireElements();
226
+ input.value = "test";
227
+ input.dispatchEvent(new Event("input", { bubbles: true }));
228
+ // 300ms: default debounce would fire, but custom is 500
229
+ jest.advanceTimersByTime(300);
230
+ expect(sendSpy).not.toHaveBeenCalled();
231
+ // 500ms: custom debounce fires
232
+ jest.advanceTimersByTime(200);
233
+ expect(sendSpy).toHaveBeenCalledTimes(1);
234
+ });
235
+ it("skips elements with lvt-input attribute", () => {
236
+ const input = document.createElement("input");
237
+ input.setAttribute("name", "Title");
238
+ input.setAttribute("lvt-input", "search");
239
+ wrapper.appendChild(input);
240
+ setupWirer({
241
+ s: ['<input name="Title" value="', '">'],
242
+ "0": "",
243
+ });
244
+ wirer.wireElements();
245
+ input.value = "test";
246
+ input.dispatchEvent(new Event("input", { bubbles: true }));
247
+ jest.advanceTimersByTime(300);
248
+ expect(sendSpy).not.toHaveBeenCalled();
249
+ });
250
+ it("skips elements with lvt-change attribute", () => {
251
+ const input = document.createElement("input");
252
+ input.setAttribute("name", "Title");
253
+ input.setAttribute("lvt-change", "filter");
254
+ wrapper.appendChild(input);
255
+ setupWirer({
256
+ s: ['<input name="Title" value="', '">'],
257
+ "0": "",
258
+ });
259
+ wirer.wireElements();
260
+ input.value = "test";
261
+ input.dispatchEvent(new Event("input", { bubbles: true }));
262
+ jest.advanceTimersByTime(300);
263
+ expect(sendSpy).not.toHaveBeenCalled();
264
+ });
265
+ it("skips elements inside form with lvt-change", () => {
266
+ const form = document.createElement("form");
267
+ form.setAttribute("lvt-change", "change");
268
+ const input = document.createElement("input");
269
+ input.setAttribute("name", "Title");
270
+ form.appendChild(input);
271
+ wrapper.appendChild(form);
272
+ setupWirer({
273
+ s: ['<input name="Title" value="', '">'],
274
+ "0": "",
275
+ });
276
+ wirer.wireElements();
277
+ input.value = "test";
278
+ input.dispatchEvent(new Event("input", { bubbles: true }));
279
+ jest.advanceTimersByTime(300);
280
+ expect(sendSpy).not.toHaveBeenCalled();
281
+ });
282
+ it("skips elements inside form with lvt-no-intercept", () => {
283
+ const form = document.createElement("form");
284
+ form.setAttribute("lvt-no-intercept", "");
285
+ const input = document.createElement("input");
286
+ input.setAttribute("name", "Title");
287
+ form.appendChild(input);
288
+ wrapper.appendChild(form);
289
+ setupWirer({
290
+ s: ['<input name="Title" value="', '">'],
291
+ "0": "",
292
+ });
293
+ wirer.wireElements();
294
+ input.value = "test";
295
+ input.dispatchEvent(new Event("input", { bubbles: true }));
296
+ jest.advanceTimersByTime(300);
297
+ expect(sendSpy).not.toHaveBeenCalled();
298
+ });
299
+ it("skips hidden inputs", () => {
300
+ const input = document.createElement("input");
301
+ input.type = "hidden";
302
+ input.setAttribute("name", "ID");
303
+ input.value = "123";
304
+ wrapper.appendChild(input);
305
+ setupWirer({
306
+ s: ['<input type="hidden" name="ID" value="', '">'],
307
+ "0": "123",
308
+ });
309
+ wirer.wireElements();
310
+ input.value = "456";
311
+ input.dispatchEvent(new Event("input", { bubbles: true }));
312
+ jest.advanceTimersByTime(300);
313
+ expect(sendSpy).not.toHaveBeenCalled();
314
+ });
315
+ it("skips submit and button inputs", () => {
316
+ const submit = document.createElement("input");
317
+ submit.type = "submit";
318
+ submit.setAttribute("name", "Save");
319
+ wrapper.appendChild(submit);
320
+ const button = document.createElement("input");
321
+ button.type = "button";
322
+ button.setAttribute("name", "Cancel");
323
+ wrapper.appendChild(button);
324
+ setupWirer({
325
+ s: ['<input type="submit" name="Save" value="', '"><input type="button" name="Cancel" value="', '">'],
326
+ "0": "Save",
327
+ "1": "Cancel",
328
+ });
329
+ wirer.wireElements();
330
+ submit.dispatchEvent(new Event("input", { bubbles: true }));
331
+ submit.dispatchEvent(new Event("change", { bubbles: true }));
332
+ button.dispatchEvent(new Event("input", { bubbles: true }));
333
+ button.dispatchEvent(new Event("change", { bubbles: true }));
334
+ jest.advanceTimersByTime(300);
335
+ expect(sendSpy).not.toHaveBeenCalled();
336
+ });
337
+ it("skips button elements", () => {
338
+ const btn = document.createElement("button");
339
+ btn.setAttribute("name", "Action");
340
+ wrapper.appendChild(btn);
341
+ setupWirer({
342
+ s: ['<button name="Action" value="', '">Do</button>'],
343
+ "0": "do",
344
+ });
345
+ wirer.wireElements();
346
+ btn.dispatchEvent(new Event("input", { bubbles: true }));
347
+ btn.dispatchEvent(new Event("change", { bubbles: true }));
348
+ jest.advanceTimersByTime(300);
349
+ expect(sendSpy).not.toHaveBeenCalled();
350
+ });
351
+ it("handles checkbox inputs (sends boolean)", () => {
352
+ const checkbox = document.createElement("input");
353
+ checkbox.type = "checkbox";
354
+ checkbox.setAttribute("name", "Active");
355
+ wrapper.appendChild(checkbox);
356
+ setupWirer({
357
+ s: ['<input type="checkbox" name="Active" ', ">"],
358
+ "0": "checked",
359
+ });
360
+ wirer.wireElements();
361
+ checkbox.checked = true;
362
+ // Checkboxes use 'change' event
363
+ checkbox.dispatchEvent(new Event("change", { bubbles: true }));
364
+ jest.advanceTimersByTime(300);
365
+ expect(sendSpy).toHaveBeenCalledWith({
366
+ action: "change",
367
+ data: { Active: true },
368
+ });
369
+ });
370
+ it("handles radio buttons (sends value, not boolean)", () => {
371
+ const radio1 = document.createElement("input");
372
+ radio1.type = "radio";
373
+ radio1.setAttribute("name", "Color");
374
+ radio1.value = "red";
375
+ wrapper.appendChild(radio1);
376
+ const radio2 = document.createElement("input");
377
+ radio2.type = "radio";
378
+ radio2.setAttribute("name", "Color");
379
+ radio2.value = "blue";
380
+ wrapper.appendChild(radio2);
381
+ setupWirer({
382
+ s: ['<input type="radio" name="Color" ', ">"],
383
+ "0": "checked",
384
+ });
385
+ wirer.wireElements();
386
+ radio2.checked = true;
387
+ radio2.dispatchEvent(new Event("change", { bubbles: true }));
388
+ jest.advanceTimersByTime(300);
389
+ expect(sendSpy).toHaveBeenCalledWith({
390
+ action: "change",
391
+ data: { Color: "blue" },
392
+ });
393
+ });
394
+ it("handles textarea elements", () => {
395
+ const textarea = document.createElement("textarea");
396
+ textarea.setAttribute("name", "Bio");
397
+ textarea.value = "old bio";
398
+ wrapper.appendChild(textarea);
399
+ setupWirer({
400
+ s: ['<textarea name="Bio">', "</textarea>"],
401
+ "0": "old bio",
402
+ });
403
+ wirer.wireElements();
404
+ textarea.value = "new bio";
405
+ textarea.dispatchEvent(new Event("input", { bubbles: true }));
406
+ jest.advanceTimersByTime(300);
407
+ expect(sendSpy).toHaveBeenCalledWith({
408
+ action: "change",
409
+ data: { Bio: "new bio" },
410
+ });
411
+ });
412
+ it("handles select elements", () => {
413
+ const select = document.createElement("select");
414
+ select.setAttribute("name", "Category");
415
+ const optA = document.createElement("option");
416
+ optA.value = "a";
417
+ optA.textContent = "A";
418
+ const optB = document.createElement("option");
419
+ optB.value = "b";
420
+ optB.textContent = "B";
421
+ select.appendChild(optA);
422
+ select.appendChild(optB);
423
+ wrapper.appendChild(select);
424
+ // Manually set up a value binding for the select
425
+ wirer.setCapabilities(["change"]);
426
+ wirer.analyzeStatics({
427
+ s: ['<select name="Category" value="', '"><option>A</option></select>'],
428
+ "0": "a",
429
+ });
430
+ wirer.wireElements();
431
+ select.value = "b";
432
+ // Selects use 'change' event
433
+ select.dispatchEvent(new Event("change", { bubbles: true }));
434
+ jest.advanceTimersByTime(300);
435
+ expect(sendSpy).toHaveBeenCalledWith({
436
+ action: "change",
437
+ data: { Category: "b" },
438
+ });
439
+ });
440
+ it("does nothing when capabilities don't include 'change'", () => {
441
+ const input = document.createElement("input");
442
+ input.setAttribute("name", "Title");
443
+ wrapper.appendChild(input);
444
+ wirer.setCapabilities(["other"]);
445
+ wirer.analyzeStatics({
446
+ s: ['<input name="Title" value="', '">'],
447
+ "0": "old",
448
+ });
449
+ wirer.wireElements();
450
+ input.value = "new";
451
+ input.dispatchEvent(new Event("input", { bubbles: true }));
452
+ jest.advanceTimersByTime(300);
453
+ expect(sendSpy).not.toHaveBeenCalled();
454
+ });
455
+ it("does not double-wire the same element", () => {
456
+ const input = document.createElement("input");
457
+ input.setAttribute("name", "Title");
458
+ wrapper.appendChild(input);
459
+ setupWirer({
460
+ s: ['<input name="Title" value="', '">'],
461
+ "0": "old",
462
+ });
463
+ // Wire twice
464
+ wirer.wireElements();
465
+ wirer.wireElements();
466
+ input.value = "new";
467
+ input.dispatchEvent(new Event("input", { bubbles: true }));
468
+ jest.advanceTimersByTime(300);
469
+ // Should only send once (not double-wired)
470
+ expect(sendSpy).toHaveBeenCalledTimes(1);
471
+ });
472
+ it("wires new elements after morphdom replaces them", () => {
473
+ const input1 = document.createElement("input");
474
+ input1.setAttribute("name", "Title");
475
+ wrapper.appendChild(input1);
476
+ setupWirer({
477
+ s: ['<input name="Title" value="', '">'],
478
+ "0": "old",
479
+ });
480
+ wirer.wireElements();
481
+ // Simulate morphdom replacing the element (new DOM node)
482
+ wrapper.removeChild(input1);
483
+ const input2 = document.createElement("input");
484
+ input2.setAttribute("name", "Title");
485
+ wrapper.appendChild(input2);
486
+ wirer.wireElements();
487
+ input2.value = "after replace";
488
+ input2.dispatchEvent(new Event("input", { bubbles: true }));
489
+ jest.advanceTimersByTime(300);
490
+ expect(sendSpy).toHaveBeenCalledWith({
491
+ action: "change",
492
+ data: { Title: "after replace" },
493
+ });
494
+ });
495
+ });
496
+ // ===== Teardown =====
497
+ describe("teardown", () => {
498
+ it("removes listeners and resets state", () => {
499
+ const input = document.createElement("input");
500
+ input.setAttribute("name", "Title");
501
+ wrapper.appendChild(input);
502
+ wirer.setCapabilities(["change"]);
503
+ wirer.analyzeStatics({
504
+ s: ['<input name="Title" value="', '">'],
505
+ "0": "old",
506
+ });
507
+ wirer.wireElements();
508
+ // Verify wiring works
509
+ input.value = "test";
510
+ input.dispatchEvent(new Event("input", { bubbles: true }));
511
+ jest.advanceTimersByTime(300);
512
+ expect(sendSpy).toHaveBeenCalledTimes(1);
513
+ sendSpy.mockClear();
514
+ // Teardown
515
+ wirer.teardown();
516
+ // Verify no more sends
517
+ input.value = "after teardown";
518
+ input.dispatchEvent(new Event("input", { bubbles: true }));
519
+ jest.advanceTimersByTime(300);
520
+ expect(sendSpy).not.toHaveBeenCalled();
521
+ expect(wirer.isEnabled()).toBe(false);
522
+ expect(wirer.getBoundFields().size).toBe(0);
523
+ });
524
+ });
525
+ });
526
+ //# sourceMappingURL=change-auto-wirer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-auto-wirer.test.js","sourceRoot":"","sources":["../../tests/change-auto-wirer.test.ts"],"names":[],"mappings":"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"}