UNPKG

shopify

Version:

A CLI tool to build for the Shopify platform

91 lines (86 loc) 3.89 kB
import { ThemeInitTests } from "./chunk-VRUH5BDH.js"; import { ThemePushTests } from "./chunk-SJXHR42U.js"; import { createDoctorContext } from "./chunk-ITTNM7I4.js"; import { outputInfo, source_default } from "./chunk-E4GUDBAR.js"; import { relativizePath } from "./chunk-EG6MBBEN.js"; import { init_cjs_shims } from "./chunk-PKR7KJ6P.js"; // src/cli/services/doctor-release/theme/runner.ts init_cjs_shims(); // ../cli-kit/dist/public/node/doctor/reporter.js init_cjs_shims(); var log = (message) => outputInfo(message), reporterBasePath; function initReporter(basePath) { reporterBasePath = basePath; } function truncatePaths(text) { if (!reporterBasePath) return text; let absolutePathPattern = /\/[^\s,)]+/g; return text.replace(absolutePathPattern, (path) => relativizePath(path, reporterBasePath)); } function reportSuiteStart(suiteName, description) { log(""), log(source_default.bold(source_default.cyan(`Suite: ${suiteName}`))), log(source_default.dim(description)); } function reportTestStart(testName) { log(source_default.bold(source_default.blue(`Running: ${testName}`))); } function reportTestResult(result) { let durationStr = `(${(result.duration / 1e3).toFixed(2)}s)`; if (result.status === "passed") { log(source_default.bold(source_default.green(`PASSED: ${result.name} ${source_default.dim(durationStr)}`))); for (let line of formatAssertions(result.assertions)) log(line); } else if (result.status === "failed") { log(source_default.red(`FAILED: ${result.name} ${source_default.dim(durationStr)}`)); for (let line of formatAssertions(result.assertions)) log(line); result.error && log(source_default.red(` Error: ${truncatePaths(result.error.message)}`)); } else log(source_default.yellow(`SKIPPED: ${result.name}`)); } function reportSummary(results) { let passed = results.filter((result) => result.status === "passed").length, failed = results.filter((result) => result.status === "failed").length, skipped = results.filter((result) => result.status === "skipped").length, total = results.length, totalDuration = results.reduce((sum, result) => sum + result.duration, 0); log(""), log(source_default.bold("\u2500".repeat(40))), failed > 0 ? log(source_default.red(source_default.bold(`Doctor Complete: ${failed}/${total} tests failed`))) : log(source_default.green(source_default.bold(`Doctor Complete: ${passed}/${total} tests passed`))), log(` Passed: ${source_default.green(String(passed))}`), log(` Failed: ${source_default.red(String(failed))}`), skipped > 0 && log(` Skipped: ${source_default.yellow(String(skipped))}`), log(` Total time: ${source_default.dim(`${(totalDuration / 1e3).toFixed(2)}s`)}`); } function formatAssertions(assertions) { return assertions.map((assertion) => { if (assertion.passed) return source_default.green(` [OK] ${assertion.description}`); { let details = ` (expected: ${assertion.expected}, actual: ${assertion.actual})`; return source_default.red(` [FAIL] ${assertion.description}${details}`); } }); } // src/cli/services/doctor-release/theme/runner.ts var themeSuites = [ThemeInitTests, ThemePushTests]; async function runThemeDoctor(options) { let results = [], context = createDoctorContext(options); initReporter(context.workingDirectory); for (let SuiteClass of themeSuites) { let suite = new SuiteClass(), description = SuiteClass.description ?? "Test suite"; reportSuiteStart(SuiteClass.name, description); let suiteResults = await suite.runSuite(context); for (let result of suiteResults) if (reportTestStart(result.name), reportTestResult(result), results.push(result), result.status === "failed") return reportSummary(results), results; } return reportSummary(results), results; } export { runThemeDoctor }; //# sourceMappingURL=chunk-77BDQRQW.js.map