UNPKG

testeranto

Version:

the AI powered BDD test framework for typescript projects

129 lines (128 loc) 10.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.renderTestResults = exports.getLanguage = void 0; const react_1 = __importDefault(require("react")); // Determine language from file extension const getLanguage = (path) => { var _a; const ext = (_a = path.split(".").pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase(); switch (ext) { case "ts": return "typescript"; case "tsx": return "typescript"; case "js": return "javascript"; case "json": return "json"; case "md": return "markdown"; case "py": return "python"; default: return "plaintext"; } }; exports.getLanguage = getLanguage; const statusToClassName = (status) => { if (status === undefined) return "bg-secondary"; if (status === false) return "bg-danger"; if (status === true) return "bg-success"; throw `idk status: ${status}`; }; const renderTestResults = (testData, buildErrors, projectName, testName, runtime) => { return (react_1.default.createElement("div", { className: "test-results" }, testData.givens.map((given, i) => (react_1.default.createElement("div", { key: i, className: "mb-4 card " }, react_1.default.createElement("div", { className: `card-header ${statusToClassName(given.status)} text-white` }, react_1.default.createElement("div", { className: "d-flex justify-content-between align-items-center" }, react_1.default.createElement("div", null, react_1.default.createElement("h4", null, "Given: ", given.name), given.features && given.features.length > 0 && (react_1.default.createElement("div", { className: "mt-1" }, react_1.default.createElement("small", null, "Features:"), react_1.default.createElement("ul", { className: "list-unstyled" }, given.features.map((feature, fi) => (react_1.default.createElement("li", { key: fi }, feature.startsWith("http") ? (react_1.default.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer", className: "text-white" }, new URL(feature).hostname)) : (react_1.default.createElement("span", { className: "text-white" }, feature))))))))), given.artifacts && given.artifacts.length > 0 && (react_1.default.createElement("div", { className: "dropdown" }, react_1.default.createElement("button", { className: "btn btn-sm btn-light dropdown-toggle", type: "button", "data-bs-toggle": "dropdown" }, "Artifacts (", given.artifacts.length, ")"), react_1.default.createElement("ul", { className: "dropdown-menu dropdown-menu-end" }, given.artifacts.map((artifact, ai) => (react_1.default.createElement("li", { key: ai }, react_1.default.createElement("a", { className: "dropdown-item", href: `reports/${projectName}/${testName .split(".") .slice(0, -1) .join(".")}/${runtime}/${artifact}`, target: "_blank", rel: "noopener noreferrer" }, artifact.split("/").pop()))))))))), react_1.default.createElement("div", { className: "card-body" }, given.whens.map((when, j) => (react_1.default.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 text-white ${statusToClassName(when.status)}` }, react_1.default.createElement("div", { className: "d-flex justify-content-between align-items-start" }, react_1.default.createElement("div", null, react_1.default.createElement("div", null, react_1.default.createElement("strong", null, "When:"), " ", when.name, when.features && when.features.length > 0 && (react_1.default.createElement("div", { className: "mt-2" }, react_1.default.createElement("small", null, "Features:"), react_1.default.createElement("ul", { className: "list-unstyled" }, when.features.map((feature, fi) => (react_1.default.createElement("li", { key: fi }, feature.startsWith("http") ? (react_1.default.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname)) : (feature))))))), when.error && react_1.default.createElement("pre", { className: "mt-2" }, when.error))), when.artifacts && when.artifacts.length > 0 && (react_1.default.createElement("div", { className: "ms-3" }, react_1.default.createElement("strong", null, "Artifacts:"), react_1.default.createElement("ul", { className: "list-unstyled" }, when.artifacts.map((artifact, ai) => (react_1.default.createElement("li", { key: ai }, react_1.default.createElement("a", { href: `reports/${projectName}/${testName .split(".") .slice(0, -1) .join(".")}/${runtime}/${artifact}`, target: "_blank", className: "text-white", rel: "noopener noreferrer" }, artifact.split("/").pop()))))))))))), given.thens.map((then, k) => (react_1.default.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 text-white ${statusToClassName(then.status)}` }, react_1.default.createElement("div", { className: "d-flex justify-content-between align-items-start" }, react_1.default.createElement("div", null, react_1.default.createElement("div", null, react_1.default.createElement("strong", null, "Then:"), " ", then.name, then.features && then.features.length > 0 && (react_1.default.createElement("div", { className: "mt-2" }, react_1.default.createElement("small", null, "Features:"), react_1.default.createElement("ul", { className: "list-unstyled" }, then.features.map((feature, fi) => (react_1.default.createElement("li", { key: fi }, feature.startsWith("http") ? (react_1.default.createElement("a", { href: feature, target: "_blank", rel: "noopener noreferrer" }, new URL(feature).hostname)) : (feature))))))), then.error && react_1.default.createElement("pre", { className: "mt-2" }, then.error))), then.artifacts && then.artifacts.length > 0 && (react_1.default.createElement("div", { className: "ms-3" }, react_1.default.createElement("strong", null, "Artifacts:"), react_1.default.createElement("ul", { className: "list-unstyled" }, then.artifacts.map((artifact, ai) => (react_1.default.createElement("li", { key: ai }, react_1.default.createElement("a", { href: `reports/${projectName}/${testName .split(".") .slice(0, -1) .join(".")}/${runtime}/${artifact}`, target: "_blank", className: "text-white", rel: "noopener noreferrer" }, artifact.split("/").pop()))))))))))))))), (buildErrors.errors.length > 0 || buildErrors.warnings.length > 0) && (react_1.default.createElement("div", { className: "mb-4 card border-danger" }, react_1.default.createElement("div", { className: "card-header bg-danger text-white" }, react_1.default.createElement("h4", null, "Build Errors and Warnings")), react_1.default.createElement("div", { className: "card-body" }, buildErrors.errors.length > 0 && (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("h5", null, "Errors"), react_1.default.createElement("ul", null, buildErrors.errors.map((error, idx) => (react_1.default.createElement("li", { key: `build-error-${idx}` }, react_1.default.createElement("strong", null, error.text), error.location && (react_1.default.createElement("div", null, "File: ", error.location.file, " Line:", " ", error.location.line, " Column: ", error.location.column)))))))), buildErrors.warnings.length > 0 && (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("h5", null, "Warnings"), react_1.default.createElement("ul", null, buildErrors.warnings.map((warning, idx) => (react_1.default.createElement("li", { key: `build-warning-${idx}` }, react_1.default.createElement("strong", null, warning.text), warning.location && (react_1.default.createElement("div", null, "File: ", warning.location.file, " Line:", " ", warning.location.line, " Column:", " ", warning.location.column))))))))))))); }; exports.renderTestResults = renderTestResults;