generate function ✓ 100.0%

Last updated: 2026-03-01T23:25:47.084Z

Metrics

LOC: 63 Complexity: 13 Params: 3 Coverage: 100.0% (29/29 lines, 24x executed)

Signature

generate( actions: CapturedAction[], options?: E2EGenerateOptions, ): : string

Architecture violations

View all

  • [warning] max-cyclomatic-complexity: 'generate' has cyclomatic complexity 13 (max 10)

Source Code

function generate(
  actions: CapturedAction[],
  options?: E2EGenerateOptions,
): string {
  const opts = options ?? {};
  const testName = opts.testName ?? "fill form";
  const useSmartSelectors = opts.useSmartSelectors !== false;
  const urlLine = opts.pageUrl
    ? `  await page.goto('${escapeString(opts.pageUrl)}');\n\n`
    : "";

  const fillActions = actions.filter(
    (a) => a.actionType !== "click" && a.actionType !== "submit",
  );
  const submitActions = actions.filter(
    (a) => a.actionType === "click" || a.actionType === "submit",
  );

  const fillLines = fillActions.map((a) => actionLine(a, useSmartSelectors));
  const submitLines = submitActions.map((a) =>
    actionLine(a, useSmartSelectors),
  );

  const assertionLines =
    opts.includeAssertions && opts.assertions?.length
      ? ["\n  // Assertions", ...opts.assertions.map(assertionLine)]
      : [];

  const parts = [
    `import { test, expect } from '@playwright/test';`,
    ``,
    `test('${escapeString(testName)}', async ({ page }) => {`,
    urlLine + fillLines.join("\n"),
  ];

  if (submitLines.length > 0) {
    parts.push("");
    parts.push("  // Submit");
    parts.push(submitLines.join("\n"));
  }

  if (assertionLines.length > 0) {
    parts.push(assertionLines.join("\n"));
  }

  parts.push(`});`);

  // Negative test
  if (opts.includeNegativeTest) {
    const negativeTest = generateNegativeTest(actions, opts, useSmartSelectors);
    if (negativeTest) parts.push(negativeTest);
  }

  // POM
  if (opts.includePOM) {
    parts.push("");
    parts.push("// --- Page Object Model ---");
    parts.push(generatePOM(actions, useSmartSelectors));
  }

  parts.push("");
  return parts.join("\n");
}

Dependencies (Outgoing)

graph LR generate["generate"] escapeString["escapeString"] actionLine["actionLine"] generateNegativeTest["generateNegativeTest"] generatePOM["generatePOM"] generate -->|calls| escapeString generate -->|calls| actionLine generate -->|calls| generateNegativeTest generate -->|calls| generatePOM style generate fill:#dbeafe,stroke:#2563eb,stroke-width:2px click generate "a1352a91ca2859ed.html" click escapeString "5c2f25e3b4548c2d.html" click actionLine "1971834c4f9bc9c3.html" click generateNegativeTest "764ef404a760ebd4.html" click generatePOM "7423c874e7c3dfa3.html"
TargetType
escapeString calls
actionLine calls
generateNegativeTest calls
generatePOM calls

Impact (Incoming)

graph LR generate["generate"] generateWithTensorFlow["generateWithTensorFlow"] OrchestratorCallbacks["OrchestratorCallbacks"] handleRuleButtonClick["handleRuleButtonClick"] setNativeValue["setNativeValue"] generateDateForField["generateDateForField"] makeField["makeField"] generateWithTensorFlow -->|uses| generate OrchestratorCallbacks -->|uses| generate handleRuleButtonClick -->|uses| generate setNativeValue -->|uses| generate generateDateForField -->|uses| generate makeField -->|uses| generate style generate fill:#dbeafe,stroke:#2563eb,stroke-width:2px click generate "a1352a91ca2859ed.html" click generateWithTensorFlow "49e69a4b304badea.html" click OrchestratorCallbacks "984a6b93df2ea9af.html" click handleRuleButtonClick "302ac6e6209ebb8e.html" click setNativeValue "334bd99609d7c37c.html" click generateDateForField "a214011e5ced5989.html" click makeField "ae72134e0e8cd3e2.html"