intellitester 0.4.3 → 0.4.4
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/{chunk-XK4HXKX2.js → chunk-7OBDMLJ3.js} +129 -14
- package/dist/chunk-7OBDMLJ3.js.map +1 -0
- package/dist/{chunk-UYI7XVUE.cjs → chunk-JX63IML5.cjs} +35 -5
- package/dist/chunk-JX63IML5.cjs.map +1 -0
- package/dist/{chunk-IRLKUK76.cjs → chunk-QHIU4JKR.cjs} +130 -14
- package/dist/chunk-QHIU4JKR.cjs.map +1 -0
- package/dist/{chunk-A3UKMKXR.js → chunk-YEB47TDJ.js} +35 -5
- package/dist/chunk-YEB47TDJ.js.map +1 -0
- package/dist/cli/index.cjs +68 -42
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +32 -6
- package/dist/cli/index.js.map +1 -1
- package/dist/index.cjs +39 -35
- package/dist/index.d.cts +86 -3
- package/dist/index.d.ts +86 -3
- package/dist/index.js +2 -2
- package/dist/{loader-4HFRIWQQ.cjs → loader-BNUKI7J3.cjs} +16 -16
- package/dist/{loader-4HFRIWQQ.cjs.map → loader-BNUKI7J3.cjs.map} +1 -1
- package/dist/{loader-GDI65KW7.js → loader-JTBS7GW4.js} +3 -3
- package/dist/{loader-GDI65KW7.js.map → loader-JTBS7GW4.js.map} +1 -1
- package/package.json +1 -1
- package/schemas/intellitester.config.schema.json +13 -0
- package/schemas/pipeline.schema.json +13 -0
- package/schemas/test.schema.json +13 -0
- package/schemas/workflow.schema.json +13 -0
- package/dist/chunk-A3UKMKXR.js.map +0 -1
- package/dist/chunk-IRLKUK76.cjs.map +0 -1
- package/dist/chunk-UYI7XVUE.cjs.map +0 -1
- package/dist/chunk-XK4HXKX2.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { loadTestDefinition } from './chunk-
|
|
1
|
+
import { loadTestDefinition } from './chunk-YEB47TDJ.js';
|
|
2
2
|
import { track } from './chunk-XINWSJFM.js';
|
|
3
3
|
import { loadCleanupHandlers, executeCleanup, saveFailedCleanup } from './chunk-4P2XW7LQ.js';
|
|
4
4
|
import { init_esm_shims } from './chunk-TM6IHTOK.js';
|
|
@@ -2193,6 +2193,10 @@ async function evaluate(options) {
|
|
|
2193
2193
|
|
|
2194
2194
|
// src/executors/web/playwrightExecutor.ts
|
|
2195
2195
|
var defaultScreenshotDir = path4__default.join(process.cwd(), "artifacts", "screenshots");
|
|
2196
|
+
var resolveStorageStatePath = (value, baseDir) => {
|
|
2197
|
+
if (typeof value !== "string") return value;
|
|
2198
|
+
return path4__default.isAbsolute(value) ? value : path4__default.resolve(baseDir, value);
|
|
2199
|
+
};
|
|
2196
2200
|
var interpolateTrackMetadata = (value, variables) => {
|
|
2197
2201
|
if (typeof value === "string") {
|
|
2198
2202
|
return interpolateVariables(value, variables);
|
|
@@ -2988,7 +2992,7 @@ async function executeActionWithRetry(page, action, index, options) {
|
|
|
2988
2992
|
});
|
|
2989
2993
|
}
|
|
2990
2994
|
} else {
|
|
2991
|
-
const { loadWorkflowDefinition, loadTestDefinition: loadTestDefinition2 } = await import('./loader-
|
|
2995
|
+
const { loadWorkflowDefinition, loadTestDefinition: loadTestDefinition2 } = await import('./loader-JTBS7GW4.js');
|
|
2992
2996
|
const workflowPath = path4__default.resolve(process.cwd(), branchToExecute.workflow);
|
|
2993
2997
|
const workflowDir = path4__default.dirname(workflowPath);
|
|
2994
2998
|
if (debugMode) {
|
|
@@ -3191,7 +3195,8 @@ var runWebTest = async (test, options = {}) => {
|
|
|
3191
3195
|
console.log(`Testing at viewport: ${size} (${viewport.width}x${viewport.height})`);
|
|
3192
3196
|
}
|
|
3193
3197
|
const browserContext = await browser.newContext({
|
|
3194
|
-
viewport: { width: viewport.width, height: viewport.height }
|
|
3198
|
+
viewport: { width: viewport.width, height: viewport.height },
|
|
3199
|
+
...options.storageState ? { storageState: options.storageState } : {}
|
|
3195
3200
|
});
|
|
3196
3201
|
const page = await browserContext.newPage();
|
|
3197
3202
|
page.setDefaultTimeout(defaultTimeout);
|
|
@@ -3501,6 +3506,60 @@ var runWebTest = async (test, options = {}) => {
|
|
|
3501
3506
|
options.onStepComplete?.(sizeResults[sizeResults.length - 1], index, test.steps.length);
|
|
3502
3507
|
continue;
|
|
3503
3508
|
}
|
|
3509
|
+
if (action.type === "saveStorageState") {
|
|
3510
|
+
const saveAction = action;
|
|
3511
|
+
try {
|
|
3512
|
+
if (saveAction.path) {
|
|
3513
|
+
const resolvedPath = interpolateVariables(saveAction.path, executionContext.variables);
|
|
3514
|
+
const baseDir = options.testFilePath ? path4__default.dirname(options.testFilePath) : process.cwd();
|
|
3515
|
+
const absPath = path4__default.isAbsolute(resolvedPath) ? resolvedPath : path4__default.resolve(baseDir, resolvedPath);
|
|
3516
|
+
await page.context().storageState({ path: absPath });
|
|
3517
|
+
if (debugMode) {
|
|
3518
|
+
console.log(`[DEBUG] Saved storage state to ${absPath}`);
|
|
3519
|
+
}
|
|
3520
|
+
} else if (saveAction.handler) {
|
|
3521
|
+
const resolvedHandler = interpolateVariables(saveAction.handler, executionContext.variables);
|
|
3522
|
+
const baseDir = options.testFilePath ? path4__default.dirname(options.testFilePath) : process.cwd();
|
|
3523
|
+
const absPath = path4__default.isAbsolute(resolvedHandler) ? resolvedHandler : path4__default.resolve(baseDir, resolvedHandler);
|
|
3524
|
+
let loadPath = absPath;
|
|
3525
|
+
if (absPath.endsWith(".ts")) {
|
|
3526
|
+
const jsPath = absPath.replace(/\.ts$/, ".js");
|
|
3527
|
+
try {
|
|
3528
|
+
await fs__default.access(jsPath);
|
|
3529
|
+
loadPath = jsPath;
|
|
3530
|
+
} catch {
|
|
3531
|
+
}
|
|
3532
|
+
}
|
|
3533
|
+
const mod = await import(`${loadPath}?t=${Date.now()}`);
|
|
3534
|
+
const fn = mod.default ?? mod;
|
|
3535
|
+
if (typeof fn !== "function") {
|
|
3536
|
+
throw new Error(`saveStorageState handler at ${resolvedHandler} did not export a default function`);
|
|
3537
|
+
}
|
|
3538
|
+
await fn({
|
|
3539
|
+
page,
|
|
3540
|
+
context: page.context(),
|
|
3541
|
+
variables: executionContext.variables
|
|
3542
|
+
});
|
|
3543
|
+
if (debugMode) {
|
|
3544
|
+
console.log(`[DEBUG] Ran custom saveStorageState handler: ${resolvedHandler}`);
|
|
3545
|
+
}
|
|
3546
|
+
} else {
|
|
3547
|
+
throw new Error("saveStorageState requires either `path` or `handler` (schema should have caught this)");
|
|
3548
|
+
}
|
|
3549
|
+
sizeResults.push({ action, status: "passed" });
|
|
3550
|
+
options.onStepComplete?.(sizeResults[sizeResults.length - 1], index, test.steps.length);
|
|
3551
|
+
const trackedPayload = buildTrackPayload(action, index);
|
|
3552
|
+
if (trackedPayload) {
|
|
3553
|
+
await track(trackedPayload);
|
|
3554
|
+
}
|
|
3555
|
+
} catch (e) {
|
|
3556
|
+
const errMsg = e instanceof Error ? e.message : String(e);
|
|
3557
|
+
sizeResults.push({ action, status: "failed", error: errMsg });
|
|
3558
|
+
options.onStepComplete?.(sizeResults[sizeResults.length - 1], index, test.steps.length);
|
|
3559
|
+
throw e;
|
|
3560
|
+
}
|
|
3561
|
+
continue;
|
|
3562
|
+
}
|
|
3504
3563
|
const actionExtras = await executeActionWithRetry(page, action, index, {
|
|
3505
3564
|
baseUrl: options.baseUrl ?? test.config?.web?.baseUrl,
|
|
3506
3565
|
context: executionContext,
|
|
@@ -3626,7 +3685,7 @@ function interpolateWorkflowVariables(value, currentVariables, testResults) {
|
|
|
3626
3685
|
return result;
|
|
3627
3686
|
});
|
|
3628
3687
|
}
|
|
3629
|
-
async function runTestInWorkflow(test, page, context, options,
|
|
3688
|
+
async function runTestInWorkflow(test, page, context, options, workflowDir, testFilePath, workflowBaseUrl) {
|
|
3630
3689
|
const results = [];
|
|
3631
3690
|
const debugMode = options.debug ?? false;
|
|
3632
3691
|
const screenshotDir = defaultScreenshotDir2;
|
|
@@ -3815,6 +3874,52 @@ async function runTestInWorkflow(test, page, context, options, _workflowDir, wor
|
|
|
3815
3874
|
}
|
|
3816
3875
|
continue;
|
|
3817
3876
|
}
|
|
3877
|
+
case "saveStorageState": {
|
|
3878
|
+
const saveAction = action;
|
|
3879
|
+
if (saveAction.path) {
|
|
3880
|
+
const resolvedPath = interpolate(saveAction.path);
|
|
3881
|
+
const baseDir = path4__default.dirname(testFilePath);
|
|
3882
|
+
const absPath = path4__default.isAbsolute(resolvedPath) ? resolvedPath : path4__default.resolve(baseDir, resolvedPath);
|
|
3883
|
+
await page.context().storageState({ path: absPath });
|
|
3884
|
+
if (debugMode) {
|
|
3885
|
+
console.log(` [DEBUG] Saved storage state to ${absPath}`);
|
|
3886
|
+
}
|
|
3887
|
+
} else if (saveAction.handler) {
|
|
3888
|
+
const resolvedHandler = interpolate(saveAction.handler);
|
|
3889
|
+
const baseDir = path4__default.dirname(testFilePath);
|
|
3890
|
+
const absPath = path4__default.isAbsolute(resolvedHandler) ? resolvedHandler : path4__default.resolve(baseDir, resolvedHandler);
|
|
3891
|
+
let loadPath = absPath;
|
|
3892
|
+
if (absPath.endsWith(".ts")) {
|
|
3893
|
+
const jsPath = absPath.replace(/\.ts$/, ".js");
|
|
3894
|
+
try {
|
|
3895
|
+
await fs__default.access(jsPath);
|
|
3896
|
+
loadPath = jsPath;
|
|
3897
|
+
} catch {
|
|
3898
|
+
}
|
|
3899
|
+
}
|
|
3900
|
+
const mod = await import(`${loadPath}?t=${Date.now()}`);
|
|
3901
|
+
const fn = mod.default ?? mod;
|
|
3902
|
+
if (typeof fn !== "function") {
|
|
3903
|
+
throw new Error(`saveStorageState handler at ${resolvedHandler} did not export a default function`);
|
|
3904
|
+
}
|
|
3905
|
+
await fn({
|
|
3906
|
+
page,
|
|
3907
|
+
context: page.context(),
|
|
3908
|
+
variables: context.variables
|
|
3909
|
+
});
|
|
3910
|
+
if (debugMode) {
|
|
3911
|
+
console.log(` [DEBUG] Ran custom saveStorageState handler: ${resolvedHandler}`);
|
|
3912
|
+
}
|
|
3913
|
+
} else {
|
|
3914
|
+
throw new Error("saveStorageState requires either `path` or `handler` (schema should have caught this)");
|
|
3915
|
+
}
|
|
3916
|
+
results.push({ action, status: "passed" });
|
|
3917
|
+
const trackedPayload2 = buildTrackPayload(action, index);
|
|
3918
|
+
if (trackedPayload2) {
|
|
3919
|
+
await track(trackedPayload2);
|
|
3920
|
+
}
|
|
3921
|
+
break;
|
|
3922
|
+
}
|
|
3818
3923
|
case "setVar": {
|
|
3819
3924
|
let value;
|
|
3820
3925
|
if (action.value) {
|
|
@@ -4186,11 +4291,11 @@ async function runTestInWorkflow(test, page, context, options, _workflowDir, wor
|
|
|
4186
4291
|
results.push({ action: nestedAction, status: "passed" });
|
|
4187
4292
|
}
|
|
4188
4293
|
} else if (typeof branch === "object" && "workflow" in branch) {
|
|
4189
|
-
const workflowPath = path4__default.resolve(
|
|
4294
|
+
const workflowPath = path4__default.resolve(workflowDir, branch.workflow);
|
|
4190
4295
|
if (debugMode) {
|
|
4191
4296
|
console.log(` [DEBUG] waitForBranch: loading workflow from ${workflowPath}`);
|
|
4192
4297
|
}
|
|
4193
|
-
const { loadWorkflowDefinition } = await import('./loader-
|
|
4298
|
+
const { loadWorkflowDefinition } = await import('./loader-JTBS7GW4.js');
|
|
4194
4299
|
const nestedWorkflow = await loadWorkflowDefinition(workflowPath);
|
|
4195
4300
|
if (branch.variables) {
|
|
4196
4301
|
for (const [key, value] of Object.entries(branch.variables)) {
|
|
@@ -4199,8 +4304,8 @@ async function runTestInWorkflow(test, page, context, options, _workflowDir, wor
|
|
|
4199
4304
|
}
|
|
4200
4305
|
}
|
|
4201
4306
|
for (const testRef of nestedWorkflow.tests) {
|
|
4202
|
-
const
|
|
4203
|
-
const nestedTest = await loadTestDefinition(
|
|
4307
|
+
const testFilePath2 = path4__default.resolve(path4__default.dirname(workflowPath), testRef.file);
|
|
4308
|
+
const nestedTest = await loadTestDefinition(testFilePath2);
|
|
4204
4309
|
if (nestedTest.variables) {
|
|
4205
4310
|
for (const [key, value] of Object.entries(nestedTest.variables)) {
|
|
4206
4311
|
const interpolated = interpolateVariables(value, context.variables);
|
|
@@ -4213,6 +4318,7 @@ async function runTestInWorkflow(test, page, context, options, _workflowDir, wor
|
|
|
4213
4318
|
context,
|
|
4214
4319
|
options,
|
|
4215
4320
|
path4__default.dirname(workflowPath),
|
|
4321
|
+
testFilePath2,
|
|
4216
4322
|
nestedWorkflow.config?.web?.baseUrl ?? workflowBaseUrl
|
|
4217
4323
|
);
|
|
4218
4324
|
results.push(...nestedResult.steps);
|
|
@@ -4496,7 +4602,7 @@ Starting workflow: ${workflow.name}`);
|
|
|
4496
4602
|
console.log(` [DEBUG] - workflow.config?.web?.baseUrl: ${workflow.config?.web?.baseUrl ?? "(undefined)"}`);
|
|
4497
4603
|
console.log(` [DEBUG] - options.baseUrl: ${options.baseUrl ?? "(undefined)"}`);
|
|
4498
4604
|
}
|
|
4499
|
-
const result = await runTestInWorkflow(test, page, executionContext, options, workflowDir, effectiveBaseUrl);
|
|
4605
|
+
const result = await runTestInWorkflow(test, page, executionContext, options, workflowDir, testFilePath, effectiveBaseUrl);
|
|
4500
4606
|
const testResult = {
|
|
4501
4607
|
id: testRef.id,
|
|
4502
4608
|
file: testRef.file,
|
|
@@ -4723,8 +4829,14 @@ async function runWorkflow(workflow, workflowFilePath, options = {}) {
|
|
|
4723
4829
|
}
|
|
4724
4830
|
const allTestResults = [];
|
|
4725
4831
|
let anyFailed = false;
|
|
4832
|
+
const cliStorageState = typeof options.storageState === "string" ? path4__default.isAbsolute(options.storageState) ? options.storageState : path4__default.resolve(process.cwd(), options.storageState) : options.storageState;
|
|
4833
|
+
const storageState = cliStorageState ?? resolveStorageStatePath(
|
|
4834
|
+
workflow.config?.web?.storageState,
|
|
4835
|
+
workflowDir
|
|
4836
|
+
);
|
|
4726
4837
|
let browserContext = await browser.newContext({
|
|
4727
|
-
viewport: viewportSizes[0].viewport
|
|
4838
|
+
viewport: viewportSizes[0].viewport,
|
|
4839
|
+
...storageState ? { storageState } : {}
|
|
4728
4840
|
});
|
|
4729
4841
|
let page = await browserContext.newPage();
|
|
4730
4842
|
page.setDefaultTimeout(3e4);
|
|
@@ -4750,7 +4862,10 @@ async function runWorkflow(workflow, workflowFilePath, options = {}) {
|
|
|
4750
4862
|
const { size, viewport } = viewportSizes[sizeIndex];
|
|
4751
4863
|
if (sizeIndex > 0) {
|
|
4752
4864
|
await browserContext.close();
|
|
4753
|
-
browserContext = await browser.newContext({
|
|
4865
|
+
browserContext = await browser.newContext({
|
|
4866
|
+
viewport,
|
|
4867
|
+
...storageState ? { storageState } : {}
|
|
4868
|
+
});
|
|
4754
4869
|
page = await browserContext.newPage();
|
|
4755
4870
|
page.setDefaultTimeout(3e4);
|
|
4756
4871
|
if (workflow.config?.appwrite) {
|
|
@@ -4907,6 +5022,6 @@ Collected ${serverResources.length} server-tracked resources`);
|
|
|
4907
5022
|
// src/executors/web/index.ts
|
|
4908
5023
|
init_esm_shims();
|
|
4909
5024
|
|
|
4910
|
-
export { createAIProvider, createTestContext, generateFillerText, generateRandomEmail, generateRandomPhone, generateRandomPhoto, generateRandomUsername, getBrowserLaunchOptions, initFileTracking, interpolateVariables, mergeFileTrackedResources, parseViewportSize, runWebTest, runWorkflow, runWorkflowWithContext, setupAppwriteTracking, startTrackingServer, webServerManager };
|
|
4911
|
-
//# sourceMappingURL=chunk-
|
|
4912
|
-
//# sourceMappingURL=chunk-
|
|
5025
|
+
export { createAIProvider, createTestContext, generateFillerText, generateRandomEmail, generateRandomPhone, generateRandomPhoto, generateRandomUsername, getBrowserLaunchOptions, initFileTracking, interpolateVariables, mergeFileTrackedResources, parseViewportSize, resolveStorageStatePath, runWebTest, runWorkflow, runWorkflowWithContext, setupAppwriteTracking, startTrackingServer, webServerManager };
|
|
5026
|
+
//# sourceMappingURL=chunk-7OBDMLJ3.js.map
|
|
5027
|
+
//# sourceMappingURL=chunk-7OBDMLJ3.js.map
|