@scenetest/scenes 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/__tests__/dsl.test.js +20 -0
  2. package/dist/__tests__/dsl.test.js.map +1 -1
  3. package/dist/__tests__/keyboard.test.d.ts +2 -0
  4. package/dist/__tests__/keyboard.test.d.ts.map +1 -0
  5. package/dist/__tests__/keyboard.test.js +332 -0
  6. package/dist/__tests__/keyboard.test.js.map +1 -0
  7. package/dist/__tests__/markdown-scene.test.js +85 -5
  8. package/dist/__tests__/markdown-scene.test.js.map +1 -1
  9. package/dist/__tests__/reactive.test.js +259 -6
  10. package/dist/__tests__/reactive.test.js.map +1 -1
  11. package/dist/__tests__/runner.test.d.ts +2 -0
  12. package/dist/__tests__/runner.test.d.ts.map +1 -0
  13. package/dist/__tests__/runner.test.js +182 -0
  14. package/dist/__tests__/runner.test.js.map +1 -0
  15. package/dist/actor.d.ts +21 -4
  16. package/dist/actor.d.ts.map +1 -1
  17. package/dist/actor.js +176 -12
  18. package/dist/actor.js.map +1 -1
  19. package/dist/builtin-macros.d.ts +87 -0
  20. package/dist/builtin-macros.d.ts.map +1 -0
  21. package/dist/builtin-macros.js +154 -0
  22. package/dist/builtin-macros.js.map +1 -0
  23. package/dist/cli.js +12 -0
  24. package/dist/cli.js.map +1 -1
  25. package/dist/devices.d.ts +6 -0
  26. package/dist/devices.d.ts.map +1 -1
  27. package/dist/devices.js +13 -0
  28. package/dist/devices.js.map +1 -1
  29. package/dist/dsl.d.ts +4 -0
  30. package/dist/dsl.d.ts.map +1 -1
  31. package/dist/dsl.js +18 -1
  32. package/dist/dsl.js.map +1 -1
  33. package/dist/index.d.ts +5 -2
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +5 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/keyboard.d.ts +168 -0
  38. package/dist/keyboard.d.ts.map +1 -0
  39. package/dist/keyboard.js +370 -0
  40. package/dist/keyboard.js.map +1 -0
  41. package/dist/markdown-scene.d.ts +4 -2
  42. package/dist/markdown-scene.d.ts.map +1 -1
  43. package/dist/markdown-scene.js +21 -9
  44. package/dist/markdown-scene.js.map +1 -1
  45. package/dist/reactive.d.ts +25 -2
  46. package/dist/reactive.d.ts.map +1 -1
  47. package/dist/reactive.js +163 -16
  48. package/dist/reactive.js.map +1 -1
  49. package/dist/runner.d.ts +11 -5
  50. package/dist/runner.d.ts.map +1 -1
  51. package/dist/runner.js +141 -35
  52. package/dist/runner.js.map +1 -1
  53. package/dist/swarm.d.ts +1 -1
  54. package/dist/swarm.d.ts.map +1 -1
  55. package/dist/swarm.js +8 -5
  56. package/dist/swarm.js.map +1 -1
  57. package/dist/team-manager.d.ts +48 -3
  58. package/dist/team-manager.d.ts.map +1 -1
  59. package/dist/team-manager.js +150 -15
  60. package/dist/team-manager.js.map +1 -1
  61. package/dist/types.d.ts +133 -2
  62. package/dist/types.d.ts.map +1 -1
  63. package/package.json +3 -3
@@ -40,6 +40,10 @@ function createSpyTarget() {
40
40
  return {
41
41
  calls,
42
42
  openTo(url) { calls.push(`openTo:${url}`); return this; },
43
+ reload() { calls.push('reload'); return this; },
44
+ goBack() { calls.push('goBack'); return this; },
45
+ goForward() { calls.push('goForward'); return this; },
46
+ switchDevice(d) { calls.push(`switchDevice:${d ?? '(next)'}`); return this; },
43
47
  see(s) { calls.push(`see:${s}`); return this; },
44
48
  seeInView(s) { calls.push(`seeInView:${s}`); return this; },
45
49
  notSee(s) { calls.push(`notSee:${s}`); return this; },
@@ -56,6 +60,7 @@ function createSpyTarget() {
56
60
  up(s) { calls.push(`up:${s ?? '(root)'}`); return this; },
57
61
  prev() { calls.push('prev'); return this; },
58
62
  scrollToBottom() { calls.push('scrollToBottom'); return this; },
63
+ pressKey(k) { calls.push(`pressKey:${k}`); return this; },
59
64
  };
60
65
  }
61
66
  // ---------------------------------------------------------------------------
@@ -128,6 +133,11 @@ describe('parseAction', () => {
128
133
  it('parses waitFor as value-only action', () => {
129
134
  expect(parseAction('waitFor data-ready')).toEqual({ action: 'waitFor', value: 'data-ready' });
130
135
  });
136
+ it('parses pressKey as value-only action', () => {
137
+ expect(parseAction('pressKey Escape')).toEqual({ action: 'pressKey', value: 'Escape' });
138
+ expect(parseAction('pressKey Enter')).toEqual({ action: 'pressKey', value: 'Enter' });
139
+ expect(parseAction('pressKey Tab')).toEqual({ action: 'pressKey', value: 'Tab' });
140
+ });
131
141
  it('throws on empty input', () => {
132
142
  expect(() => parseAction('')).toThrow('Empty action line');
133
143
  expect(() => parseAction(' ')).toThrow('Empty action line');
@@ -211,6 +221,16 @@ describe('applyDslAction', () => {
211
221
  applyDslAction(target, { action: 'waitFor', value: 'setup-done' });
212
222
  expect(target.calls).toEqual(['waitFor:setup-done']);
213
223
  });
224
+ it('dispatches pressKey', () => {
225
+ const target = createSpyTarget();
226
+ applyDslAction(target, { action: 'pressKey', value: 'Escape' });
227
+ expect(target.calls).toEqual(['pressKey:Escape']);
228
+ });
229
+ it('throws when pressKey is missing key name', () => {
230
+ const target = createSpyTarget();
231
+ expect(() => applyDslAction(target, { action: 'pressKey' }))
232
+ .toThrow('pressKey requires a key name');
233
+ });
214
234
  it('throws on unknown action', () => {
215
235
  const target = createSpyTarget();
216
236
  expect(() => applyDslAction(target, { action: 'flyTo' })).toThrow('Unknown DSL action: flyTo');
@@ -1 +1 @@
1
- {"version":3,"file":"dsl.test.js","sourceRoot":"","sources":["../../src/__tests__/dsl.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dsl.test.js","sourceRoot":"","sources":["../../src/__tests__/dsl.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keyboard.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/keyboard.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,332 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { NavigationModeRotation, FuzzyFingerError, tabToElement, fuzzyFingerClick, fuzzyFingerFill, fuzzyFingerCheck, } from '../keyboard.js';
3
+ // ---------------------------------------------------------------------------
4
+ // NavigationModeRotation — pure logic, no mocks needed
5
+ // ---------------------------------------------------------------------------
6
+ describe('NavigationModeRotation', () => {
7
+ it('defaults to pointer → keyboard alternation', () => {
8
+ const r = new NavigationModeRotation();
9
+ expect(r.next()).toBe('pointer');
10
+ expect(r.next()).toBe('keyboard');
11
+ expect(r.next()).toBe('pointer');
12
+ expect(r.next()).toBe('keyboard');
13
+ });
14
+ it('wraps around after exhausting the pool', () => {
15
+ const r = new NavigationModeRotation();
16
+ for (let i = 0; i < 10; i++)
17
+ r.next();
18
+ // After 10 calls (even number), back to pointer
19
+ expect(r.next()).toBe('pointer');
20
+ });
21
+ it('accepts a custom pool', () => {
22
+ const r = new NavigationModeRotation(['keyboard', 'pointer', 'pointer']);
23
+ expect(r.next()).toBe('keyboard');
24
+ expect(r.next()).toBe('pointer');
25
+ expect(r.next()).toBe('pointer');
26
+ expect(r.next()).toBe('keyboard');
27
+ });
28
+ it('falls back to default pool when given empty array', () => {
29
+ const r = new NavigationModeRotation([]);
30
+ expect(r.next()).toBe('pointer');
31
+ expect(r.next()).toBe('keyboard');
32
+ });
33
+ it('falls back to default pool when given undefined', () => {
34
+ const r = new NavigationModeRotation(undefined);
35
+ expect(r.next()).toBe('pointer');
36
+ });
37
+ it('peek() returns next mode without advancing', () => {
38
+ const r = new NavigationModeRotation();
39
+ expect(r.peek()).toBe('pointer');
40
+ expect(r.peek()).toBe('pointer'); // still pointer
41
+ r.next(); // advance
42
+ expect(r.peek()).toBe('keyboard');
43
+ });
44
+ it('reset() returns to the beginning', () => {
45
+ const r = new NavigationModeRotation();
46
+ r.next(); // pointer
47
+ r.next(); // keyboard
48
+ r.reset();
49
+ expect(r.next()).toBe('pointer');
50
+ });
51
+ it('currentIndex tracks advancement', () => {
52
+ const r = new NavigationModeRotation();
53
+ expect(r.currentIndex).toBe(0);
54
+ r.next();
55
+ expect(r.currentIndex).toBe(1);
56
+ r.next();
57
+ expect(r.currentIndex).toBe(2);
58
+ });
59
+ it('modes getter returns the pool', () => {
60
+ const r = new NavigationModeRotation(['pointer']);
61
+ expect(r.modes).toEqual(['pointer']);
62
+ });
63
+ });
64
+ // ---------------------------------------------------------------------------
65
+ // FuzzyFingerError — pure logic
66
+ // ---------------------------------------------------------------------------
67
+ describe('FuzzyFingerError', () => {
68
+ it('formats miss-center message with WCAG reference', () => {
69
+ const original = new Error('click failed');
70
+ const err = new FuzzyFingerError('miss-center', 'submit-btn', original);
71
+ expect(err.name).toBe('FuzzyFingerError');
72
+ expect(err.strategy).toBe('miss-center');
73
+ expect(err.selector).toBe('submit-btn');
74
+ expect(err.originalError).toBe(original);
75
+ expect(err.message).toContain('submit-btn');
76
+ expect(err.message).toContain('WCAG 2.5.8');
77
+ expect(err.message).toContain('too small');
78
+ });
79
+ it('formats miss-edge message with spacing reference', () => {
80
+ const original = new Error('click failed');
81
+ const err = new FuzzyFingerError('miss-edge', 'close-btn', original);
82
+ expect(err.strategy).toBe('miss-edge');
83
+ expect(err.message).toContain('close-btn');
84
+ expect(err.message).toContain('too close to neighbor');
85
+ });
86
+ it('is an instance of Error', () => {
87
+ const err = new FuzzyFingerError('miss-center', 'x', new Error(''));
88
+ expect(err).toBeInstanceOf(Error);
89
+ });
90
+ });
91
+ // ---------------------------------------------------------------------------
92
+ // Playwright mock helpers
93
+ // ---------------------------------------------------------------------------
94
+ function mockLocator(opts = {}) {
95
+ const { visible = true, clickFails = false, fillFails = false, checkFails = false, vanishes = false, box = { x: 100, y: 100, width: 50, height: 50 }, } = opts;
96
+ return {
97
+ waitFor: vi.fn().mockResolvedValue(undefined),
98
+ isVisible: vi.fn().mockResolvedValue(visible),
99
+ click: clickFails
100
+ ? vi.fn().mockRejectedValue(new Error('click failed'))
101
+ : vi.fn().mockResolvedValue(undefined),
102
+ fill: fillFails
103
+ ? vi.fn().mockRejectedValue(new Error('fill failed'))
104
+ : vi.fn().mockResolvedValue(undefined),
105
+ check: checkFails
106
+ ? vi.fn().mockRejectedValue(new Error('check failed'))
107
+ : vi.fn().mockResolvedValue(undefined),
108
+ boundingBox: vi.fn().mockResolvedValue(box),
109
+ count: vi.fn().mockResolvedValue(vanishes ? 0 : 1),
110
+ elementHandle: vi.fn().mockResolvedValue({
111
+ evaluate: vi.fn().mockResolvedValue('found'),
112
+ }),
113
+ };
114
+ }
115
+ function mockPage() {
116
+ return {
117
+ mouse: {
118
+ click: vi.fn().mockResolvedValue(undefined),
119
+ },
120
+ keyboard: {
121
+ press: vi.fn().mockResolvedValue(undefined),
122
+ type: vi.fn().mockResolvedValue(undefined),
123
+ },
124
+ };
125
+ }
126
+ // ---------------------------------------------------------------------------
127
+ // tabToElement
128
+ // ---------------------------------------------------------------------------
129
+ describe('tabToElement', () => {
130
+ it('tabs until element is found', async () => {
131
+ const page = mockPage();
132
+ let tabCount = 0;
133
+ const target = {
134
+ elementHandle: vi.fn().mockResolvedValue({
135
+ evaluate: vi.fn().mockImplementation(() => {
136
+ tabCount++;
137
+ return tabCount >= 3 ? 'found' : 'BUTTONother';
138
+ }),
139
+ }),
140
+ };
141
+ await tabToElement(page, target, { maxTabs: 10 });
142
+ // Should have pressed Tab 3 times
143
+ expect(page.keyboard.press).toHaveBeenCalledTimes(3);
144
+ expect(page.keyboard.press).toHaveBeenCalledWith('Tab');
145
+ });
146
+ it('throws when element handle is null', async () => {
147
+ const page = mockPage();
148
+ const target = {
149
+ elementHandle: vi.fn().mockResolvedValue(null),
150
+ };
151
+ await expect(tabToElement(page, target)).rejects.toThrow('target element not found in DOM');
152
+ });
153
+ it('throws after maxTabs exceeded', async () => {
154
+ const page = mockPage();
155
+ let callCount = 0;
156
+ const target = {
157
+ elementHandle: vi.fn().mockResolvedValue({
158
+ // Return different identifiers each time so cycle detection doesn't fire
159
+ evaluate: vi.fn().mockImplementation(() => `BUTTON${callCount++}`),
160
+ }),
161
+ };
162
+ await expect(tabToElement(page, target, { maxTabs: 5 })).rejects.toThrow('could not reach element via Tab after 5 key presses');
163
+ });
164
+ it('throws when focus cycles back to start element', async () => {
165
+ const page = mockPage();
166
+ let callCount = 0;
167
+ const target = {
168
+ elementHandle: vi.fn().mockResolvedValue({
169
+ evaluate: vi.fn().mockImplementation(() => {
170
+ callCount++;
171
+ // Return same identifier every time — simulates a cycle
172
+ return 'BUTTONstart';
173
+ }),
174
+ }),
175
+ };
176
+ await expect(tabToElement(page, target, { maxTabs: 100 })).rejects.toThrow('Tab focus cycled back to the starting element');
177
+ });
178
+ it('succeeds on first Tab press when element immediately receives focus', async () => {
179
+ const page = mockPage();
180
+ const target = {
181
+ elementHandle: vi.fn().mockResolvedValue({
182
+ evaluate: vi.fn().mockResolvedValue('found'),
183
+ }),
184
+ };
185
+ await tabToElement(page, target);
186
+ expect(page.keyboard.press).toHaveBeenCalledTimes(1);
187
+ });
188
+ });
189
+ // ---------------------------------------------------------------------------
190
+ // fuzzyFingerClick
191
+ // ---------------------------------------------------------------------------
192
+ describe('fuzzyFingerClick', () => {
193
+ beforeEach(() => {
194
+ vi.restoreAllMocks();
195
+ });
196
+ it('clicks normally when shouldMiss returns false', async () => {
197
+ vi.spyOn(Math, 'random').mockReturnValue(0.5); // > 0.2 → no miss
198
+ const page = mockPage();
199
+ const target = mockLocator();
200
+ await fuzzyFingerClick(page, target, 5000, 'btn');
201
+ // Should do one normal click, no mouse.click for miss
202
+ expect(target.click).toHaveBeenCalledTimes(1);
203
+ expect(page.mouse.click).not.toHaveBeenCalled();
204
+ });
205
+ it('does miss → pause → correct click when shouldMiss returns true', async () => {
206
+ // First Math.random() < 0.2 → shouldMiss=true
207
+ // Subsequent randoms are for strategy and miss-point computation
208
+ vi.spyOn(Math, 'random').mockReturnValue(0.1); // always < 0.2
209
+ const page = mockPage();
210
+ const target = mockLocator();
211
+ await fuzzyFingerClick(page, target, 5000, 'btn');
212
+ // Miss click + correct click
213
+ expect(page.mouse.click).toHaveBeenCalledTimes(1);
214
+ expect(target.click).toHaveBeenCalledTimes(1);
215
+ });
216
+ it('throws FuzzyFingerError when element vanishes after mis-click', async () => {
217
+ vi.spyOn(Math, 'random').mockReturnValue(0.1); // shouldMiss=true
218
+ const page = mockPage();
219
+ const target = mockLocator({ clickFails: true, vanishes: true });
220
+ await expect(fuzzyFingerClick(page, target, 5000, 'close-btn')).rejects.toThrow(FuzzyFingerError);
221
+ });
222
+ it('re-throws original error when element still exists after failed click', async () => {
223
+ vi.spyOn(Math, 'random').mockReturnValue(0.1); // shouldMiss=true
224
+ const page = mockPage();
225
+ const target = mockLocator({ clickFails: true, vanishes: false });
226
+ await expect(fuzzyFingerClick(page, target, 5000, 'btn')).rejects.toThrow('click failed');
227
+ });
228
+ it('waits for element visibility before anything else', async () => {
229
+ vi.spyOn(Math, 'random').mockReturnValue(0.5); // no miss
230
+ const page = mockPage();
231
+ const target = mockLocator();
232
+ await fuzzyFingerClick(page, target, 3000, 'btn');
233
+ expect(target.waitFor).toHaveBeenCalledWith({ state: 'visible', timeout: 3000 });
234
+ });
235
+ it('skips mis-click when boundingBox returns null', async () => {
236
+ vi.spyOn(Math, 'random').mockReturnValue(0.1); // shouldMiss=true
237
+ const page = mockPage();
238
+ const target = mockLocator({ box: null });
239
+ await fuzzyFingerClick(page, target, 5000, 'btn');
240
+ // No mouse click (no box), but correct click still happens
241
+ expect(page.mouse.click).not.toHaveBeenCalled();
242
+ expect(target.click).toHaveBeenCalledTimes(1);
243
+ });
244
+ it('approximately 20% of calls result in a mis-click', () => {
245
+ // Statistical test: over many random values, ~20% should be < 0.2
246
+ // We test the shouldMiss logic conceptually by checking the constant
247
+ // (We can't easily test the private shouldMiss function, but we can
248
+ // verify behavior by running many calls with real random)
249
+ let missCount = 0;
250
+ const trials = 10000;
251
+ for (let i = 0; i < trials; i++) {
252
+ if (Math.random() < 0.2)
253
+ missCount++;
254
+ }
255
+ // Should be roughly 2000 ± reasonable variance
256
+ expect(missCount).toBeGreaterThan(1500);
257
+ expect(missCount).toBeLessThan(2500);
258
+ });
259
+ });
260
+ // ---------------------------------------------------------------------------
261
+ // fuzzyFingerFill
262
+ // ---------------------------------------------------------------------------
263
+ describe('fuzzyFingerFill', () => {
264
+ beforeEach(() => {
265
+ vi.restoreAllMocks();
266
+ });
267
+ it('fills normally when shouldMiss returns false', async () => {
268
+ vi.spyOn(Math, 'random').mockReturnValue(0.5);
269
+ const page = mockPage();
270
+ const target = mockLocator();
271
+ await fuzzyFingerFill(page, target, 'hello', 5000, 'input');
272
+ expect(target.fill).toHaveBeenCalledWith('hello', { timeout: 5000 });
273
+ expect(page.mouse.click).not.toHaveBeenCalled();
274
+ });
275
+ it('does miss → pause → fill when shouldMiss returns true', async () => {
276
+ vi.spyOn(Math, 'random').mockReturnValue(0.1);
277
+ const page = mockPage();
278
+ const target = mockLocator();
279
+ await fuzzyFingerFill(page, target, 'hello', 5000, 'input');
280
+ expect(page.mouse.click).toHaveBeenCalledTimes(1);
281
+ expect(target.fill).toHaveBeenCalledWith('hello', { timeout: 5000 });
282
+ });
283
+ it('throws FuzzyFingerError when element vanishes after mis-click', async () => {
284
+ vi.spyOn(Math, 'random').mockReturnValue(0.1);
285
+ const page = mockPage();
286
+ const target = mockLocator({ fillFails: true, vanishes: true });
287
+ await expect(fuzzyFingerFill(page, target, 'x', 5000, 'input')).rejects.toThrow(FuzzyFingerError);
288
+ });
289
+ it('re-throws original error when element still exists', async () => {
290
+ vi.spyOn(Math, 'random').mockReturnValue(0.1);
291
+ const page = mockPage();
292
+ const target = mockLocator({ fillFails: true, vanishes: false });
293
+ await expect(fuzzyFingerFill(page, target, 'x', 5000, 'input')).rejects.toThrow('fill failed');
294
+ });
295
+ });
296
+ // ---------------------------------------------------------------------------
297
+ // fuzzyFingerCheck
298
+ // ---------------------------------------------------------------------------
299
+ describe('fuzzyFingerCheck', () => {
300
+ beforeEach(() => {
301
+ vi.restoreAllMocks();
302
+ });
303
+ it('checks normally when shouldMiss returns false', async () => {
304
+ vi.spyOn(Math, 'random').mockReturnValue(0.5);
305
+ const page = mockPage();
306
+ const target = mockLocator();
307
+ await fuzzyFingerCheck(page, target, 5000, 'checkbox');
308
+ expect(target.check).toHaveBeenCalledTimes(1);
309
+ expect(page.mouse.click).not.toHaveBeenCalled();
310
+ });
311
+ it('does miss → pause → check when shouldMiss returns true', async () => {
312
+ vi.spyOn(Math, 'random').mockReturnValue(0.1);
313
+ const page = mockPage();
314
+ const target = mockLocator();
315
+ await fuzzyFingerCheck(page, target, 5000, 'checkbox');
316
+ expect(page.mouse.click).toHaveBeenCalledTimes(1);
317
+ expect(target.check).toHaveBeenCalledTimes(1);
318
+ });
319
+ it('throws FuzzyFingerError when element vanishes after mis-click', async () => {
320
+ vi.spyOn(Math, 'random').mockReturnValue(0.1);
321
+ const page = mockPage();
322
+ const target = mockLocator({ checkFails: true, vanishes: true });
323
+ await expect(fuzzyFingerCheck(page, target, 5000, 'checkbox')).rejects.toThrow(FuzzyFingerError);
324
+ });
325
+ it('re-throws original error when element still exists', async () => {
326
+ vi.spyOn(Math, 'random').mockReturnValue(0.1);
327
+ const page = mockPage();
328
+ const target = mockLocator({ checkFails: true, vanishes: false });
329
+ await expect(fuzzyFingerCheck(page, target, 5000, 'checkbox')).rejects.toThrow('check failed');
330
+ });
331
+ });
332
+ //# sourceMappingURL=keyboard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.test.js","sourceRoot":"","sources":["../../src/__tests__/keyboard.test.ts"],"names":[],"mappings":"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"}
@@ -517,7 +517,9 @@ learner:
517
517
  `;
518
518
  const scenes = parseMarkdownScenes(content, '/test/cleanup.spec.md');
519
519
  expect(scenes).toHaveLength(1);
520
- expect(scenes[0].cleanup).toBe("supabase.from('user_deck').delete().eq('uid', '[learner.key]').eq('lang', 'spa')");
520
+ expect(scenes[0].cleanup).toEqual([
521
+ "supabase.from('user_deck').delete().eq('uid', '[learner.key]').eq('lang', 'spa')"
522
+ ]);
521
523
  expect(scenes[0].blocks).toHaveLength(1);
522
524
  expect(scenes[0].blocks[0].role).toBe('learner');
523
525
  });
@@ -531,7 +533,7 @@ cleanup: something
531
533
  - see dashboard
532
534
  `;
533
535
  const scenes = parseMarkdownScenes(content, '/test/cleanup-late.spec.md');
534
- expect(scenes[0].cleanup).toBeUndefined();
536
+ expect(scenes[0].cleanup).toEqual([]);
535
537
  // cleanup: is treated as a macro since it's inside an actor block
536
538
  });
537
539
  it('handles cleanup: with no ## headings (# = scene)', () => {
@@ -545,7 +547,7 @@ learner:
545
547
  `;
546
548
  const scenes = parseMarkdownScenes(content, '/test/cleanup-h1.spec.md');
547
549
  expect(scenes).toHaveLength(1);
548
- expect(scenes[0].cleanup).toBe('db.clear()');
550
+ expect(scenes[0].cleanup).toEqual(['db.clear()']);
549
551
  });
550
552
  it('supports cleanup: per scene in multi-scene file', () => {
551
553
  const content = `
@@ -567,8 +569,86 @@ learner:
567
569
  `;
568
570
  const scenes = parseMarkdownScenes(content, '/test/cleanup-multi.spec.md');
569
571
  expect(scenes).toHaveLength(2);
570
- expect(scenes[0].cleanup).toBe("supabase.from('decks').delete().eq('uid', '[learner.key]')");
571
- expect(scenes[1].cleanup).toBeUndefined();
572
+ expect(scenes[0].cleanup).toEqual(["supabase.from('decks').delete().eq('uid', '[learner.key]')"]);
573
+ expect(scenes[1].cleanup).toEqual([]);
574
+ });
575
+ it('supports multiple cleanup: lines per scene (all collected as array)', () => {
576
+ const content = `
577
+ ## comment with notification
578
+
579
+ cleanup: supabase.from('request_comment').delete().eq('uid', '[friend.key]')
580
+ cleanup: supabase.from('notification').delete().eq('uid', '[learner.key]')
581
+
582
+ friend:
583
+ - openTo /requests
584
+ learner:
585
+ - openTo /notifications
586
+ `;
587
+ const scenes = parseMarkdownScenes(content, '/test/multi-cleanup.spec.md');
588
+ expect(scenes).toHaveLength(1);
589
+ expect(scenes[0].cleanup).toEqual([
590
+ "supabase.from('request_comment').delete().eq('uid', '[friend.key]')",
591
+ "supabase.from('notification').delete().eq('uid', '[learner.key]')",
592
+ ]);
593
+ });
594
+ it('parses setup: directive before actor cues', () => {
595
+ const content = `
596
+ ## review mode shows 2-buttons
597
+
598
+ cleanup: supabase.from('user_deck').update({ review_answer_mode: null }).eq('uid', '[learner.key]')
599
+ setup: supabase.from('user_deck').update({ review_answer_mode: '2-buttons' }).eq('uid', '[learner.key]')
600
+
601
+ learner:
602
+ - openTo /review
603
+ - see review-setup-page
604
+ `;
605
+ const scenes = parseMarkdownScenes(content, '/test/setup.spec.md');
606
+ expect(scenes).toHaveLength(1);
607
+ expect(scenes[0].cleanup).toEqual([
608
+ "supabase.from('user_deck').update({ review_answer_mode: null }).eq('uid', '[learner.key]')",
609
+ ]);
610
+ expect(scenes[0].setup).toEqual([
611
+ "supabase.from('user_deck').update({ review_answer_mode: '2-buttons' }).eq('uid', '[learner.key]')",
612
+ ]);
613
+ expect(scenes[0].blocks[0].role).toBe('learner');
614
+ });
615
+ it('supports multiple setup: lines per scene', () => {
616
+ const content = `
617
+ ## multi-table setup
618
+
619
+ setup: supabase.from('table_a').insert({ uid: '[user.key]' })
620
+ setup: supabase.from('table_b').insert({ uid: '[user.key]' })
621
+
622
+ user:
623
+ - openTo /
624
+ `;
625
+ const scenes = parseMarkdownScenes(content, '/test/multi-setup.spec.md');
626
+ expect(scenes[0].setup).toEqual([
627
+ "supabase.from('table_a').insert({ uid: '[user.key]' })",
628
+ "supabase.from('table_b').insert({ uid: '[user.key]' })",
629
+ ]);
630
+ });
631
+ it('setup: defaults to empty array when not specified', () => {
632
+ const content = `
633
+ # plain scene
634
+ user:
635
+ - openTo /
636
+ `;
637
+ const scenes = parseMarkdownScenes(content, '/test/no-setup.spec.md');
638
+ expect(scenes[0].setup).toEqual([]);
639
+ });
640
+ it('ignores setup: after actor cues have started', () => {
641
+ const content = `
642
+ # test
643
+
644
+ user:
645
+ - openTo /
646
+ setup: something
647
+ - see dashboard
648
+ `;
649
+ const scenes = parseMarkdownScenes(content, '/test/setup-late.spec.md');
650
+ // setup: inside an actor block is treated as a macro invocation, not a directive
651
+ expect(scenes[0].setup).toEqual([]);
572
652
  });
573
653
  });
574
654
  // ---------------------------------------------------------------------------