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.
@@ -1,4 +1,4 @@
1
- import { loadTestDefinition } from './chunk-A3UKMKXR.js';
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-GDI65KW7.js');
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, _workflowDir, workflowBaseUrl) {
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(_workflowDir, branch.workflow);
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-GDI65KW7.js');
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 testFilePath = path4__default.resolve(path4__default.dirname(workflowPath), testRef.file);
4203
- const nestedTest = await loadTestDefinition(testFilePath);
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({ viewport });
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-XK4HXKX2.js.map
4912
- //# sourceMappingURL=chunk-XK4HXKX2.js.map
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