@mechris3/glassbox 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -28,11 +28,27 @@ npx glassbox run # Headless batch run (for CI)
28
28
 
29
29
  ```
30
30
  my-tests/
31
+ ├── package.json ← dependency + scripts
31
32
  ├── glassbox.config.ts ← created by init
32
33
  ├── journeys/ ← put your journey files here
33
34
  └── page-objects/ ← put your page objects here
34
35
  ```
35
36
 
37
+ The generated `package.json` includes convenience scripts:
38
+
39
+ ```bash
40
+ npm run serve # Start the visual dashboard at http://localhost:3001
41
+ npm run run # Run all journeys headless (exit 0 = pass, 1 = fail)
42
+ npm run run:headed # Run with a visible browser window
43
+ ```
44
+
45
+ After running `glassbox init`, install dependencies and you're ready:
46
+
47
+ ```bash
48
+ npm install
49
+ npm run serve
50
+ ```
51
+
36
52
  You can set this up as a standalone project or as a subfolder within an existing frontend project:
37
53
 
38
54
  ```
@@ -141,6 +157,52 @@ export default defineConfig({
141
157
  });
142
158
  ```
143
159
 
160
+ ### Lifecycle Hooks
161
+
162
+ Run code before/after journeys for test data setup and cleanup:
163
+
164
+ ```typescript
165
+ // glassbox.config.ts
166
+ export default defineConfig({
167
+ testData: {
168
+ globalSetup: './helpers/global-setup.ts', // Once before all journeys
169
+ beforeEach: './helpers/before-each.ts', // Before each journey
170
+ afterEach: './helpers/after-each.ts', // After each journey (even on failure)
171
+ globalTeardown: './helpers/global-teardown.ts', // Once after all journeys
172
+ },
173
+ });
174
+ ```
175
+
176
+ Hook files export a default async function. Use them for any setup/teardown your tests need — resetting databases, seeding test data, clearing caches, etc:
177
+
178
+ ```typescript
179
+ // helpers/before-each.ts
180
+ import type { HookContext } from '@mechris3/glassbox';
181
+
182
+ export default async function(context: HookContext) {
183
+ // Call your test API to reset state (can be any URL, not necessarily the target app)
184
+ await fetch('http://localhost:4000/api/test-data/reset', { method: 'POST' });
185
+
186
+ // Or seed specific data
187
+ await fetch('http://localhost:4000/api/test-data/seed', {
188
+ method: 'POST',
189
+ headers: { 'Content-Type': 'application/json' },
190
+ body: JSON.stringify({ users: ['testuser'], projects: 3 }),
191
+ });
192
+ }
193
+ ```
194
+
195
+ `targetUrl` comes from the dashboard settings panel (the URL field) or the `--url` flag when using the CLI. It's the URL of the app you're testing.
196
+
197
+ `HookContext` contains:
198
+
199
+ | Property | Available in | Description |
200
+ |----------|-------------|-------------|
201
+ | `targetUrl` | All hooks | The app URL being tested |
202
+ | `journeyName` | beforeEach, afterEach | Display name of the current journey |
203
+ | `journeyPath` | beforeEach, afterEach | File path of the current journey |
204
+ | `journeyStatus` | afterEach only | `'passed'` or `'failed'` |
205
+
144
206
  ## CLI Commands
145
207
 
146
208
  Run all commands from the directory containing your `glassbox.config.ts`:
@@ -107,7 +107,7 @@ program
107
107
  console.log(' glassbox.config.ts already exists — skipping.\n');
108
108
  return;
109
109
  }
110
- const configContent = `import { defineConfig } from 'glassbox';
110
+ const configContent = `import { defineConfig } from '@mechris3/glassbox';
111
111
 
112
112
  export default defineConfig({
113
113
  journeys: './journeys/**/*.journey.ts',
@@ -121,8 +121,26 @@ export default defineConfig({
121
121
  },
122
122
  });
123
123
  `;
124
+ const packageContent = JSON.stringify({
125
+ name: 'my-glassbox-tests',
126
+ version: '1.0.0',
127
+ private: true,
128
+ type: 'module',
129
+ scripts: {
130
+ serve: 'glassbox serve',
131
+ run: 'glassbox run',
132
+ 'run:headed': 'glassbox run --headed',
133
+ },
134
+ dependencies: {
135
+ '@mechris3/glassbox': '^0.1.0',
136
+ },
137
+ }, null, 2);
124
138
  writeFileSync('glassbox.config.ts', configContent);
125
139
  console.log(' ✦ Created glassbox.config.ts');
140
+ if (!existsSync('package.json')) {
141
+ writeFileSync('package.json', packageContent);
142
+ console.log(' ✦ Created package.json');
143
+ }
126
144
  if (!existsSync('journeys')) {
127
145
  mkdirSync('journeys', { recursive: true });
128
146
  console.log(' ✦ Created journeys/ directory');
@@ -132,9 +150,10 @@ export default defineConfig({
132
150
  console.log(' ✦ Created page-objects/ directory');
133
151
  }
134
152
  console.log('\n Next steps:');
135
- console.log(' 1. Write page objects in page-objects/');
136
- console.log(' 2. Write journeys in journeys/');
137
- console.log(' 3. Run: npx glassbox serve\n');
153
+ console.log(' 1. npm install');
154
+ console.log(' 2. Write page objects in page-objects/');
155
+ console.log(' 3. Write journeys in journeys/');
156
+ console.log(' 4. npm run serve\n');
138
157
  });
139
158
  program.parse();
140
159
  //# sourceMappingURL=glassbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"glassbox.js","sourceRoot":"","sources":["../../bin/glassbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"glassbox.js","sourceRoot":"","sources":["../../bin/glassbox.ts"],"names":[],"mappings":";;AAEA;;;;;;;;;;GAUG;;AAEH,yCAAoC;AACpC,gDAA8C;AAC9C,qDAA8D;AAE9D,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,mFAAmF,CAAC;KAChG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB;;;;;;;;;;GAUG;AACH,OAAO;KACJ,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACrC,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,mBAAmB,EAAE,gCAAgC,CAAC;KAC7D,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAU,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,+BAAoB,EAAC,MAAM,CAAC,CAAC;IAEhD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,8CAA8C,IAAI,IAAI,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL;;;;;;;;GAQG;AACH,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;KAC7D,MAAM,CAAC,gBAAgB,EAAE,wCAAwC,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,QAAkB,EAAE,OAAO,EAAE,EAAE;IAC5C,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAU,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;IAC7E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE;QAChD,aAAa,EAAE,QAAQ;QACvB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,SAAS,EAAE,OAAO,CAAC,GAAG,IAAI,EAAE;QAC5B,UAAU,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK;KACvC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL;;;;;;;;GAQG;AACH,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,aAAa,EAAE,sDAAsD,CAAC;KAC7E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IACzC,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAChE,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL;;;;;;GAMG;AACH,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wDAAwD,CAAC;KACrE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAEpE,IAAI,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG;;;;;;;;;;;;;CAazB,CAAC;IAEE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;QACpC,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,KAAK,EAAE,gBAAgB;YACvB,GAAG,EAAE,cAAc;YACnB,YAAY,EAAE,uBAAuB;SACtC;QACD,YAAY,EAAE;YACZ,oBAAoB,EAAE,QAAQ;SAC/B;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAEZ,aAAa,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,aAAa,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mechris3/glassbox",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Debugger-style browser automation test runner with live execution control via CDP",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",