@essential-apps/shopify-test-runner 1.0.11 → 1.0.13
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/lib/guestVnc.d.ts +31 -0
- package/dist/lib/guestVnc.d.ts.map +1 -0
- package/dist/lib/guestVnc.js +111 -0
- package/dist/lib/guestVnc.js.map +1 -0
- package/dist/probes/runProbe.js +0 -0
- package/dist/scripts/addStore.js +0 -0
- package/dist/scripts/buildImage.d.ts +3 -0
- package/dist/scripts/buildImage.d.ts.map +1 -0
- package/dist/scripts/{buildDockerImage.js → buildImage.js} +12 -10
- package/dist/scripts/buildImage.js.map +1 -0
- package/dist/scripts/captureAuth.js +0 -0
- package/dist/scripts/captureContracts.js +0 -0
- package/dist/scripts/captureRestContracts.js +0 -0
- package/dist/scripts/captureSharedContracts.d.ts +3 -0
- package/dist/scripts/captureSharedContracts.d.ts.map +1 -0
- package/dist/scripts/captureSharedContracts.js +209 -0
- package/dist/scripts/captureSharedContracts.js.map +1 -0
- package/dist/scripts/checkOperationCoverage.js +0 -0
- package/dist/scripts/cleanupStores.js +0 -0
- package/dist/scripts/createStores.js +0 -0
- package/dist/scripts/deployAppVersion.js +0 -0
- package/dist/scripts/devOnlineBackend.js +0 -0
- package/dist/scripts/installApp.js +0 -0
- package/dist/scripts/listStores.js +0 -0
- package/dist/scripts/runOffline.js +83 -1
- package/dist/scripts/runOffline.js.map +1 -1
- package/dist/scripts/runOfflineFullTests.js +82 -6
- package/dist/scripts/runOfflineFullTests.js.map +1 -1
- package/dist/scripts/runTests.js +0 -0
- package/dist/scripts/runVm.js +0 -0
- package/dist/scripts/runVmAuth.js +0 -0
- package/dist/scripts/setupTestDb.js +0 -0
- package/dist/scripts/verifyContracts.js +20 -29
- package/dist/scripts/verifyContracts.js.map +1 -1
- package/dist/scripts/verifyRestContracts.js +17 -30
- package/dist/scripts/verifyRestContracts.js.map +1 -1
- package/docker/Dockerfile.vm +1 -0
- package/package.json +11 -9
- package/src/lib/guestVnc.ts +147 -0
- package/src/scripts/{buildDockerImage.ts → buildImage.ts} +11 -9
- package/src/scripts/captureSharedContracts.ts +228 -0
- package/src/scripts/runOffline.ts +87 -1
- package/src/scripts/runOfflineFullTests.ts +94 -6
- package/src/scripts/verifyContracts.ts +22 -38
- package/src/scripts/verifyRestContracts.ts +23 -42
- package/dist/edge/nodeShim.d.ts +0 -2
- package/dist/edge/nodeShim.d.ts.map +0 -1
- package/dist/edge/nodeShim.js +0 -217
- package/dist/edge/nodeShim.js.map +0 -1
- package/dist/scripts/_probeSourceUrl.d.ts +0 -3
- package/dist/scripts/_probeSourceUrl.d.ts.map +0 -1
- package/dist/scripts/_probeSourceUrl.js +0 -119
- package/dist/scripts/_probeSourceUrl.js.map +0 -1
- package/dist/scripts/buildDockerImage.d.ts +0 -3
- package/dist/scripts/buildDockerImage.d.ts.map +0 -1
- package/dist/scripts/buildDockerImage.js.map +0 -1
- package/dist/scripts/devE2eBackend.d.ts +0 -3
- package/dist/scripts/devE2eBackend.d.ts.map +0 -1
- package/dist/scripts/devE2eBackend.js +0 -117
- package/dist/scripts/devE2eBackend.js.map +0 -1
- package/dist/scripts/runDocker.d.ts +0 -3
- package/dist/scripts/runDocker.d.ts.map +0 -1
- package/dist/scripts/runDocker.js +0 -88
- package/dist/scripts/runDocker.js.map +0 -1
- package/dist/scripts/runDockerAuth.d.ts +0 -3
- package/dist/scripts/runDockerAuth.d.ts.map +0 -1
- package/dist/scripts/runDockerAuth.js +0 -108
- package/dist/scripts/runDockerAuth.js.map +0 -1
- package/dist/scripts/runDockerOffline.d.ts +0 -3
- package/dist/scripts/runDockerOffline.d.ts.map +0 -1
- package/dist/scripts/runDockerOffline.js +0 -129
- package/dist/scripts/runDockerOffline.js.map +0 -1
- package/dist/scripts/runDockerOfflineExplore.d.ts +0 -3
- package/dist/scripts/runDockerOfflineExplore.d.ts.map +0 -1
- package/dist/scripts/runDockerOfflineExplore.js +0 -116
- package/dist/scripts/runDockerOfflineExplore.js.map +0 -1
- package/dist/scripts/runIsolatedDockerOffline.d.ts +0 -3
- package/dist/scripts/runIsolatedDockerOffline.d.ts.map +0 -1
- package/dist/scripts/runIsolatedDockerOffline.js +0 -351
- package/dist/scripts/runIsolatedDockerOffline.js.map +0 -1
- package/dist/scripts/runOfflineE2e.d.ts +0 -3
- package/dist/scripts/runOfflineE2e.d.ts.map +0 -1
- package/dist/scripts/runOfflineE2e.js +0 -408
- package/dist/scripts/runOfflineE2e.js.map +0 -1
- package/dist/scripts/runSupermachine.d.ts +0 -3
- package/dist/scripts/runSupermachine.d.ts.map +0 -1
- package/dist/scripts/runSupermachine.js +0 -474
- package/dist/scripts/runSupermachine.js.map +0 -1
- package/dist/scripts/runSupermachineAuth.d.ts +0 -3
- package/dist/scripts/runSupermachineAuth.d.ts.map +0 -1
- package/dist/scripts/runSupermachineAuth.js +0 -454
- package/dist/scripts/runSupermachineAuth.js.map +0 -1
- package/dist/vite/offlineConfig.d.ts +0 -34
- package/dist/vite/offlineConfig.d.ts.map +0 -1
- package/dist/vite/offlineConfig.js +0 -61
- package/dist/vite/offlineConfig.js.map +0 -1
- package/src/scripts/runDockerAuth.ts +0 -120
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/** Test the CLI's actual format: tar + brotli, sourceExtension: BR. */
|
|
3
|
-
import { createReadStream, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
4
|
-
import { Readable } from 'node:stream';
|
|
5
|
-
import { randomUUID } from 'node:crypto';
|
|
6
|
-
import { brotliCompressSync, constants as zlibConst } from 'node:zlib';
|
|
7
|
-
import { pack as tarPack } from 'tar-stream';
|
|
8
|
-
const TOKEN = process.env.SHOPIFY_APP_AUTOMATION_TOKEN;
|
|
9
|
-
const ORG = 'gid://shopify/Organization/217838969';
|
|
10
|
-
const APP = 'gid://shopify/App/366427176961';
|
|
11
|
-
const WS = '/Users/domas/Developer/supercorp/essential-upsell';
|
|
12
|
-
async function getAt() {
|
|
13
|
-
const body = new URLSearchParams({
|
|
14
|
-
grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',
|
|
15
|
-
requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',
|
|
16
|
-
subject_token_type: 'urn:ietf:params:oauth:token-type:access_token',
|
|
17
|
-
client_id: 'fbdb2649-e327-4907-8f67-908d24cfd7e3',
|
|
18
|
-
audience: '7ee65a63608843c577db8b23c4d7316ea0a01bd2f7594f8a9c06ea668c1b775c',
|
|
19
|
-
scope: 'https://api.shopify.com/auth/organization.apps.manage',
|
|
20
|
-
subject_token: TOKEN,
|
|
21
|
-
}).toString();
|
|
22
|
-
const r = await fetch('https://accounts.shopify.com/oauth/token', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body });
|
|
23
|
-
return JSON.parse(await r.text()).access_token;
|
|
24
|
-
}
|
|
25
|
-
async function gql(at, body) {
|
|
26
|
-
const r = await fetch('https://app.shopify.com/app_management/unstable/graphql.json', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${at}`, 'X-Shopify-Access-Token': `Bearer ${at}` }, body: JSON.stringify(body) });
|
|
27
|
-
return { status: r.status, body: await r.text() };
|
|
28
|
-
}
|
|
29
|
-
async function mintBr(at) {
|
|
30
|
-
const r = await gql(at, { query: `mutation Q($o:ID!){appRequestSourceUploadUrl(sourceExtension:BR,organizationId:$o){sourceUploadUrl userErrors{field message}}}`, variables: { o: ORG } });
|
|
31
|
-
return JSON.parse(r.body).data.appRequestSourceUploadUrl.sourceUploadUrl;
|
|
32
|
-
}
|
|
33
|
-
async function upload(url, path) {
|
|
34
|
-
const size = statSync(path).size;
|
|
35
|
-
const body = Readable.toWeb(createReadStream(path));
|
|
36
|
-
const r = await fetch(url, {
|
|
37
|
-
method: 'PUT', body,
|
|
38
|
-
// Match CLI: no content-encoding header, raw bytes
|
|
39
|
-
headers: { 'Content-Length': String(size) },
|
|
40
|
-
// @ts-expect-error
|
|
41
|
-
duplex: 'half',
|
|
42
|
-
});
|
|
43
|
-
if (!r.ok)
|
|
44
|
-
throw new Error(`upload: ${r.status} ${await r.text()}`);
|
|
45
|
-
}
|
|
46
|
-
/** Build a tar archive in memory from { path: bytes } map. */
|
|
47
|
-
async function buildTarBr(files) {
|
|
48
|
-
return new Promise((resolve, reject) => {
|
|
49
|
-
const pack = tarPack();
|
|
50
|
-
const chunks = [];
|
|
51
|
-
pack.on('data', (c) => chunks.push(c));
|
|
52
|
-
pack.on('end', () => {
|
|
53
|
-
const tarBuf = Buffer.concat(chunks);
|
|
54
|
-
const brBuf = brotliCompressSync(tarBuf, {
|
|
55
|
-
params: { [zlibConst.BROTLI_PARAM_QUALITY]: 7 },
|
|
56
|
-
});
|
|
57
|
-
resolve(brBuf);
|
|
58
|
-
});
|
|
59
|
-
pack.on('error', reject);
|
|
60
|
-
(async () => {
|
|
61
|
-
for (const [name, content] of Object.entries(files)) {
|
|
62
|
-
const buf = Buffer.isBuffer(content) ? content : Buffer.from(content, 'utf8');
|
|
63
|
-
await new Promise((res, rej) => {
|
|
64
|
-
pack.entry({ name }, buf, (err) => (err ? rej(err) : res()));
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
pack.finalize();
|
|
68
|
-
})().catch(reject);
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
async function tryIt(at, label, manifest, files) {
|
|
72
|
-
const tarBr = await buildTarBr({ 'manifest.json': JSON.stringify(manifest, null, 2), ...files });
|
|
73
|
-
const p = `/tmp/probe-${Date.now()}.tar.br`;
|
|
74
|
-
writeFileSync(p, tarBr);
|
|
75
|
-
console.log(`\n--- ${label} (tar.br: ${tarBr.length} bytes) ---`);
|
|
76
|
-
const url = await mintBr(at);
|
|
77
|
-
await upload(url, p);
|
|
78
|
-
const r = await gql(at, {
|
|
79
|
-
query: `mutation Q($a:ID!,$v:AppVersionInput!,$m:VersionMetadataInput){appVersionCreate(appId:$a,version:$v,metadata:$m){version{id metadata{versionTag} appModules{uuid handle specification{identifier}}} userErrors{field message category code}}}`,
|
|
80
|
-
variables: { a: APP, v: { sourceUrl: url }, m: { versionTag: `probe-${Date.now()}`, message: label } },
|
|
81
|
-
});
|
|
82
|
-
console.log(`status ${r.status}: ${r.body.slice(0, 1500)}`);
|
|
83
|
-
}
|
|
84
|
-
async function main() {
|
|
85
|
-
const at = await getAt();
|
|
86
|
-
const fnWasm = readFileSync(`${WS}/app_extensions/discounts/dist/function.wasm`);
|
|
87
|
-
const fnWasmB64 = fnWasm.toString('base64');
|
|
88
|
-
const iq1 = readFileSync(`${WS}/app_extensions/discounts/src/cart_lines_discounts_generate_run.graphql`, 'utf8');
|
|
89
|
-
const iq2 = readFileSync(`${WS}/app_extensions/discounts/src/cart_delivery_options_discounts_generate_run.graphql`, 'utf8');
|
|
90
|
-
const targets = [
|
|
91
|
-
{ handle: 'cart.lines.discounts.generate.run', export: 'cart-lines-discounts-generate-run', input_query: iq1 },
|
|
92
|
-
{ handle: 'cart.delivery-options.discounts.generate.run', export: 'cart-delivery-options-discounts-generate-run', input_query: iq2 },
|
|
93
|
-
];
|
|
94
|
-
const uid = randomUUID();
|
|
95
|
-
await tryIt(at, 'V53: tar.br with <uid>/dist/index.wasm (base64 text), full CLI shape', {
|
|
96
|
-
name: 'Essential Upsell Test Online',
|
|
97
|
-
handle: '',
|
|
98
|
-
modules: [{
|
|
99
|
-
type: 'function',
|
|
100
|
-
handle: 'discounts',
|
|
101
|
-
uid,
|
|
102
|
-
assets: uid,
|
|
103
|
-
target: '',
|
|
104
|
-
config: {
|
|
105
|
-
title: 'Discounts',
|
|
106
|
-
module_id: randomUUID(),
|
|
107
|
-
description: 'Discount function',
|
|
108
|
-
app_key: '3384e849dbc1e2588cb63240b79907d3',
|
|
109
|
-
api_version: '2026-04',
|
|
110
|
-
enable_creation_ui: true,
|
|
111
|
-
targets,
|
|
112
|
-
},
|
|
113
|
-
}],
|
|
114
|
-
}, {
|
|
115
|
-
[`${uid}/dist/index.wasm`]: fnWasmB64,
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
main().catch((e) => { console.error(e); process.exit(1); });
|
|
119
|
-
//# sourceMappingURL=_probeSourceUrl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_probeSourceUrl.js","sourceRoot":"","sources":["../../src/scripts/_probeSourceUrl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildDockerImage.d.ts","sourceRoot":"","sources":["../../src/scripts/buildDockerImage.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildDockerImage.js","sourceRoot":"","sources":["../../src/scripts/buildDockerImage.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,mEAAmE;AACnE,uEAAuE;AACvE,MAAM,WAAW,GAAG,oCAAoC,CAAC;AAEzD,SAAS,gBAAgB;IACvB,oEAAoE;IACpE,+CAA+C;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,gDAAgD;IAChD,MAAM,UAAU,GAAG;QACjB,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC;QAC7B,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;KAC3B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,IAAI,KAAK,CACb,iEAAiE;QAC/D,UAAU,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,WAAW,CAAC;IACjE,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devE2eBackend.d.ts","sourceRoot":"","sources":["../../src/scripts/devE2eBackend.ts"],"names":[],"mappings":""}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Manual run of the e2e backend WITHOUT Shopify CLI.
|
|
4
|
-
*
|
|
5
|
-
* Used for `npm run test:online:install` (which needs a running backend to
|
|
6
|
-
* complete OAuth) and for local debugging. Mirrors the env-isolation
|
|
7
|
-
* guarantees of runTests.ts but uses a persistent DB
|
|
8
|
-
* (${appName}_e2e_${user}) instead of an ephemeral UUID one — so OAuth
|
|
9
|
-
* tokens persist across runs.
|
|
10
|
-
*
|
|
11
|
-
* Serves on https://localhost:PORT with a self-signed cert (vite +
|
|
12
|
-
* @vitejs/plugin-basic-ssl). No tunnel, no DNS.
|
|
13
|
-
*/
|
|
14
|
-
import { spawn, execSync } from 'node:child_process';
|
|
15
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
16
|
-
import { resolve } from 'node:path';
|
|
17
|
-
import { loadEnv, printEnvSummary } from '@essential-apps/shopify-test-core';
|
|
18
|
-
import { isPortFree } from '../lib/freePort.js';
|
|
19
|
-
const PG_HOST = 'localhost';
|
|
20
|
-
const PG_PORT = '5432';
|
|
21
|
-
function readAppName() {
|
|
22
|
-
const pkgPath = resolve(process.cwd(), 'package.json');
|
|
23
|
-
if (!existsSync(pkgPath)) {
|
|
24
|
-
throw new Error(`No package.json at ${pkgPath}. Run this from the consuming app's repo root.`);
|
|
25
|
-
}
|
|
26
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
27
|
-
if (!pkg.name)
|
|
28
|
-
throw new Error(`package.json at ${pkgPath} has no \`name\` field.`);
|
|
29
|
-
return pkg.name.replace(/^@[^/]+\//, '');
|
|
30
|
-
}
|
|
31
|
-
function dbExists(name) {
|
|
32
|
-
try {
|
|
33
|
-
execSync(`psql -h ${PG_HOST} -p ${PG_PORT} -lqt | cut -d \\| -f 1 | grep -qw ${name}`, {
|
|
34
|
-
stdio: 'ignore',
|
|
35
|
-
});
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
async function main() {
|
|
43
|
-
const env = loadEnv();
|
|
44
|
-
printEnvSummary(env);
|
|
45
|
-
if (!env.apiSecret) {
|
|
46
|
-
throw new Error(`SHOPIFY_API_SECRET is not set in .env.test.\n\n` +
|
|
47
|
-
`Get it from Partner Dashboard → Apps → "${env.devAppHandle}" → ` +
|
|
48
|
-
`Configuration → "Client credentials" → "Reveal client secret".\n` +
|
|
49
|
-
`Paste it into .env.test as SHOPIFY_API_SECRET=...`);
|
|
50
|
-
}
|
|
51
|
-
const appUrl = new URL(env.devAppUrl);
|
|
52
|
-
if (appUrl.hostname !== 'localhost' && appUrl.hostname !== '127.0.0.1') {
|
|
53
|
-
throw new Error(`SHOPIFY_APP_URL must be a localhost URL (https://localhost:PORT). Got: ${env.devAppUrl}`);
|
|
54
|
-
}
|
|
55
|
-
if (appUrl.protocol !== 'https:') {
|
|
56
|
-
throw new Error(`SHOPIFY_APP_URL must use https:// — got ${env.devAppUrl}`);
|
|
57
|
-
}
|
|
58
|
-
const port = appUrl.port || '443';
|
|
59
|
-
if (!(await isPortFree(Number(port)))) {
|
|
60
|
-
throw new Error(`Port ${port} is in use. Find what's there: lsof -i :${port}\n` +
|
|
61
|
-
`Or change SHOPIFY_APP_URL in .env.test to a different port (and update Partner Dashboard).`);
|
|
62
|
-
}
|
|
63
|
-
const appName = readAppName();
|
|
64
|
-
const dbPrefix = (process.env['TEST_ONLINE_DB_NAME_PREFIX'] ?? `${appName}_e2e`)
|
|
65
|
-
.toLowerCase()
|
|
66
|
-
.replace(/[^a-z0-9_]/g, '_');
|
|
67
|
-
const PERSISTENT_DB_NAME = `${dbPrefix}_${process.env['USER'] ?? 'local'}`;
|
|
68
|
-
const user = process.env['USER'] ?? '';
|
|
69
|
-
const url = `postgresql://${user}@${PG_HOST}:${PG_PORT}/${PERSISTENT_DB_NAME}`;
|
|
70
|
-
console.log(`[dev-e2e] Persistent DB: ${url}`);
|
|
71
|
-
console.log(`[dev-e2e] Backend: ${env.devAppUrl} (vite https, self-signed cert)`);
|
|
72
|
-
console.log('');
|
|
73
|
-
if (!dbExists(PERSISTENT_DB_NAME)) {
|
|
74
|
-
console.log(`[dev-e2e] createdb ${PERSISTENT_DB_NAME}…`);
|
|
75
|
-
execSync(`createdb -h ${PG_HOST} -p ${PG_PORT} ${PERSISTENT_DB_NAME}`, {
|
|
76
|
-
stdio: 'inherit',
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
console.log(`[dev-e2e] DB ${PERSISTENT_DB_NAME} exists, reusing.`);
|
|
81
|
-
}
|
|
82
|
-
const backendEnv = {
|
|
83
|
-
PATH: process.env['PATH'] ?? '',
|
|
84
|
-
// See runOfflineFullTests.ts for the long-form note — empty HOME
|
|
85
|
-
// makes npm write its cache to literal `~/.npm` in cwd.
|
|
86
|
-
HOME: process.env['HOME'] || '/root',
|
|
87
|
-
USER: process.env['USER'] ?? '',
|
|
88
|
-
NODE_ENV: 'test',
|
|
89
|
-
DATABASE_URL: url,
|
|
90
|
-
DIRECT_URL: url,
|
|
91
|
-
SHOPIFY_API_KEY: env.devClientId,
|
|
92
|
-
SHOPIFY_API_SECRET: env.apiSecret,
|
|
93
|
-
SCOPES: env.scopes,
|
|
94
|
-
SHOPIFY_APP_URL: env.devAppUrl,
|
|
95
|
-
PORT: port,
|
|
96
|
-
HOST: env.devAppUrl,
|
|
97
|
-
};
|
|
98
|
-
console.log('[dev-e2e] prisma migrate deploy…');
|
|
99
|
-
execSync('npx prisma migrate deploy', { stdio: 'inherit', env: backendEnv });
|
|
100
|
-
console.log('');
|
|
101
|
-
console.log('[dev-e2e] booting Remix dev server (vite, no tunnel)…');
|
|
102
|
-
console.log(` Open ${env.devAppUrl} (accept self-signed cert warning once).`);
|
|
103
|
-
console.log(' Ctrl-C to stop.');
|
|
104
|
-
console.log('');
|
|
105
|
-
const dev = spawn('npx', ['vite', '--port', port, '--strictPort', '--host', '0.0.0.0'], {
|
|
106
|
-
stdio: 'inherit',
|
|
107
|
-
env: backendEnv,
|
|
108
|
-
});
|
|
109
|
-
dev.on('exit', (code) => process.exit(code ?? 0));
|
|
110
|
-
process.on('SIGINT', () => dev.kill('SIGINT'));
|
|
111
|
-
process.on('SIGTERM', () => dev.kill('SIGTERM'));
|
|
112
|
-
}
|
|
113
|
-
main().catch((err) => {
|
|
114
|
-
console.error(err);
|
|
115
|
-
process.exit(1);
|
|
116
|
-
});
|
|
117
|
-
//# sourceMappingURL=devE2eBackend.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devE2eBackend.js","sourceRoot":"","sources":["../../src/scripts/devE2eBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runDocker.d.ts","sourceRoot":"","sources":["../../src/scripts/runDocker.ts"],"names":[],"mappings":""}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Run e2e tests inside Apple's `container` (libkrun-based microVM).
|
|
4
|
-
*
|
|
5
|
-
* Why: macOS-host Chrome can't be hidden reliably while passing
|
|
6
|
-
* Cloudflare's bot management. Running tests in a Linux microVM means
|
|
7
|
-
* the browser exists entirely off-host — no window flashes ever, fully
|
|
8
|
-
* invisible.
|
|
9
|
-
*
|
|
10
|
-
* Architecture:
|
|
11
|
-
* - Image: ${appName}-e2e:latest (built once via the consuming app's
|
|
12
|
-
* tests/e2e/docker/Dockerfile). Default image name is derived
|
|
13
|
-
* from package.json `name`; override via E2E_IMAGE env var.
|
|
14
|
-
* - Bind mounts:
|
|
15
|
-
* - app repo → /workspace
|
|
16
|
-
* - linux node_modules → /workspace/node_modules (cached)
|
|
17
|
-
* - shopify-test repo → same host path inside the container
|
|
18
|
-
* (so symlinks created by `npm install file:...` resolve
|
|
19
|
-
* identically on host and container)
|
|
20
|
-
* - Postgres starts inside the container via the app's entrypoint.sh.
|
|
21
|
-
* - The shopify-test-run-tests CLI runs unchanged inside the
|
|
22
|
-
* container — its localhost:5432 points at the container's pg,
|
|
23
|
-
* not the host's.
|
|
24
|
-
*/
|
|
25
|
-
import { spawn } from 'node:child_process';
|
|
26
|
-
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
27
|
-
import { homedir } from 'node:os';
|
|
28
|
-
import { resolve } from 'node:path';
|
|
29
|
-
const repoRoot = process.cwd();
|
|
30
|
-
function readAppName() {
|
|
31
|
-
const pkgPath = resolve(repoRoot, 'package.json');
|
|
32
|
-
if (!existsSync(pkgPath)) {
|
|
33
|
-
throw new Error(`No package.json at ${pkgPath}. Run this from the consuming app's repo root.`);
|
|
34
|
-
}
|
|
35
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
36
|
-
if (!pkg.name) {
|
|
37
|
-
throw new Error(`package.json at ${pkgPath} has no \`name\` field.`);
|
|
38
|
-
}
|
|
39
|
-
// Strip any npm scope: @essential-apps/foo → foo
|
|
40
|
-
return pkg.name.replace(/^@[^/]+\//, '');
|
|
41
|
-
}
|
|
42
|
-
async function main() {
|
|
43
|
-
const appName = readAppName();
|
|
44
|
-
const image = process.env['E2E_IMAGE'] ?? `${appName}-e2e:latest`;
|
|
45
|
-
// Linux node_modules cache lives OUTSIDE the project tree so neither
|
|
46
|
-
// tsconfig-paths nor Playwright's test discovery sees it.
|
|
47
|
-
const linuxModules = process.env['E2E_LINUX_NODE_MODULES'] ??
|
|
48
|
-
resolve(homedir(), `.cache/${appName}-e2e/node_modules`);
|
|
49
|
-
mkdirSync(linuxModules, { recursive: true });
|
|
50
|
-
const args = [
|
|
51
|
-
'run',
|
|
52
|
-
'--rm',
|
|
53
|
-
// amd64 + Rosetta — image bundles Google Chrome (Linux amd64-only).
|
|
54
|
-
// Apple `container` runs amd64 images on Apple Silicon via Rosetta.
|
|
55
|
-
'--arch',
|
|
56
|
-
'amd64',
|
|
57
|
-
'--memory',
|
|
58
|
-
'8192M',
|
|
59
|
-
'--cpus',
|
|
60
|
-
'4',
|
|
61
|
-
'--mount',
|
|
62
|
-
`type=bind,source=${repoRoot},target=/workspace`,
|
|
63
|
-
'--mount',
|
|
64
|
-
`type=bind,source=${linuxModules},target=/workspace/node_modules`,
|
|
65
|
-
'-w',
|
|
66
|
-
'/workspace',
|
|
67
|
-
image,
|
|
68
|
-
'bash',
|
|
69
|
-
'-c',
|
|
70
|
-
[
|
|
71
|
-
// Use the .env.test we already have; run the built test runner
|
|
72
|
-
// from the @essential-apps/shopify-test-runner package.
|
|
73
|
-
// PG_HOST=127.0.0.1 inside container points at the container's
|
|
74
|
-
// pg started by entrypoint.sh.
|
|
75
|
-
'node --env-file=.env.test node_modules/@essential-apps/shopify-test-runner/dist/scripts/runTests.js',
|
|
76
|
-
].join(' && '),
|
|
77
|
-
];
|
|
78
|
-
console.log('[runDocker] container run', args.slice(0, 12).join(' '), '…');
|
|
79
|
-
const p = spawn('container', args, { stdio: 'inherit' });
|
|
80
|
-
p.on('exit', (code) => process.exit(code ?? 0));
|
|
81
|
-
process.on('SIGINT', () => p.kill('SIGINT'));
|
|
82
|
-
process.on('SIGTERM', () => p.kill('SIGTERM'));
|
|
83
|
-
}
|
|
84
|
-
main().catch((err) => {
|
|
85
|
-
console.error(err);
|
|
86
|
-
process.exit(1);
|
|
87
|
-
});
|
|
88
|
-
//# sourceMappingURL=runDocker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runDocker.js","sourceRoot":"","sources":["../../src/scripts/runDocker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runDockerAuth.d.ts","sourceRoot":"","sources":["../../src/scripts/runDockerAuth.ts"],"names":[],"mappings":""}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* One-time interactive Shopify auth capture inside the test container.
|
|
4
|
-
*
|
|
5
|
-
* Why a separate script: tests run with the chromium browser invisible
|
|
6
|
-
* inside Xvfb, which means there's no way to interactively log in.
|
|
7
|
-
* This script starts the same container, exposes the Xvfb display via
|
|
8
|
-
* x11vnc on host port 5900, and opens macOS's built-in Screen Sharing
|
|
9
|
-
* (`vnc://localhost:5900`) so a developer can log in once. The
|
|
10
|
-
* resulting tests/test-online/.auth/storageState.json is bind-mounted into
|
|
11
|
-
* the project, so subsequent test runs use the captured cookies —
|
|
12
|
-
* bound to the container's Linux Chrome fingerprint, which is what
|
|
13
|
-
* Cloudflare expects to see during automated runs.
|
|
14
|
-
*
|
|
15
|
-
* Usage (one-time per developer machine, or whenever cookies expire):
|
|
16
|
-
* npm run test:online:capture-auth
|
|
17
|
-
*
|
|
18
|
-
* macOS Screen Sharing.app opens automatically; just log in to
|
|
19
|
-
* Shopify, wait until you see the Partner Dashboard, then hit Enter
|
|
20
|
-
* back in the terminal where this script is running.
|
|
21
|
-
*/
|
|
22
|
-
import { spawn } from 'node:child_process';
|
|
23
|
-
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
24
|
-
import { homedir, platform } from 'node:os';
|
|
25
|
-
import { resolve } from 'node:path';
|
|
26
|
-
import { setTimeout as sleep } from 'node:timers/promises';
|
|
27
|
-
import { envFileArgs } from '@essential-apps/shopify-test-core';
|
|
28
|
-
const repoRoot = process.cwd();
|
|
29
|
-
const VNC_PORT = 5900;
|
|
30
|
-
function readAppName() {
|
|
31
|
-
const pkgPath = resolve(repoRoot, 'package.json');
|
|
32
|
-
if (!existsSync(pkgPath)) {
|
|
33
|
-
throw new Error(`No package.json at ${pkgPath}. Run this from the consuming app's repo root.`);
|
|
34
|
-
}
|
|
35
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
36
|
-
if (!pkg.name)
|
|
37
|
-
throw new Error(`package.json at ${pkgPath} has no \`name\` field.`);
|
|
38
|
-
return pkg.name.replace(/^@[^/]+\//, '');
|
|
39
|
-
}
|
|
40
|
-
async function main() {
|
|
41
|
-
const appName = readAppName();
|
|
42
|
-
const image = process.env['TEST_IMAGE'] ?? `${appName}-test:latest`;
|
|
43
|
-
const linuxModules = process.env['TEST_LINUX_NODE_MODULES'] ??
|
|
44
|
-
resolve(homedir(), `.cache/${appName}-test/node_modules`);
|
|
45
|
-
const vncPassword = process.env['TEST_ONLINE_VNC_PASSWORD'] ?? 'test';
|
|
46
|
-
mkdirSync(linuxModules, { recursive: true });
|
|
47
|
-
const args = [
|
|
48
|
-
'run',
|
|
49
|
-
'--rm',
|
|
50
|
-
'--arch',
|
|
51
|
-
'amd64',
|
|
52
|
-
'--memory',
|
|
53
|
-
'4096M',
|
|
54
|
-
'--cpus',
|
|
55
|
-
'2',
|
|
56
|
-
'--publish',
|
|
57
|
-
`127.0.0.1:${VNC_PORT}:${VNC_PORT}`,
|
|
58
|
-
'--env',
|
|
59
|
-
'TEST_ONLINE_VNC=1',
|
|
60
|
-
'--env',
|
|
61
|
-
`TEST_ONLINE_VNC_PASSWORD=${vncPassword}`,
|
|
62
|
-
'--mount',
|
|
63
|
-
`type=bind,source=${repoRoot},target=/workspace`,
|
|
64
|
-
'--mount',
|
|
65
|
-
`type=bind,source=${linuxModules},target=/workspace/node_modules`,
|
|
66
|
-
'-w',
|
|
67
|
-
'/workspace',
|
|
68
|
-
image,
|
|
69
|
-
'bash',
|
|
70
|
-
'-c',
|
|
71
|
-
[
|
|
72
|
-
'sleep 1',
|
|
73
|
-
`echo "[runDockerAuth] Container ready. VNC server should be on 127.0.0.1:${VNC_PORT}."`,
|
|
74
|
-
'echo ""',
|
|
75
|
-
// captureAuth is now in @essential-apps/shopify-test-runner.
|
|
76
|
-
`node ${envFileArgs(repoRoot)} node_modules/@essential-apps/shopify-test-runner/dist/scripts/captureAuth.js`,
|
|
77
|
-
].join(' && '),
|
|
78
|
-
];
|
|
79
|
-
console.log(`[runDockerAuth] Starting container with VNC on 127.0.0.1:${VNC_PORT}…`);
|
|
80
|
-
console.log(`[runDockerAuth] VNC password (paste into Screen Sharing): ${vncPassword}`);
|
|
81
|
-
console.log('');
|
|
82
|
-
const p = spawn('container', args, { stdio: 'inherit' });
|
|
83
|
-
if (platform() === 'darwin') {
|
|
84
|
-
void (async () => {
|
|
85
|
-
await sleep(4_000);
|
|
86
|
-
// Embed the password in the URL (vnc://:<pw>@host) so Screen Sharing
|
|
87
|
-
// connects WITHOUT prompting — prefilled, not typed.
|
|
88
|
-
const vncUrl = `vnc://:${encodeURIComponent(vncPassword)}@localhost:${VNC_PORT}`;
|
|
89
|
-
console.log(`[runDockerAuth] Opening macOS Screen Sharing → vnc://localhost:${VNC_PORT} (password prefilled)`);
|
|
90
|
-
console.log(`[runDockerAuth] (If nothing opens, run manually: open '${vncUrl}')`);
|
|
91
|
-
spawn('open', [vncUrl], {
|
|
92
|
-
stdio: 'ignore',
|
|
93
|
-
detached: true,
|
|
94
|
-
}).unref();
|
|
95
|
-
})();
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
console.log(`[runDockerAuth] Connect any VNC viewer to localhost:${VNC_PORT}.`);
|
|
99
|
-
}
|
|
100
|
-
p.on('exit', (code) => process.exit(code ?? 0));
|
|
101
|
-
process.on('SIGINT', () => p.kill('SIGINT'));
|
|
102
|
-
process.on('SIGTERM', () => p.kill('SIGTERM'));
|
|
103
|
-
}
|
|
104
|
-
main().catch((err) => {
|
|
105
|
-
console.error(err);
|
|
106
|
-
process.exit(1);
|
|
107
|
-
});
|
|
108
|
-
//# sourceMappingURL=runDockerAuth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runDockerAuth.js","sourceRoot":"","sources":["../../src/scripts/runDockerAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runDockerOffline.d.ts","sourceRoot":"","sources":["../../src/scripts/runDockerOffline.ts"],"names":[],"mappings":""}
|