@mechris3/glassbox 0.1.1 → 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
  ```
@@ -157,23 +173,35 @@ export default defineConfig({
157
173
  });
158
174
  ```
159
175
 
160
- Hook files export a default async function:
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:
161
177
 
162
178
  ```typescript
163
179
  // helpers/before-each.ts
164
180
  import type { HookContext } from '@mechris3/glassbox';
165
181
 
166
182
  export default async function(context: HookContext) {
167
- // Reset app state before each journey
168
- await fetch(`${context.targetUrl}/api/test-data/reset`, { method: 'POST' });
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
+ });
169
192
  }
170
193
  ```
171
194
 
172
- The `HookContext` provides:
173
- - `targetUrl` — the app URL being tested
174
- - `journeyName` — current journey name (beforeEach/afterEach only)
175
- - `journeyPath` — current journey file path (beforeEach/afterEach only)
176
- - `journeyStatus` — 'passed' or 'failed' (afterEach only)
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'` |
177
205
 
178
206
  ## CLI Commands
179
207
 
@@ -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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mechris3/glassbox",
3
- "version": "0.1.1",
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",