testeranto 0.158.0 → 0.159.0
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/common/src/Init.js +0 -1
- package/dist/common/src/utils/api.js +33 -192
- package/dist/common/tsconfig.common.tsbuildinfo +1 -1
- package/dist/module/src/Init.js +0 -1
- package/dist/module/src/TestPage.js +52 -17
- package/dist/module/src/utils/api.js +33 -192
- package/dist/module/tsconfig.module.tsbuildinfo +1 -1
- package/dist/prebuild/App.js +83 -201
- package/dist/prebuild/init-docs.mjs +0 -1
- package/dist/types/src/utils/api.d.ts +2 -20
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/Init.ts +0 -1
- package/src/TestPage.tsx +67 -17
- package/src/utils/api.ts +40 -193
- package/testeranto/App.js +83 -201
package/testeranto/App.js
CHANGED
|
@@ -31522,198 +31522,38 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
31522
31522
|
// src/utils/api.ts
|
|
31523
31523
|
var fetchTestData = async (projectName, filepath, runTime) => {
|
|
31524
31524
|
const basePath = `reports/${projectName}/${filepath.split(".").slice(0, -1).join(".")}/${runTime}`;
|
|
31525
|
-
|
|
31526
|
-
|
|
31527
|
-
|
|
31528
|
-
|
|
31529
|
-
|
|
31530
|
-
|
|
31531
|
-
|
|
31532
|
-
|
|
31533
|
-
|
|
31534
|
-
|
|
31535
|
-
|
|
31536
|
-
|
|
31537
|
-
|
|
31538
|
-
|
|
31539
|
-
|
|
31540
|
-
name: "Testing the Rectangle class",
|
|
31541
|
-
givens: [
|
|
31542
|
-
{
|
|
31543
|
-
key: "test0",
|
|
31544
|
-
name: "Default",
|
|
31545
|
-
whens: [
|
|
31546
|
-
{
|
|
31547
|
-
name: "setWidth: 4",
|
|
31548
|
-
error: true
|
|
31549
|
-
},
|
|
31550
|
-
{
|
|
31551
|
-
name: "setHeight: 19",
|
|
31552
|
-
error: true
|
|
31553
|
-
}
|
|
31554
|
-
],
|
|
31555
|
-
thens: [
|
|
31556
|
-
{
|
|
31557
|
-
name: "getWidth: 4",
|
|
31558
|
-
error: false
|
|
31559
|
-
},
|
|
31560
|
-
{
|
|
31561
|
-
name: "getHeight: 19",
|
|
31562
|
-
error: false
|
|
31563
|
-
}
|
|
31564
|
-
],
|
|
31565
|
-
error: null,
|
|
31566
|
-
features: [
|
|
31567
|
-
"https://api.github.com/repos/adamwong246/testeranto/issues/8"
|
|
31568
|
-
]
|
|
31569
|
-
},
|
|
31570
|
-
{
|
|
31571
|
-
key: "test1",
|
|
31572
|
-
name: "Default",
|
|
31573
|
-
whens: [
|
|
31574
|
-
{
|
|
31575
|
-
name: "setWidth: 4",
|
|
31576
|
-
error: true
|
|
31577
|
-
},
|
|
31578
|
-
{
|
|
31579
|
-
name: "setHeight: 5",
|
|
31580
|
-
error: true
|
|
31581
|
-
}
|
|
31582
|
-
],
|
|
31583
|
-
thens: [
|
|
31584
|
-
{
|
|
31585
|
-
name: "getWidth: 4",
|
|
31586
|
-
error: false
|
|
31587
|
-
},
|
|
31588
|
-
{
|
|
31589
|
-
name: "getHeight: 5",
|
|
31590
|
-
error: false
|
|
31591
|
-
},
|
|
31592
|
-
{
|
|
31593
|
-
name: "area: 20",
|
|
31594
|
-
error: false
|
|
31595
|
-
},
|
|
31596
|
-
{
|
|
31597
|
-
name: "AreaPlusCircumference: 38",
|
|
31598
|
-
error: false
|
|
31599
|
-
}
|
|
31600
|
-
],
|
|
31601
|
-
error: null,
|
|
31602
|
-
features: ["Rectangles have width and height."]
|
|
31603
|
-
},
|
|
31604
|
-
{
|
|
31605
|
-
key: "test2",
|
|
31606
|
-
name: "Default",
|
|
31607
|
-
whens: [
|
|
31608
|
-
{
|
|
31609
|
-
name: "setHeight: 4",
|
|
31610
|
-
error: true
|
|
31611
|
-
},
|
|
31612
|
-
{
|
|
31613
|
-
name: "setWidth: 33",
|
|
31614
|
-
error: true
|
|
31615
|
-
}
|
|
31616
|
-
],
|
|
31617
|
-
thens: [
|
|
31618
|
-
{
|
|
31619
|
-
name: "area: 132",
|
|
31620
|
-
error: false
|
|
31621
|
-
}
|
|
31622
|
-
],
|
|
31623
|
-
error: null,
|
|
31624
|
-
features: ["Rectangles have area"]
|
|
31625
|
-
},
|
|
31626
|
-
{
|
|
31627
|
-
key: "test2_1",
|
|
31628
|
-
name: "Default",
|
|
31629
|
-
whens: [],
|
|
31630
|
-
thens: [
|
|
31631
|
-
{
|
|
31632
|
-
name: "getWidth: 2",
|
|
31633
|
-
error: false
|
|
31634
|
-
},
|
|
31635
|
-
{
|
|
31636
|
-
name: "getHeight: 2",
|
|
31637
|
-
error: false
|
|
31638
|
-
}
|
|
31639
|
-
],
|
|
31640
|
-
error: null,
|
|
31641
|
-
features: ["Rectangles have default size"]
|
|
31642
|
-
},
|
|
31643
|
-
{
|
|
31644
|
-
key: "test3",
|
|
31645
|
-
name: "Default",
|
|
31646
|
-
whens: [
|
|
31647
|
-
{
|
|
31648
|
-
name: "setHeight: 5",
|
|
31649
|
-
error: true
|
|
31650
|
-
},
|
|
31651
|
-
{
|
|
31652
|
-
name: "setWidth: 5",
|
|
31653
|
-
error: true
|
|
31654
|
-
}
|
|
31655
|
-
],
|
|
31656
|
-
thens: [
|
|
31657
|
-
{
|
|
31658
|
-
name: "area: 25",
|
|
31659
|
-
error: false
|
|
31660
|
-
}
|
|
31661
|
-
],
|
|
31662
|
-
error: null,
|
|
31663
|
-
features: [
|
|
31664
|
-
"file:///Users/adam/Code/testeranto-starter/src/Rectangle/README.md"
|
|
31665
|
-
]
|
|
31666
|
-
},
|
|
31667
|
-
{
|
|
31668
|
-
key: "test4",
|
|
31669
|
-
name: "Default",
|
|
31670
|
-
whens: [
|
|
31671
|
-
{
|
|
31672
|
-
name: "setHeight: 6",
|
|
31673
|
-
error: true
|
|
31674
|
-
},
|
|
31675
|
-
{
|
|
31676
|
-
name: "setWidth: 6",
|
|
31677
|
-
error: true
|
|
31678
|
-
}
|
|
31679
|
-
],
|
|
31680
|
-
thens: [
|
|
31681
|
-
{
|
|
31682
|
-
name: "area: 36",
|
|
31683
|
-
error: false
|
|
31684
|
-
}
|
|
31685
|
-
],
|
|
31686
|
-
error: null,
|
|
31687
|
-
features: ["Rectangles have area"]
|
|
31688
|
-
},
|
|
31689
|
-
{
|
|
31690
|
-
key: "test5",
|
|
31691
|
-
name: "Default",
|
|
31692
|
-
whens: [],
|
|
31693
|
-
thens: [
|
|
31694
|
-
{
|
|
31695
|
-
name: "getWidth: 2",
|
|
31696
|
-
error: false
|
|
31697
|
-
},
|
|
31698
|
-
{
|
|
31699
|
-
name: "getHeight: 2",
|
|
31700
|
-
error: false
|
|
31701
|
-
}
|
|
31702
|
-
],
|
|
31703
|
-
error: null,
|
|
31704
|
-
features: ["Rectangles have default size, again"]
|
|
31525
|
+
try {
|
|
31526
|
+
const [testRes, logsRes, typeRes, lintRes] = await Promise.all([
|
|
31527
|
+
fetch(`${basePath}/tests.json`),
|
|
31528
|
+
fetch(`${basePath}/logs.txt`),
|
|
31529
|
+
fetch(`${basePath}/type_errors.txt`),
|
|
31530
|
+
fetch(`${basePath}/lint_errors.txt`)
|
|
31531
|
+
]);
|
|
31532
|
+
if (!testRes.ok) {
|
|
31533
|
+
return {
|
|
31534
|
+
testData: null,
|
|
31535
|
+
logs: await logsRes.text(),
|
|
31536
|
+
typeErrors: await typeRes.text(),
|
|
31537
|
+
lintErrors: await lintRes.text(),
|
|
31538
|
+
error: "Tests did not complete successfully. Please check the build and runtime logs for errors."
|
|
31539
|
+
};
|
|
31705
31540
|
}
|
|
31706
|
-
|
|
31707
|
-
|
|
31708
|
-
|
|
31709
|
-
|
|
31710
|
-
|
|
31711
|
-
|
|
31712
|
-
|
|
31713
|
-
|
|
31714
|
-
|
|
31715
|
-
|
|
31716
|
-
|
|
31541
|
+
return {
|
|
31542
|
+
testData: await testRes.json(),
|
|
31543
|
+
logs: await logsRes.text(),
|
|
31544
|
+
typeErrors: await typeRes.text(),
|
|
31545
|
+
lintErrors: await lintRes.text(),
|
|
31546
|
+
error: null
|
|
31547
|
+
};
|
|
31548
|
+
} catch (err) {
|
|
31549
|
+
return {
|
|
31550
|
+
testData: null,
|
|
31551
|
+
logs: "",
|
|
31552
|
+
typeErrors: "",
|
|
31553
|
+
lintErrors: "",
|
|
31554
|
+
error: `Failed to load test data: ${err instanceof Error ? err.message : String(err)}`
|
|
31555
|
+
};
|
|
31556
|
+
}
|
|
31717
31557
|
};
|
|
31718
31558
|
|
|
31719
31559
|
// src/TestPage.tsx
|
|
@@ -31736,6 +31576,13 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
31736
31576
|
const [lintErrors, setLintErrors] = (0, import_react54.useState)("");
|
|
31737
31577
|
const [loading, setLoading] = (0, import_react54.useState)(true);
|
|
31738
31578
|
const [error, setError] = (0, import_react54.useState)(null);
|
|
31579
|
+
const [testsExist, setTestsExist] = (0, import_react54.useState)(true);
|
|
31580
|
+
const [errorCounts, setErrorCounts] = (0, import_react54.useState)({
|
|
31581
|
+
typeErrors: 0,
|
|
31582
|
+
staticErrors: 0,
|
|
31583
|
+
runTimeErrors: 0
|
|
31584
|
+
});
|
|
31585
|
+
const [summary, setSummary] = (0, import_react54.useState)(null);
|
|
31739
31586
|
const { projectName, "*": splat } = useParams();
|
|
31740
31587
|
const pathParts = splat ? splat.split("/") : [];
|
|
31741
31588
|
const runtime = pathParts.pop() || "";
|
|
@@ -31747,13 +31594,33 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
31747
31594
|
setTestName(testPath);
|
|
31748
31595
|
const fetchData = async () => {
|
|
31749
31596
|
try {
|
|
31750
|
-
const
|
|
31751
|
-
setTestData(
|
|
31752
|
-
|
|
31753
|
-
|
|
31754
|
-
|
|
31597
|
+
const testResponse = await fetchTestData(projectName, testPath, runtime);
|
|
31598
|
+
setTestData(testResponse.testData);
|
|
31599
|
+
setTestsExist(!!testResponse.testData);
|
|
31600
|
+
setLogs(testResponse.logs);
|
|
31601
|
+
setTypeErrors(testResponse.typeErrors);
|
|
31602
|
+
setLintErrors(testResponse.lintErrors);
|
|
31603
|
+
try {
|
|
31604
|
+
const summaryResponse = await fetch(`reports/${projectName}/summary.json`);
|
|
31605
|
+
if (!summaryResponse.ok)
|
|
31606
|
+
throw new Error("Failed to fetch summary");
|
|
31607
|
+
const allSummaries = await summaryResponse.json();
|
|
31608
|
+
const testSummary = allSummaries[testPath];
|
|
31609
|
+
console.log("testSummary", testSummary);
|
|
31610
|
+
if (testSummary) {
|
|
31611
|
+
setSummary(testSummary);
|
|
31612
|
+
setErrorCounts({
|
|
31613
|
+
typeErrors: testSummary.typeErrors || 0,
|
|
31614
|
+
staticErrors: testSummary.staticErrors || 0,
|
|
31615
|
+
runTimeErrors: testSummary.runTimeErrors || 0
|
|
31616
|
+
});
|
|
31617
|
+
}
|
|
31618
|
+
} catch (err) {
|
|
31619
|
+
console.error("Failed to load summary:", err);
|
|
31620
|
+
}
|
|
31755
31621
|
} catch (err) {
|
|
31756
31622
|
setError(err instanceof Error ? err.message : "Unknown error");
|
|
31623
|
+
setTestsExist(false);
|
|
31757
31624
|
} finally {
|
|
31758
31625
|
setLoading(false);
|
|
31759
31626
|
}
|
|
@@ -31772,22 +31639,22 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
31772
31639
|
navItems: [
|
|
31773
31640
|
{
|
|
31774
31641
|
to: `#results`,
|
|
31775
|
-
label: testData?.givens.some((g) => g.whens.some((w) => w.error) || g.thens.some((t) => t.error)) ? "\u274C BDD" : "\u2705 BDD",
|
|
31642
|
+
label: !testsExist ? "\u274C BDD" : testData?.givens.some((g) => g.whens.some((w) => w.error) || g.thens.some((t) => t.error)) ? "\u274C BDD" : "\u2705 BDD",
|
|
31776
31643
|
active: route === "results"
|
|
31777
31644
|
},
|
|
31778
31645
|
{
|
|
31779
31646
|
to: `#logs`,
|
|
31780
|
-
label:
|
|
31647
|
+
label: `Runtime logs`,
|
|
31781
31648
|
active: route === "logs"
|
|
31782
31649
|
},
|
|
31783
31650
|
{
|
|
31784
31651
|
to: `#types`,
|
|
31785
|
-
label: typeErrors ?
|
|
31652
|
+
label: errorCounts.typeErrors > 0 ? `tsc (\u274C * ${errorCounts.typeErrors})` : "tsc \u2705 ",
|
|
31786
31653
|
active: route === "types"
|
|
31787
31654
|
},
|
|
31788
31655
|
{
|
|
31789
31656
|
to: `#lint`,
|
|
31790
|
-
label:
|
|
31657
|
+
label: errorCounts.staticErrors > 0 ? `eslint (\u274C *${errorCounts.staticErrors}) ` : "eslint \u2705",
|
|
31791
31658
|
active: route === "lint"
|
|
31792
31659
|
}
|
|
31793
31660
|
],
|
|
@@ -31806,7 +31673,22 @@ Please change the parent <Route path="${parentPath}"> to <Route path="${parentPa
|
|
|
31806
31673
|
setRoute(k);
|
|
31807
31674
|
navigate(`#${k}`, { replace: true });
|
|
31808
31675
|
}
|
|
31809
|
-
} }, /* @__PURE__ */ import_react54.default.createElement(Tab_default.Content, { className: "mt-3" }, /* @__PURE__ */ import_react54.default.createElement(Tab_default.Pane, { eventKey: "results" },
|
|
31676
|
+
} }, /* @__PURE__ */ import_react54.default.createElement(Tab_default.Content, { className: "mt-3" }, /* @__PURE__ */ import_react54.default.createElement(Tab_default.Pane, { eventKey: "results" }, !testsExist ? /* @__PURE__ */ import_react54.default.createElement(Alert_default, { variant: "danger", className: "mt-3" }, /* @__PURE__ */ import_react54.default.createElement("h4", null, "Tests did not run to completion"), /* @__PURE__ */ import_react54.default.createElement("p", null, "The test results file (tests.json) was not found or could not be loaded."), /* @__PURE__ */ import_react54.default.createElement("div", { className: "mt-3" }, /* @__PURE__ */ import_react54.default.createElement(
|
|
31677
|
+
Button_default2,
|
|
31678
|
+
{
|
|
31679
|
+
variant: "outline-light",
|
|
31680
|
+
onClick: () => setRoute("logs"),
|
|
31681
|
+
className: "me-2"
|
|
31682
|
+
},
|
|
31683
|
+
"View Runtime Logs"
|
|
31684
|
+
), /* @__PURE__ */ import_react54.default.createElement(
|
|
31685
|
+
Button_default2,
|
|
31686
|
+
{
|
|
31687
|
+
variant: "outline-light",
|
|
31688
|
+
onClick: () => navigate(`/projects/${projectName}#${runtime}`)
|
|
31689
|
+
},
|
|
31690
|
+
"View Build Logs"
|
|
31691
|
+
))) : testData ? /* @__PURE__ */ import_react54.default.createElement("div", { className: "test-results" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "mb-3" }), testData.givens.map((given, i) => /* @__PURE__ */ import_react54.default.createElement("div", { key: i, className: "mb-4 card" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "card-header bg-primary text-white" }, /* @__PURE__ */ import_react54.default.createElement("h4", null, "Given: ", given.name)), /* @__PURE__ */ import_react54.default.createElement("div", { className: "card-body" }, given.whens.map((when, j) => /* @__PURE__ */ import_react54.default.createElement("div", { key: `w-${j}`, className: `p-3 mb-2 ${when.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react54.default.createElement("strong", null, "When:"), " ", when.name, when.error && /* @__PURE__ */ import_react54.default.createElement("pre", { className: "mt-2" }, when.error))), given.thens.map((then, k) => /* @__PURE__ */ import_react54.default.createElement("div", { key: `t-${k}`, className: `p-3 mb-2 ${then.error ? "bg-danger text-white" : "bg-success text-white"}` }, /* @__PURE__ */ import_react54.default.createElement("strong", null, "Then:"), " ", then.name, then.error && /* @__PURE__ */ import_react54.default.createElement("pre", { className: "mt-2" }, then.error))))))) : /* @__PURE__ */ import_react54.default.createElement(Alert_default, { variant: "warning" }, "No test results found")), /* @__PURE__ */ import_react54.default.createElement(Tab_default.Pane, { eventKey: "logs" }, logs ? /* @__PURE__ */ import_react54.default.createElement("pre", { className: "bg-dark text-white p-3" }, logs) : /* @__PURE__ */ import_react54.default.createElement(Alert_default, { variant: "warning" }, "No runtime logs found")), /* @__PURE__ */ import_react54.default.createElement(Tab_default.Pane, { eventKey: "types" }, typeErrors ? /* @__PURE__ */ import_react54.default.createElement("pre", { className: "bg-dark text-white p-3" }, typeErrors) : /* @__PURE__ */ import_react54.default.createElement(Alert_default, { variant: "warning" }, "No type errors found")), /* @__PURE__ */ import_react54.default.createElement(Tab_default.Pane, { eventKey: "lint" }, lintErrors ? /* @__PURE__ */ import_react54.default.createElement("pre", { className: "bg-dark text-white p-3" }, lintErrors) : /* @__PURE__ */ import_react54.default.createElement(Alert_default, { variant: "warning" }, "No lint errors found")), /* @__PURE__ */ import_react54.default.createElement(Tab_default.Pane, { eventKey: "coverage" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "coverage-report" }, /* @__PURE__ */ import_react54.default.createElement(Alert_default, { variant: "info" }, "Coverage reports coming soon!"), /* @__PURE__ */ import_react54.default.createElement("div", { className: "coverage-stats" }, /* @__PURE__ */ import_react54.default.createElement("div", { className: "stat-card bg-success text-white" }, /* @__PURE__ */ import_react54.default.createElement("h4", null, "85%"), /* @__PURE__ */ import_react54.default.createElement("p", null, "Lines Covered")), /* @__PURE__ */ import_react54.default.createElement("div", { className: "stat-card bg-warning text-dark" }, /* @__PURE__ */ import_react54.default.createElement("h4", null, "72%"), /* @__PURE__ */ import_react54.default.createElement("p", null, "Branches Covered")), /* @__PURE__ */ import_react54.default.createElement("div", { className: "stat-card bg-info text-white" }, /* @__PURE__ */ import_react54.default.createElement("h4", null, "91%"), /* @__PURE__ */ import_react54.default.createElement("p", null, "Functions Covered"))))))));
|
|
31810
31692
|
};
|
|
31811
31693
|
|
|
31812
31694
|
// src/App.tsx
|