@essential-apps/shopify-test-runner 1.0.27 → 1.0.29
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/dist/edge/edgeProxy.d.ts +2 -0
- package/dist/edge/edgeProxy.d.ts.map +1 -1
- package/dist/edge/edgeProxy.js +10 -1
- package/dist/edge/edgeProxy.js.map +1 -1
- package/dist/lib/neonWsProxy.d.ts +1 -1
- package/dist/lib/neonWsProxy.js +1 -1
- package/dist/playwright/baseConfig.d.ts +1 -1
- package/dist/scripts/devOnlineBackend.js +1 -1
- package/dist/scripts/devOnlineBackend.js.map +1 -1
- package/dist/scripts/runOffline.js +12 -12
- package/dist/scripts/runOffline.js.map +1 -1
- package/dist/scripts/runOfflineTests.d.ts +3 -0
- package/dist/scripts/runOfflineTests.d.ts.map +1 -0
- package/dist/scripts/{runOfflineFullTests.js → runOfflineTests.js} +80 -81
- package/dist/scripts/runOfflineTests.js.map +1 -0
- package/dist/scripts/runTests.js +1 -1
- package/dist/scripts/runTests.js.map +1 -1
- package/dist/scripts/runVm.js +2 -2
- package/dist/scripts/runVm.js.map +1 -1
- package/dist/vite/onlineConfig.d.ts +1 -1
- package/dist/vite/onlineConfig.js +1 -1
- package/package.json +1 -1
- package/src/edge/edgeProxy.ts +13 -1
- package/src/lib/neonWsProxy.ts +1 -1
- package/src/playwright/baseConfig.ts +1 -1
- package/src/scripts/devOnlineBackend.ts +1 -1
- package/src/scripts/runOffline.ts +12 -12
- package/src/scripts/{runOfflineFullTests.ts → runOfflineTests.ts} +79 -80
- package/src/scripts/runTests.ts +1 -1
- package/src/scripts/runVm.ts +2 -2
- package/src/vite/onlineConfig.ts +1 -1
- package/dist/scripts/runOfflineFullTests.d.ts +0 -3
- package/dist/scripts/runOfflineFullTests.d.ts.map +0 -1
- package/dist/scripts/runOfflineFullTests.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* runOfflineTests — full-stack offline orchestrator.
|
|
4
4
|
*
|
|
5
5
|
* Boots the entire offline stack in ONE Node process:
|
|
6
6
|
*
|
|
@@ -13,14 +13,14 @@
|
|
|
13
13
|
* reaches our Admin GraphQL mock
|
|
14
14
|
* - Playwright as a child process, with mock URLs in env
|
|
15
15
|
*
|
|
16
|
-
* The Playwright fixture (`
|
|
16
|
+
* The Playwright fixture (`offlineTest`, orchestrated mode)
|
|
17
17
|
* reads the mock URLs from env and routes browser requests via
|
|
18
18
|
* `page.route()`. Tests mutate ShopState via control-plane HTTP
|
|
19
19
|
* endpoints exposed by the storefront mock (mounted under
|
|
20
20
|
* `/__test__/state/*`).
|
|
21
21
|
*
|
|
22
22
|
* This is the offline counterpart to runTests.ts (online mode).
|
|
23
|
-
* Online tests still go via runTests.ts; offline
|
|
23
|
+
* Online tests still go via runTests.ts; offline tests via this.
|
|
24
24
|
*
|
|
25
25
|
* Env it sets in the spawned Remix backend:
|
|
26
26
|
* SHOPIFY_API_SECRET = mock JWT secret (so JWTs validate)
|
|
@@ -100,7 +100,7 @@ function dropOrphanDatabases(prefix) {
|
|
|
100
100
|
.filter((s) => s.length > 0);
|
|
101
101
|
if (orphans.length === 0)
|
|
102
102
|
return;
|
|
103
|
-
console.log(`[
|
|
103
|
+
console.log(`[runOfflineTests] cleanup: dropping ${orphans.length} orphan DB(s)…`);
|
|
104
104
|
for (const name of orphans) {
|
|
105
105
|
try {
|
|
106
106
|
// `--force` (psql 13+) terminates any leftover connections
|
|
@@ -119,7 +119,7 @@ function dropOrphanDatabases(prefix) {
|
|
|
119
119
|
catch (err) {
|
|
120
120
|
// If psql isn't available at all we just skip cleanup; the
|
|
121
121
|
// primary createdb below will fail loudly anyway.
|
|
122
|
-
console.warn(`[
|
|
122
|
+
console.warn(`[runOfflineTests] orphan-DB cleanup failed: ${err.message}`);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
/**
|
|
@@ -249,7 +249,7 @@ function ensureOfflineSetup() {
|
|
|
249
249
|
hostsContent = readFileSync(hostsPath, 'utf8');
|
|
250
250
|
}
|
|
251
251
|
catch {
|
|
252
|
-
console.warn(`[
|
|
252
|
+
console.warn(`[runOfflineTests] could not read ${hostsPath}; skipping /etc/hosts setup`);
|
|
253
253
|
return;
|
|
254
254
|
}
|
|
255
255
|
const hostsToAdd = [];
|
|
@@ -262,6 +262,10 @@ function ensureOfflineSetup() {
|
|
|
262
262
|
// `font_face` filter output (which contains real
|
|
263
263
|
// fonts.shopifycdn.com URLs) just works in-browser.
|
|
264
264
|
'fonts.shopifycdn.com',
|
|
265
|
+
// Partner API — so in-VM Node test code (the issue-credit helper)
|
|
266
|
+
// reaches the mock through the edge proxy, same as the backend's
|
|
267
|
+
// hard-coded https://partners.shopify.com fetch. No app-side override.
|
|
268
|
+
'partners.shopify.com',
|
|
265
269
|
]) {
|
|
266
270
|
if (!new RegExp(`^127\\.0\\.0\\.1\\s+${host.replace(/\./g, '\\.')}\\s*$`, 'm').test(hostsContent)) {
|
|
267
271
|
hostsToAdd.push(`127.0.0.1 ${host}`);
|
|
@@ -272,10 +276,10 @@ function ensureOfflineSetup() {
|
|
|
272
276
|
if (hostsToAdd.length > 0) {
|
|
273
277
|
try {
|
|
274
278
|
writeFileSync(hostsPath, hostsContent + '\n' + hostsToAdd.join('\n') + '\n');
|
|
275
|
-
console.log(`[
|
|
279
|
+
console.log(`[runOfflineTests] wrote ${hostsToAdd.length} /etc/hosts entries`);
|
|
276
280
|
}
|
|
277
281
|
catch (err) {
|
|
278
|
-
console.warn(`[
|
|
282
|
+
console.warn(`[runOfflineTests] could not write ${hostsPath}: ${err.message}. ` +
|
|
279
283
|
`Browser may resolve Shopify hostnames to real Shopify on the internet.`);
|
|
280
284
|
}
|
|
281
285
|
}
|
|
@@ -295,12 +299,12 @@ function ensureOfflineSetup() {
|
|
|
295
299
|
if (existing !== TEST_CA_CERT_PEM) {
|
|
296
300
|
writeFileSync(systemCertDest, TEST_CA_CERT_PEM);
|
|
297
301
|
execSync('update-ca-certificates >/dev/null 2>&1 || true', { stdio: 'ignore' });
|
|
298
|
-
console.log('[
|
|
302
|
+
console.log('[runOfflineTests] installed edge CA into system trust store');
|
|
299
303
|
}
|
|
300
304
|
process.env['NODE_EXTRA_CA_CERTS'] = systemCertDest;
|
|
301
305
|
}
|
|
302
306
|
catch (err) {
|
|
303
|
-
console.warn(`[
|
|
307
|
+
console.warn(`[runOfflineTests] could not install edge CA: ${err.message}. ` +
|
|
304
308
|
`TLS connections to the edge may fail.`);
|
|
305
309
|
}
|
|
306
310
|
// Chrome / Chromium on Linux verifies certs against NSS DB
|
|
@@ -332,10 +336,10 @@ function ensureOfflineSetup() {
|
|
|
332
336
|
execSync(`certutil -d sql:${nssDir} -D -n edge-ca >/dev/null 2>&1 || true`, { stdio: 'ignore' });
|
|
333
337
|
execSync(`certutil -d sql:${nssDir} -A -t "C,," -n edge-ca -i ${tmpCaPath}`, { stdio: 'ignore' });
|
|
334
338
|
unlinkSync(tmpCaPath);
|
|
335
|
-
console.log('[
|
|
339
|
+
console.log('[runOfflineTests] installed edge CA into NSS DB (Chrome)');
|
|
336
340
|
}
|
|
337
341
|
catch (err) {
|
|
338
|
-
console.warn(`[
|
|
342
|
+
console.warn(`[runOfflineTests] could not install edge CA into NSS DB: ${err.message}. ` +
|
|
339
343
|
`Chrome will reject the edge's cert. Verify libnss3-tools is installed in the image.`);
|
|
340
344
|
}
|
|
341
345
|
}
|
|
@@ -371,7 +375,7 @@ async function startOfflineDnsRedirect() {
|
|
|
371
375
|
resolver = await startOfflineResolver({ upstream });
|
|
372
376
|
}
|
|
373
377
|
catch (err) {
|
|
374
|
-
console.warn(`[
|
|
378
|
+
console.warn(`[runOfflineTests] offline DNS resolver failed to bind 127.0.0.1:53: ` +
|
|
375
379
|
`${err.message}. page.request may resolve Shopify ` +
|
|
376
380
|
`hostnames to real Shopify on the internet.`);
|
|
377
381
|
return null;
|
|
@@ -384,11 +388,11 @@ async function startOfflineDnsRedirect() {
|
|
|
384
388
|
// function-runner binary) — that round-trip routinely exceeds 1s,
|
|
385
389
|
// so an aggressive timeout would spuriously fail real lookups.
|
|
386
390
|
writeFileSync('/etc/resolv.conf', 'nameserver 127.0.0.1\n');
|
|
387
|
-
console.log('[
|
|
391
|
+
console.log('[runOfflineTests] offline DNS resolver on 127.0.0.1:53 ' +
|
|
388
392
|
`(Shopify → loopback${upstream ? `, else → ${upstream}` : ', else → SERVFAIL'})`);
|
|
389
393
|
}
|
|
390
394
|
catch (err) {
|
|
391
|
-
console.warn(`[
|
|
395
|
+
console.warn(`[runOfflineTests] could not repoint /etc/resolv.conf: ` +
|
|
392
396
|
`${err.message}. c-ares clients may bypass the resolver.`);
|
|
393
397
|
}
|
|
394
398
|
return resolver;
|
|
@@ -478,7 +482,7 @@ function seedSession(env, shopDomain) {
|
|
|
478
482
|
* - Supervisor (no `TEST_OFFLINE_SHARD_INDEX` set, N>1):
|
|
479
483
|
* 1. Build cache check + build once (so shards don't race)
|
|
480
484
|
* 2. Orphan-DB cleanup once
|
|
481
|
-
* 3. Spawn N child processes (`node ...
|
|
485
|
+
* 3. Spawn N child processes (`node ... runOfflineTests.ts`)
|
|
482
486
|
* each with `TEST_OFFLINE_SHARD_INDEX=k`, `TEST_OFFLINE_SKIP_BUILD=true`
|
|
483
487
|
* 4. Stream child stdout/stderr prefixed with [shard k]
|
|
484
488
|
* 5. Wait for all, exit with worst exit code
|
|
@@ -510,13 +514,13 @@ async function main() {
|
|
|
510
514
|
// strategy or invasive Chromium/Node bypasses. We tried that path
|
|
511
515
|
// (page.route() + host-resolver-rules + a Node socket-layer shim);
|
|
512
516
|
// it worked but maintained ~400 lines of bypass code in parallel.
|
|
513
|
-
// Use `npm run test:offline
|
|
517
|
+
// Use `npm run test:offline` from the consuming app — it
|
|
514
518
|
// routes through `runDockerOffline.ts` which spawns the
|
|
515
519
|
// `essential-upsell-test:latest` image where TEST_IN_CONTAINER=true
|
|
516
520
|
// is set by docker/entrypoint.sh.
|
|
517
521
|
if (process.env['TEST_IN_CONTAINER'] !== 'true') {
|
|
518
|
-
console.error('[
|
|
519
|
-
' Run: `npm run test:offline
|
|
522
|
+
console.error('[runOfflineTests] FATAL: must run inside the offline container.\n' +
|
|
523
|
+
' Run: `npm run test:offline` (which invokes runDockerOffline.ts)\n' +
|
|
520
524
|
' If you are seeing this from inside what should be a container, the\n' +
|
|
521
525
|
" entrypoint script (tests/offline/docker/entrypoint.sh) didn't run or\n" +
|
|
522
526
|
" didn't export TEST_IN_CONTAINER=true.");
|
|
@@ -561,15 +565,15 @@ async function main() {
|
|
|
561
565
|
// schema, but we DO want SCOPES to match what the app expects.
|
|
562
566
|
const scopes = process.env['SCOPES'] ?? 'write_products,read_products,write_discounts,read_discounts';
|
|
563
567
|
const playwrightConfig = process.env['TEST_PLAYWRIGHT_CONFIG'] ??
|
|
564
|
-
'tests/offline/playwright.offline
|
|
568
|
+
'tests/offline/playwright.offline.config.ts';
|
|
565
569
|
const isChildShard = shardIndex !== null;
|
|
566
570
|
// Backend port: shard k uses BASE + (k-1); single-worker uses BASE.
|
|
567
571
|
const baseBackendPort = Number(process.env['TEST_OFFLINE_BACKEND_PORT'] ?? '8181');
|
|
568
572
|
const backendPort = String(isChildShard ? baseBackendPort + (shardIndex - 1) : baseBackendPort);
|
|
569
573
|
// Production Remix serves via plain HTTP (remix-serve has no TLS).
|
|
570
|
-
// Vite dev had self-signed HTTPS; offline
|
|
574
|
+
// Vite dev had self-signed HTTPS; offline uses HTTP. The mock
|
|
571
575
|
// admin shell serves the iframe pointing here; mixed-content
|
|
572
|
-
// warnings are silenced via Chrome flags in the
|
|
576
|
+
// warnings are silenced via Chrome flags in the offlineStack
|
|
573
577
|
// fixture.
|
|
574
578
|
const backendUrl = `http://localhost:${backendPort}`;
|
|
575
579
|
// Skip the build if TEST_OFFLINE_SKIP_BUILD=true and a recent build
|
|
@@ -582,14 +586,14 @@ async function main() {
|
|
|
582
586
|
const dbName = `${dbPrefix}_${randomUUID().replace(/-/g, '_')}`;
|
|
583
587
|
const dbConn = dbUrl(dbName);
|
|
584
588
|
const preserveDb = process.env['TEST_PRESERVE_DB'] === 'true';
|
|
585
|
-
console.log(`[
|
|
586
|
-
console.log(`[
|
|
589
|
+
console.log(`[runOfflineTests] Test DB: ${dbConn}`);
|
|
590
|
+
console.log(`[runOfflineTests] Backend: ${backendUrl}`);
|
|
587
591
|
// Drop orphan DBs from previous crashed runs. The supervisor
|
|
588
592
|
// already did this once — children skip.
|
|
589
593
|
if (!isChildShard) {
|
|
590
594
|
dropOrphanDatabases(dbPrefix);
|
|
591
595
|
}
|
|
592
|
-
console.log('[
|
|
596
|
+
console.log('[runOfflineTests] createdb…');
|
|
593
597
|
execSync(`createdb -h ${PG_HOST} -p ${PG_PORT} ${dbName}`, { stdio: 'inherit' });
|
|
594
598
|
// ── Mock servers (in-process, sharing one ShopState) ─────
|
|
595
599
|
const state = new ShopState({
|
|
@@ -611,7 +615,7 @@ async function main() {
|
|
|
611
615
|
if (process.env['TEST_OFFLINE_EXPLORE'] === 'true') {
|
|
612
616
|
seedExploreProducts(state);
|
|
613
617
|
}
|
|
614
|
-
console.log('[
|
|
618
|
+
console.log('[runOfflineTests] booting mock servers…');
|
|
615
619
|
// 127.0.0.1 binding is the safe default — orchestrator and child
|
|
616
620
|
// both reach the mocks on loopback. Used to be subtly broken
|
|
617
621
|
// because we ran Playwright via execSync (sync, blocks the event
|
|
@@ -638,7 +642,7 @@ async function main() {
|
|
|
638
642
|
? resolve(process.cwd(), process.env['TEST_OFFLINE_POST_PURCHASE_EXT'])
|
|
639
643
|
: undefined;
|
|
640
644
|
if (postPurchaseExtensionPath && !existsSync(postPurchaseExtensionPath)) {
|
|
641
|
-
throw new Error(`[
|
|
645
|
+
throw new Error(`[runOfflineTests] TEST_OFFLINE_POST_PURCHASE_EXT points at ${postPurchaseExtensionPath} but the file doesn't exist. ` +
|
|
642
646
|
`Build the extension first — the bundled .js must exist on disk before the test run.`);
|
|
643
647
|
}
|
|
644
648
|
// The orchestrator owns the DB lifecycle: we build the
|
|
@@ -668,7 +672,7 @@ async function main() {
|
|
|
668
672
|
clientId: MOCK_CLIENT_ID,
|
|
669
673
|
jwtSecret: DEFAULT_MOCK_JWT_SECRET,
|
|
670
674
|
}), startOpts);
|
|
671
|
-
console.log(`[
|
|
675
|
+
console.log(`[runOfflineTests] mocks ready:\n` +
|
|
672
676
|
` shell: ${adminShell.baseUrl}\n` +
|
|
673
677
|
` admin GQL: ${adminApi.baseUrl}\n` +
|
|
674
678
|
` storefront GQL: ${storefrontApi.baseUrl}\n` +
|
|
@@ -685,10 +689,10 @@ async function main() {
|
|
|
685
689
|
for (const p of probes) {
|
|
686
690
|
try {
|
|
687
691
|
const r = await fetch(p.url, p.init);
|
|
688
|
-
console.log(`[
|
|
692
|
+
console.log(`[runOfflineTests] probe ${p.name}: ${r.status}`);
|
|
689
693
|
}
|
|
690
694
|
catch (e) {
|
|
691
|
-
console.log(`[
|
|
695
|
+
console.log(`[runOfflineTests] probe ${p.name}: FAILED ${e.message}`);
|
|
692
696
|
}
|
|
693
697
|
}
|
|
694
698
|
// ── Edge proxy (HTTPS) ──────────────────────────────────────
|
|
@@ -720,6 +724,7 @@ async function main() {
|
|
|
720
724
|
adminApi: adminApi.baseUrl,
|
|
721
725
|
storefrontApi: storefrontApi.baseUrl,
|
|
722
726
|
adminShell: adminShell.baseUrl,
|
|
727
|
+
partnerApi: partnerApi.baseUrl,
|
|
723
728
|
},
|
|
724
729
|
shopDomain: DEFAULT_SHOP_DOMAIN,
|
|
725
730
|
// Previously bound dual-stack `::` so /etc/hosts entries for
|
|
@@ -731,14 +736,14 @@ async function main() {
|
|
|
731
736
|
hostname: '0.0.0.0',
|
|
732
737
|
port: 443,
|
|
733
738
|
});
|
|
734
|
-
console.log(`[
|
|
739
|
+
console.log(`[runOfflineTests] edge proxy: ${edge.baseUrl}`);
|
|
735
740
|
// ── Neon-local WS proxy (zero-app-touch) ──────────────────
|
|
736
741
|
// Bridge the app's @neondatabase/serverless driver to THIS run's local
|
|
737
742
|
// Postgres without the app changing its prisma client. The shim
|
|
738
743
|
// (preloaded into the backend below) points neonConfig.wsProxy here;
|
|
739
744
|
// the proxy reads the driver's `?address=` and forwards to Postgres.
|
|
740
745
|
const neonProxy = await startNeonWsProxy({ targetHost: PG_HOST, targetPort: Number(PG_PORT) });
|
|
741
|
-
console.log(`[
|
|
746
|
+
console.log(`[runOfflineTests] neon ws-proxy: 127.0.0.1:${neonProxy.port} → Postgres ${PG_HOST}:${PG_PORT}`);
|
|
742
747
|
// ── Backend env ───────────────────────────────────────────
|
|
743
748
|
const mswLoader = resolveMswLoaderPath();
|
|
744
749
|
const neonShim = resolveNeonShimPath();
|
|
@@ -832,7 +837,7 @@ async function main() {
|
|
|
832
837
|
? { SHOPIFY_UPSELLS_ID: process.env['SHOPIFY_UPSELLS_ID'] }
|
|
833
838
|
: {}),
|
|
834
839
|
};
|
|
835
|
-
console.log('[
|
|
840
|
+
console.log('[runOfflineTests] prisma migrate deploy…');
|
|
836
841
|
// Strip the MSW loader from NODE_OPTIONS for prisma's invocation.
|
|
837
842
|
// MSW shouldn't intercept Postgres connections (it's HTTP-only),
|
|
838
843
|
// but loading it from inside `npx prisma` triggers a silent
|
|
@@ -854,15 +859,15 @@ async function main() {
|
|
|
854
859
|
// a no-op for apps that don't need it.
|
|
855
860
|
const extraSchema = resolve(process.cwd(), 'tests/offline/offline-extra-schema.sql');
|
|
856
861
|
if (existsSync(extraSchema)) {
|
|
857
|
-
console.log('[
|
|
862
|
+
console.log('[runOfflineTests] applying extra schema (tests/offline/offline-extra-schema.sql)…');
|
|
858
863
|
execSync(`psql -h ${PG_HOST} -p ${PG_PORT} -d ${dbName} -v ON_ERROR_STOP=1 -f ${JSON.stringify(extraSchema)}`, { stdio: 'inherit', env: prismaEnv });
|
|
859
864
|
}
|
|
860
|
-
console.log('[
|
|
865
|
+
console.log('[runOfflineTests] seeding session row…');
|
|
861
866
|
try {
|
|
862
867
|
seedSession(prismaEnv, DEFAULT_SHOP_DOMAIN);
|
|
863
868
|
}
|
|
864
869
|
catch (err) {
|
|
865
|
-
console.warn(`[
|
|
870
|
+
console.warn(`[runOfflineTests] session seed failed (continuing): ${err.message}`);
|
|
866
871
|
}
|
|
867
872
|
// ── Backend (Vite) ────────────────────────────────────────
|
|
868
873
|
let dev = null;
|
|
@@ -916,7 +921,7 @@ async function main() {
|
|
|
916
921
|
* the conventional exit code (`128 + signal`).
|
|
917
922
|
*/
|
|
918
923
|
const onSignal = (sig) => {
|
|
919
|
-
console.log(`\n[
|
|
924
|
+
console.log(`\n[runOfflineTests] received ${sig}, tearing down…`);
|
|
920
925
|
cleanup();
|
|
921
926
|
// 128 + signal number is the POSIX convention.
|
|
922
927
|
process.exit(sig === 'SIGINT' ? 130 : 143);
|
|
@@ -951,14 +956,14 @@ async function main() {
|
|
|
951
956
|
const skipBuildBecauseExplicit = skipBuild;
|
|
952
957
|
const skipBuildBecauseCache = cachedHash === currentBuildHash;
|
|
953
958
|
if (skipBuildBecauseExplicit) {
|
|
954
|
-
console.log('[
|
|
959
|
+
console.log('[runOfflineTests] skipping build (TEST_OFFLINE_SKIP_BUILD=true)');
|
|
955
960
|
}
|
|
956
961
|
else if (skipBuildBecauseCache) {
|
|
957
|
-
console.log(`[
|
|
962
|
+
console.log(`[runOfflineTests] build cache HIT (${currentBuildHash.slice(0, 12)}) — skipping npm run build. ` +
|
|
958
963
|
`Force with TEST_OFFLINE_FORCE_BUILD=true.`);
|
|
959
964
|
}
|
|
960
965
|
else {
|
|
961
|
-
console.log(`[
|
|
966
|
+
console.log(`[runOfflineTests] build cache MISS — running npm run build. ` +
|
|
962
967
|
`(${cachedHash ? `was ${cachedHash.slice(0, 12)}, now ` : 'no cache, '}${currentBuildHash.slice(0, 12)})`);
|
|
963
968
|
execSync('npm run build', {
|
|
964
969
|
stdio: 'inherit',
|
|
@@ -968,7 +973,7 @@ async function main() {
|
|
|
968
973
|
// crashed build leaves stale `build/` we shouldn't endorse.
|
|
969
974
|
writeFileSync(buildCachePath, currentBuildHash);
|
|
970
975
|
}
|
|
971
|
-
console.log('[
|
|
976
|
+
console.log('[runOfflineTests] booting Remix prod server (remix-serve)…');
|
|
972
977
|
// Resolve remix-serve's CLI path directly — `npx remix-serve`
|
|
973
978
|
// on some systems alters NODE_OPTIONS (it spawns a child via
|
|
974
979
|
// npm-cli with PATH manipulation), which silently drops our
|
|
@@ -1003,9 +1008,9 @@ async function main() {
|
|
|
1003
1008
|
stdio: ['inherit', 'inherit', 1],
|
|
1004
1009
|
env: backendRuntimeEnv,
|
|
1005
1010
|
});
|
|
1006
|
-
console.log(`[
|
|
1011
|
+
console.log(`[runOfflineTests] waiting for backend at ${backendUrl}…`);
|
|
1007
1012
|
await waitForReady(backendUrl, READY_TIMEOUT_MS);
|
|
1008
|
-
console.log('[
|
|
1013
|
+
console.log('[runOfflineTests] backend ready.');
|
|
1009
1014
|
// ── Pre-warm Remix routes ──────────────────────────────────
|
|
1010
1015
|
// remix-serve lazy-compiles each route's loader/action module on
|
|
1011
1016
|
// first authenticated request. The first /app navigation in a
|
|
@@ -1024,7 +1029,7 @@ async function main() {
|
|
|
1024
1029
|
//
|
|
1025
1030
|
// Failures are non-fatal — the next real test request will
|
|
1026
1031
|
// surface a clearer error than "warm-up failed".
|
|
1027
|
-
console.log('[
|
|
1032
|
+
console.log('[runOfflineTests] pre-warming hot Remix routes…');
|
|
1028
1033
|
const warmupToken = await mintIdToken({
|
|
1029
1034
|
shop: DEFAULT_SHOP_DOMAIN,
|
|
1030
1035
|
clientId: MOCK_CLIENT_ID,
|
|
@@ -1055,7 +1060,7 @@ async function main() {
|
|
|
1055
1060
|
authorization: `Bearer ${warmupToken}`,
|
|
1056
1061
|
// shopify-app-remix's `isbot` check returns 410 for
|
|
1057
1062
|
// Node's default User-Agent. Match the same UA the
|
|
1058
|
-
// browser context uses in tests (see
|
|
1063
|
+
// browser context uses in tests (see offlineStack
|
|
1059
1064
|
// fixture) so the request reaches the loader.
|
|
1060
1065
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 ' +
|
|
1061
1066
|
'(KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
|
|
@@ -1074,7 +1079,7 @@ async function main() {
|
|
|
1074
1079
|
return { path, error: err.message, ms: Date.now() - tStart };
|
|
1075
1080
|
}
|
|
1076
1081
|
}));
|
|
1077
|
-
console.log(`[
|
|
1082
|
+
console.log(`[runOfflineTests] route pre-warm done (${Date.now() - t0}ms):`);
|
|
1078
1083
|
for (const r of warmupResults) {
|
|
1079
1084
|
const status = 'error' in r ? `ERR ${r.error}` : `${r.status}${r.location ? ` → ${r.location}` : ''}`;
|
|
1080
1085
|
console.log(` ${r.ms}ms ${status} ${r.path.split('?')[0]}`);
|
|
@@ -1098,7 +1103,7 @@ async function main() {
|
|
|
1098
1103
|
if (process.env['TEST_OFFLINE_EXPLORE'] === 'true') {
|
|
1099
1104
|
const adminUrl = process.env['TEST_OFFLINE_EXPLORE_URL'] ??
|
|
1100
1105
|
`https://admin.shopify.com/store/test/apps/${DEFAULT_APP_HANDLE}/app`;
|
|
1101
|
-
console.log('[
|
|
1106
|
+
console.log('[runOfflineTests] explore mode — launching Chrome at:');
|
|
1102
1107
|
console.log(` ${adminUrl}`);
|
|
1103
1108
|
console.log('');
|
|
1104
1109
|
console.log(' Useful URLs you can navigate to (all routed via the edge proxy):');
|
|
@@ -1200,7 +1205,7 @@ async function main() {
|
|
|
1200
1205
|
await sfPage.goto(storefrontUrl, { waitUntil: 'domcontentloaded' });
|
|
1201
1206
|
}
|
|
1202
1207
|
catch (err) {
|
|
1203
|
-
console.error(`[
|
|
1208
|
+
console.error(`[runOfflineTests] explore: storefront tab failed to load (${err.message}) — continuing`);
|
|
1204
1209
|
}
|
|
1205
1210
|
// Leave the admin tab focused as the active one.
|
|
1206
1211
|
await explorePage.bringToFront().catch(() => { });
|
|
@@ -1222,7 +1227,7 @@ async function main() {
|
|
|
1222
1227
|
return;
|
|
1223
1228
|
}
|
|
1224
1229
|
// ── Playwright ─────────────────────────────────────────
|
|
1225
|
-
console.log('[
|
|
1230
|
+
console.log('[runOfflineTests] running Playwright…');
|
|
1226
1231
|
// Headed-under-Xvfb is the DEFAULT for offline runs (production-
|
|
1227
1232
|
// faithful, ~4% slower than headless). Opt OUT with
|
|
1228
1233
|
// TEST_OFFLINE_HEADLESS=true. Full-screen recording (TEST_OFFLINE_VIDEO)
|
|
@@ -1247,7 +1252,7 @@ async function main() {
|
|
|
1247
1252
|
hasFfmpeg = false;
|
|
1248
1253
|
}
|
|
1249
1254
|
if (!hasFfmpeg) {
|
|
1250
|
-
console.error('[
|
|
1255
|
+
console.error('[runOfflineTests] TEST_OFFLINE_VIDEO set but `ffmpeg` is missing from the ' +
|
|
1251
1256
|
'VM image — rebuild it (it predates video support): ' +
|
|
1252
1257
|
'`container image rm essential-apps/shopify-test-vm:latest` then re-run. ' +
|
|
1253
1258
|
'Continuing headed WITHOUT recording.');
|
|
@@ -1268,14 +1273,14 @@ async function main() {
|
|
|
1268
1273
|
}
|
|
1269
1274
|
headedReady = existsSync('/tmp/.X11-unix/X99');
|
|
1270
1275
|
if (!headedReady) {
|
|
1271
|
-
console.error('[
|
|
1276
|
+
console.error('[runOfflineTests] WARNING: Xvfb :99 did not start — falling back to headless');
|
|
1272
1277
|
videoOn = false;
|
|
1273
1278
|
headedOn = false;
|
|
1274
1279
|
process.env['TEST_OFFLINE_VIDEO'] = 'false';
|
|
1275
1280
|
process.env['TEST_OFFLINE_HEADED'] = 'false';
|
|
1276
1281
|
}
|
|
1277
1282
|
else {
|
|
1278
|
-
console.error(`[
|
|
1283
|
+
console.error(`[runOfflineTests] headed under Xvfb :99 (${videoOn ? 'recording' : 'no recording'})`);
|
|
1279
1284
|
}
|
|
1280
1285
|
}
|
|
1281
1286
|
const playwrightEnv = {
|
|
@@ -1317,19 +1322,13 @@ async function main() {
|
|
|
1317
1322
|
// (backendEnv sets it too). Without it the helper's credit comes back
|
|
1318
1323
|
// test:false and the assertion fails.
|
|
1319
1324
|
BILLING_IS_TEST: process.env['BILLING_IS_TEST'] ?? 'true',
|
|
1320
|
-
//
|
|
1321
|
-
//
|
|
1322
|
-
//
|
|
1323
|
-
//
|
|
1324
|
-
//
|
|
1325
|
-
//
|
|
1326
|
-
//
|
|
1327
|
-
// hit `page.request.post(...)`. Instead the app's PartnerApiClient
|
|
1328
|
-
// honours this env override for the base origin (a prod-safe test
|
|
1329
|
-
// seam; unset in prod → real URL). The mock serves the identical
|
|
1330
|
-
// `/:org/api/:ver/graphql.json` path, so only the origin changes —
|
|
1331
|
-
// the real client / GraphQL / response-parsing all still run.
|
|
1332
|
-
SHOPIFY_PARTNER_API_BASE_URL: partnerApi.baseUrl,
|
|
1325
|
+
// NB: the app's Partner API client fetches its hard-coded
|
|
1326
|
+
// https://partners.shopify.com endpoint with NO override. That host
|
|
1327
|
+
// is routed to the in-VM partner mock via /etc/hosts → the edge
|
|
1328
|
+
// proxy (see ensureOfflineSetup + edgeProxy's partners.shopify.com
|
|
1329
|
+
// case), so the issue-credit helper's Node fetch reaches the mock
|
|
1330
|
+
// with no app-side change and no MSW preload (which would corrupt
|
|
1331
|
+
// Playwright's page.request).
|
|
1333
1332
|
};
|
|
1334
1333
|
// Use async spawn (NOT execSync) — execSync blocks the
|
|
1335
1334
|
// orchestrator's event loop, so the in-process mock servers
|
|
@@ -1356,7 +1355,7 @@ async function main() {
|
|
|
1356
1355
|
// a file path, `--repeat-each`, etc. The docker runner already
|
|
1357
1356
|
// forwards user args verbatim into this script's argv; we just
|
|
1358
1357
|
// pass them through to playwright so single-test iteration is
|
|
1359
|
-
// possible (`npm run test:offline
|
|
1358
|
+
// possible (`npm run test:offline -- --grep "PDP form"`).
|
|
1360
1359
|
// Skip our own known flags (currently none after the launcher
|
|
1361
1360
|
// strips them — process.argv[0] is `node`, argv[1] is this
|
|
1362
1361
|
// script).
|
|
@@ -1380,10 +1379,10 @@ async function main() {
|
|
|
1380
1379
|
exitCode = 0;
|
|
1381
1380
|
}
|
|
1382
1381
|
catch (err) {
|
|
1383
|
-
console.error(`[
|
|
1382
|
+
console.error(`[runOfflineTests] failed: ${err.message}`);
|
|
1384
1383
|
}
|
|
1385
1384
|
finally {
|
|
1386
|
-
console.log('[
|
|
1385
|
+
console.log('[runOfflineTests] tearing down…');
|
|
1387
1386
|
// `cleanup()` kills the backend AND drops the DB (with
|
|
1388
1387
|
// preserveDb honored). It's the same function the signal
|
|
1389
1388
|
// handlers call, so the teardown path is identical whether
|
|
@@ -1401,7 +1400,7 @@ async function main() {
|
|
|
1401
1400
|
partnerApi.close(),
|
|
1402
1401
|
]);
|
|
1403
1402
|
if (preserveDb) {
|
|
1404
|
-
console.log(`[
|
|
1403
|
+
console.log(`[runOfflineTests] DB preserved: ${dbName}`);
|
|
1405
1404
|
}
|
|
1406
1405
|
}
|
|
1407
1406
|
process.exit(exitCode);
|
|
@@ -1428,23 +1427,23 @@ function loadExtensions() {
|
|
|
1428
1427
|
parsed = JSON.parse(raw);
|
|
1429
1428
|
}
|
|
1430
1429
|
catch (err) {
|
|
1431
|
-
throw new Error(`[
|
|
1430
|
+
throw new Error(`[runOfflineTests] TEST_OFFLINE_EXTENSIONS_JSON is not valid JSON: ${err.message}`);
|
|
1432
1431
|
}
|
|
1433
1432
|
if (!Array.isArray(parsed)) {
|
|
1434
|
-
throw new Error(`[
|
|
1433
|
+
throw new Error(`[runOfflineTests] TEST_OFFLINE_EXTENSIONS_JSON must be a JSON array; got ${typeof parsed}`);
|
|
1435
1434
|
}
|
|
1436
1435
|
const out = [];
|
|
1437
1436
|
for (const entry of parsed) {
|
|
1438
1437
|
if (typeof entry !== 'object' || entry === null) {
|
|
1439
|
-
throw new Error(`[
|
|
1438
|
+
throw new Error(`[runOfflineTests] extension entry must be an object: ${JSON.stringify(entry)}`);
|
|
1440
1439
|
}
|
|
1441
1440
|
const e = entry;
|
|
1442
1441
|
if (typeof e.name !== 'string' || typeof e.rootDir !== 'string') {
|
|
1443
|
-
throw new Error(`[
|
|
1442
|
+
throw new Error(`[runOfflineTests] each extension needs { name: string, rootDir: string }; got ${JSON.stringify(entry)}`);
|
|
1444
1443
|
}
|
|
1445
1444
|
const rootDir = resolve(process.cwd(), e.rootDir);
|
|
1446
1445
|
if (!existsSync(rootDir)) {
|
|
1447
|
-
throw new Error(`[
|
|
1446
|
+
throw new Error(`[runOfflineTests] extension rootDir does not exist: ${rootDir}`);
|
|
1448
1447
|
}
|
|
1449
1448
|
out.push({
|
|
1450
1449
|
name: e.name,
|
|
@@ -1453,7 +1452,7 @@ function loadExtensions() {
|
|
|
1453
1452
|
});
|
|
1454
1453
|
}
|
|
1455
1454
|
if (out.length > 0) {
|
|
1456
|
-
console.log(`[
|
|
1455
|
+
console.log(`[runOfflineTests] loaded ${out.length} extension(s): ${out.map((e) => `${e.name}=${e.rootDir}`).join(', ')}`);
|
|
1457
1456
|
}
|
|
1458
1457
|
return out;
|
|
1459
1458
|
}
|
|
@@ -1565,7 +1564,7 @@ function seedExploreProducts(state) {
|
|
|
1565
1564
|
state.addCollection({ handle: 'frontpage', title: 'Home page', productHandles: handles });
|
|
1566
1565
|
}
|
|
1567
1566
|
async function runSupervisor(workers) {
|
|
1568
|
-
console.log(`[
|
|
1567
|
+
console.log(`[runOfflineTests] supervisor: spawning ${workers} shard(s)…`);
|
|
1569
1568
|
// Pre-build: each child would otherwise duplicate the build (or
|
|
1570
1569
|
// race on the cache). Build here once, then pass SKIP_BUILD=true
|
|
1571
1570
|
// to children. The build cache check still runs (cheap), so this
|
|
@@ -1577,10 +1576,10 @@ async function runSupervisor(workers) {
|
|
|
1577
1576
|
? readFileSync(buildCachePath, 'utf8').trim()
|
|
1578
1577
|
: null;
|
|
1579
1578
|
if (cachedHash === currentBuildHash) {
|
|
1580
|
-
console.log(`[
|
|
1579
|
+
console.log(`[runOfflineTests] supervisor: build cache HIT (${currentBuildHash.slice(0, 12)})`);
|
|
1581
1580
|
}
|
|
1582
1581
|
else {
|
|
1583
|
-
console.log(`[
|
|
1582
|
+
console.log(`[runOfflineTests] supervisor: build cache MISS — running npm run build…`);
|
|
1584
1583
|
execSync('npm run build', {
|
|
1585
1584
|
stdio: 'inherit',
|
|
1586
1585
|
// `TEST_OFFLINE=true` switches the consuming app's
|
|
@@ -1613,7 +1612,7 @@ async function runSupervisor(workers) {
|
|
|
1613
1612
|
};
|
|
1614
1613
|
children.push(new Promise((resolveChild, rejectChild) => {
|
|
1615
1614
|
// Re-exec ourselves through `node --import tsx` so TS still
|
|
1616
|
-
// parses. argv[1] points at the user's `
|
|
1615
|
+
// parses. argv[1] points at the user's `runOfflineTests.ts`
|
|
1617
1616
|
// by the time we're invoked from the consuming app's
|
|
1618
1617
|
// npm script.
|
|
1619
1618
|
const proc = spawn(process.execPath, ['--import', 'tsx', childScript], { stdio: 'inherit', env: childEnv });
|
|
@@ -1623,11 +1622,11 @@ async function runSupervisor(workers) {
|
|
|
1623
1622
|
}
|
|
1624
1623
|
const exitCodes = await Promise.all(children);
|
|
1625
1624
|
const worst = exitCodes.reduce((a, b) => Math.max(a, b), 0);
|
|
1626
|
-
console.log(`[
|
|
1625
|
+
console.log(`[runOfflineTests] supervisor: shard exit codes [${exitCodes.join(', ')}]; overall=${worst}`);
|
|
1627
1626
|
return worst;
|
|
1628
1627
|
}
|
|
1629
1628
|
main().catch((err) => {
|
|
1630
1629
|
console.error(err);
|
|
1631
1630
|
process.exit(1);
|
|
1632
1631
|
});
|
|
1633
|
-
//# sourceMappingURL=
|
|
1632
|
+
//# sourceMappingURL=runOfflineTests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runOfflineTests.js","sourceRoot":"","sources":["../../src/scripts/runOfflineTests.ts"],"names":[],"mappings":"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"}
|