上传真实浏览器仿真推进
结论:新增 LinuxCNC WASM 驱动的真实浏览器仿真页面,接入 browser smoke、release gate、SDK 与项目交付文档,并完成当前推进批次的验收记录。
This commit is contained in:
@@ -22,6 +22,22 @@
|
||||
<p data-external-release-artifact-status>waiting</p>
|
||||
<dl data-external-release-artifact-rows></dl>
|
||||
</section>
|
||||
<section data-external-release-artifact-json-workflow>
|
||||
<p data-external-release-artifact-json-workflow-status>waiting</p>
|
||||
<dl data-external-release-artifact-json-workflow-rows></dl>
|
||||
</section>
|
||||
<section data-external-release-artifact-url-workflow>
|
||||
<p data-external-release-artifact-url-workflow-status>waiting</p>
|
||||
<dl data-external-release-artifact-url-workflow-rows></dl>
|
||||
</section>
|
||||
<section data-external-release-artifact-gate-execution-summary>
|
||||
<p data-external-release-artifact-gate-execution-summary-status>waiting</p>
|
||||
<dl data-external-release-artifact-gate-execution-summary-rows></dl>
|
||||
</section>
|
||||
<section data-external-release-artifact-validation-action-plan>
|
||||
<p data-external-release-artifact-validation-action-plan-status>waiting</p>
|
||||
<dl data-external-release-artifact-validation-action-plan-rows></dl>
|
||||
</section>
|
||||
<script type="module">
|
||||
function assertEqual(actual, expected, label) {
|
||||
if (actual !== expected) {
|
||||
@@ -115,9 +131,36 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
!launchApi?.getWorkflowOverviewContract ||
|
||||
!launchApi?.getWorkflowOverviewReadiness ||
|
||||
!launchApi?.mountWorkflowOverviewEmbedding ||
|
||||
!launchApi?.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness ||
|
||||
!launchApi?.renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState ||
|
||||
!launchApi?.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState ||
|
||||
!launchApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness ||
|
||||
!launchApi?.renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState ||
|
||||
!launchApi?.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness ||
|
||||
!launchApi?.renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState ||
|
||||
!launchApi?.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract ||
|
||||
!launchApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness ||
|
||||
!launchApi?.renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState ||
|
||||
!launchApi?.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState ||
|
||||
!launchApi?.getWorkflowOverviewEmbeddingReport ||
|
||||
!launchApi?.getWorkflowOverviewEmbeddingDisplayViewModel ||
|
||||
!launchApi?.getWorkflowOverviewEmbeddingRenderState ||
|
||||
@@ -320,6 +363,77 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
.then((response) => response.text());
|
||||
const workflowOverviewReleaseArtifactValidation = workflowOverviewApi
|
||||
.validateWorkflowOverviewReleaseReadinessArtifactJson(workflowOverviewReleaseArtifactJson);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflow = workflowOverviewApi
|
||||
.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: workflowOverviewReleaseArtifactJson,
|
||||
});
|
||||
const launchReleaseArtifactJsonWorkflow = launchApi
|
||||
.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: workflowOverviewReleaseArtifactJson,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowSummary = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactJsonWorkflow,
|
||||
);
|
||||
const launchReleaseArtifactJsonWorkflowSummary = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(
|
||||
launchReleaseArtifactJsonWorkflow,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowActionPlan = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan(
|
||||
workflowOverviewReleaseArtifactJsonWorkflow,
|
||||
);
|
||||
const launchReleaseArtifactJsonWorkflowActionPlan = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan(
|
||||
launchReleaseArtifactJsonWorkflow,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowRenderState = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowSummary,
|
||||
);
|
||||
const launchReleaseArtifactJsonWorkflowRenderState = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState(
|
||||
launchReleaseArtifactJsonWorkflowSummary,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowDomContract = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract({
|
||||
rowDatasetPrefix: "externalReleaseArtifactJsonWorkflow",
|
||||
selectors: {
|
||||
mount: "[data-external-release-artifact-json-workflow]",
|
||||
status: "[data-external-release-artifact-json-workflow-status]",
|
||||
rows: "[data-external-release-artifact-json-workflow-rows]",
|
||||
},
|
||||
});
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowDomReadiness = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowRenderResult = workflowOverviewApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderState,
|
||||
{
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
},
|
||||
);
|
||||
const workflowOverviewReleaseArtifactJsonWorkflowMountResult = workflowOverviewApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState({
|
||||
renderState: workflowOverviewReleaseArtifactJsonWorkflowRenderState,
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactJsonWorkflowDomReadiness = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactJsonWorkflowMountResult = launchApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState({
|
||||
renderState: launchReleaseArtifactJsonWorkflowRenderState,
|
||||
contract: workflowOverviewReleaseArtifactJsonWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactSummary = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
@@ -328,6 +442,106 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactValidationActionPlan = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const launchReleaseArtifactValidationActionPlan = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanRenderState = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState(
|
||||
workflowOverviewReleaseArtifactValidationActionPlan,
|
||||
);
|
||||
const launchReleaseArtifactValidationActionPlanRenderState = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState(
|
||||
launchReleaseArtifactValidationActionPlan,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanDomContract = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract({
|
||||
rowDatasetPrefix: "externalReleaseArtifactValidationActionPlan",
|
||||
selectors: {
|
||||
mount: "[data-external-release-artifact-validation-action-plan]",
|
||||
status: "[data-external-release-artifact-validation-action-plan-status]",
|
||||
rows: "[data-external-release-artifact-validation-action-plan-rows]",
|
||||
},
|
||||
});
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanDomReadiness = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactValidationActionPlanDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanRenderResult = workflowOverviewApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanRenderState,
|
||||
{
|
||||
contract: workflowOverviewReleaseArtifactValidationActionPlanDomContract,
|
||||
documentRef: document,
|
||||
},
|
||||
);
|
||||
const workflowOverviewReleaseArtifactValidationActionPlanMountResult = workflowOverviewApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState({
|
||||
renderState: workflowOverviewReleaseArtifactValidationActionPlanRenderState,
|
||||
contract: workflowOverviewReleaseArtifactValidationActionPlanDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactValidationActionPlanMountResult = launchApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState({
|
||||
renderState: launchReleaseArtifactValidationActionPlanRenderState,
|
||||
contract: workflowOverviewReleaseArtifactValidationActionPlanDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummary = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const launchReleaseArtifactGateExecutionSummary = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactValidation,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryRenderState = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummary,
|
||||
);
|
||||
const launchReleaseArtifactGateExecutionSummaryRenderState = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState(
|
||||
launchReleaseArtifactGateExecutionSummary,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryDomContract = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract({
|
||||
rowDatasetPrefix: "externalReleaseArtifactGateExecutionSummary",
|
||||
selectors: {
|
||||
mount: "[data-external-release-artifact-gate-execution-summary]",
|
||||
status: "[data-external-release-artifact-gate-execution-summary-status]",
|
||||
rows: "[data-external-release-artifact-gate-execution-summary-rows]",
|
||||
},
|
||||
});
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryDomReadiness = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactGateExecutionSummaryDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryRenderResult = workflowOverviewApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryRenderState,
|
||||
{
|
||||
contract: workflowOverviewReleaseArtifactGateExecutionSummaryDomContract,
|
||||
documentRef: document,
|
||||
},
|
||||
);
|
||||
const workflowOverviewReleaseArtifactGateExecutionSummaryMountResult = workflowOverviewApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState({
|
||||
renderState: workflowOverviewReleaseArtifactGateExecutionSummaryRenderState,
|
||||
contract: workflowOverviewReleaseArtifactGateExecutionSummaryDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactGateExecutionSummaryMountResult = launchApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState({
|
||||
renderState: launchReleaseArtifactGateExecutionSummaryRenderState,
|
||||
contract: workflowOverviewReleaseArtifactGateExecutionSummaryDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactDisplay = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(workflowOverviewReleaseArtifactValidation);
|
||||
const workflowOverviewReleaseArtifactRenderState = workflowOverviewApi
|
||||
@@ -381,6 +595,64 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel(
|
||||
launchReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowActionPlan = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan(
|
||||
workflowOverviewReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const launchReleaseArtifactUrlWorkflowActionPlan = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan(
|
||||
launchReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowRenderState = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowSummary,
|
||||
);
|
||||
const launchReleaseArtifactUrlWorkflowRenderState = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState(
|
||||
launchReleaseArtifactUrlWorkflowSummary,
|
||||
);
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowDomContract = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract({
|
||||
rowDatasetPrefix: "externalReleaseArtifactUrlWorkflow",
|
||||
selectors: {
|
||||
mount: "[data-external-release-artifact-url-workflow]",
|
||||
status: "[data-external-release-artifact-url-workflow-status]",
|
||||
rows: "[data-external-release-artifact-url-workflow-rows]",
|
||||
},
|
||||
});
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowDomReadiness = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness({
|
||||
contract: workflowOverviewReleaseArtifactUrlWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowRenderResult = workflowOverviewApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderState,
|
||||
{
|
||||
contract: workflowOverviewReleaseArtifactUrlWorkflowDomContract,
|
||||
documentRef: document,
|
||||
},
|
||||
);
|
||||
const workflowOverviewReleaseArtifactUrlWorkflowMountResult = workflowOverviewApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState({
|
||||
renderState: workflowOverviewReleaseArtifactUrlWorkflowRenderState,
|
||||
contract: workflowOverviewReleaseArtifactUrlWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const launchReleaseArtifactUrlWorkflowMountResult = launchApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState({
|
||||
renderState: launchReleaseArtifactUrlWorkflowRenderState,
|
||||
contract: workflowOverviewReleaseArtifactUrlWorkflowDomContract,
|
||||
documentRef: document,
|
||||
});
|
||||
const workflowOverviewReleaseArtifactUrlGateExecutionSummary = workflowOverviewApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel(
|
||||
workflowOverviewReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const launchReleaseArtifactUrlGateExecutionSummary = launchApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel(
|
||||
launchReleaseArtifactUrlWorkflow,
|
||||
);
|
||||
const workflowOverviewEmbedding = launchApi.mountWorkflowOverviewEmbedding({
|
||||
overviewApi: workflowOverviewApi,
|
||||
});
|
||||
@@ -452,6 +724,86 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
true,
|
||||
"shell workflow overview release artifact validation readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflow.statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"shell workflow overview release artifact JSON workflow",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflow.statusLine,
|
||||
workflowOverviewReleaseArtifactJsonWorkflow.statusLine,
|
||||
"launch release artifact JSON workflow",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowSummary.statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"shell workflow overview release artifact JSON workflow summary",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowSummary.statusLine,
|
||||
workflowOverviewReleaseArtifactJsonWorkflowSummary.statusLine,
|
||||
"launch release artifact JSON workflow summary",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowActionPlan.shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
"shell workflow overview release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowActionPlan.shellScript,
|
||||
workflowOverviewReleaseArtifactJsonWorkflowActionPlan.shellScript,
|
||||
"launch release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-json-workflow",
|
||||
"shell workflow overview release artifact JSON workflow render state",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowRenderState.statusLine,
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderState.statusLine,
|
||||
"launch release artifact JSON workflow render state",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowDomReadiness.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact JSON workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowDomReadiness.ready,
|
||||
true,
|
||||
"launch release artifact JSON workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderResult.rowCount,
|
||||
5,
|
||||
"shell workflow overview release artifact JSON workflow render rows",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowRenderResult.rowIds.includes("gate-execution-summary"),
|
||||
true,
|
||||
"shell workflow overview release artifact JSON workflow gate row",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflowMountResult.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact JSON workflow mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactJsonWorkflowMountResult.ready,
|
||||
true,
|
||||
"launch release artifact JSON workflow mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-json-workflow-status]").textContent,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"shell workflow overview release artifact JSON workflow rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactJsonWorkflow.actionPlan.nextCommand,
|
||||
null,
|
||||
"shell workflow overview release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactSummary.statusLine,
|
||||
"Ready: Artifact evidence complete",
|
||||
@@ -462,6 +814,96 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
workflowOverviewReleaseArtifactSummary.statusLine,
|
||||
"launch release artifact validation summary",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlan.shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
"shell workflow overview release artifact validation action plan",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactValidationActionPlan.shellScript,
|
||||
workflowOverviewReleaseArtifactValidationActionPlan.shellScript,
|
||||
"launch release artifact validation action plan",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanRenderState.statusLine,
|
||||
"Ready: Artifact validation action plan complete",
|
||||
"shell workflow overview release artifact validation action-plan render state",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactValidationActionPlanRenderState.statusLine,
|
||||
workflowOverviewReleaseArtifactValidationActionPlanRenderState.statusLine,
|
||||
"launch release artifact validation action-plan render state",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanDomReadiness.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact validation action-plan DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanRenderResult.rowIds.includes("next-command"),
|
||||
true,
|
||||
"shell workflow overview release artifact validation action-plan next-command row",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactValidationActionPlanMountResult.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact validation action-plan mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactValidationActionPlanMountResult.ready,
|
||||
true,
|
||||
"launch release artifact validation action-plan mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-validation-action-plan-status]").textContent,
|
||||
"Ready: Artifact validation action plan complete",
|
||||
"shell workflow overview release artifact validation action-plan rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummary.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"shell workflow overview release artifact gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactGateExecutionSummary.statusLine,
|
||||
workflowOverviewReleaseArtifactGateExecutionSummary.statusLine,
|
||||
"launch release artifact gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryRenderState.rows.length,
|
||||
17,
|
||||
"shell workflow overview release artifact gate execution summary render rows",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactGateExecutionSummaryRenderState.statusLine,
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryRenderState.statusLine,
|
||||
"launch release artifact gate execution summary render-state",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryDomReadiness.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact gate execution summary DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryRenderResult.rowIds.includes("gate-ui-node-smokes"),
|
||||
true,
|
||||
"shell workflow overview release artifact gate execution summary SDK row",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactGateExecutionSummaryMountResult.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact gate execution summary mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactGateExecutionSummaryMountResult.ready,
|
||||
true,
|
||||
"launch release artifact gate execution summary mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-gate-execution-summary-status]").textContent,
|
||||
"Ready: All release gate evidence present",
|
||||
"shell workflow overview release artifact gate execution summary rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactDomReadiness.ready,
|
||||
true,
|
||||
@@ -522,6 +964,66 @@ TOOL_TABLE = browser-shell-tool.tbl
|
||||
workflowOverviewReleaseArtifactUrlWorkflowSummary.statusLine,
|
||||
"launch release artifact URL workflow summary view model",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-url-workflow",
|
||||
"shell workflow overview release artifact URL workflow render-state scope",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactUrlWorkflowRenderState.statusLine,
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderState.statusLine,
|
||||
"launch release artifact URL workflow render-state",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowDomReadiness.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact URL workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderResult.rowCount,
|
||||
8,
|
||||
"shell workflow overview release artifact URL workflow render rows",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
|
||||
true,
|
||||
"shell workflow overview release artifact URL workflow mount row",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowMountResult.ready,
|
||||
true,
|
||||
"shell workflow overview release artifact URL workflow DOM mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactUrlWorkflowMountResult.ready,
|
||||
true,
|
||||
"launch release artifact URL workflow DOM mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-url-workflow-status]").textContent,
|
||||
"Ready: Artifact URL workflow complete",
|
||||
"shell workflow overview release artifact URL workflow rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlWorkflowActionPlan.shellScript,
|
||||
"# Project release readiness artifact URL workflow is already ready.\n",
|
||||
"shell workflow overview release artifact URL workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactUrlWorkflowActionPlan.shellScript,
|
||||
workflowOverviewReleaseArtifactUrlWorkflowActionPlan.shellScript,
|
||||
"launch release artifact URL workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
workflowOverviewReleaseArtifactUrlGateExecutionSummary.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"shell workflow overview release artifact URL gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
launchReleaseArtifactUrlGateExecutionSummary.statusLine,
|
||||
workflowOverviewReleaseArtifactUrlGateExecutionSummary.statusLine,
|
||||
"launch release artifact URL gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
document.querySelector("[data-external-release-artifact-status]").textContent,
|
||||
"Ready: No blocking reasons",
|
||||
|
||||
@@ -35,9 +35,36 @@
|
||||
!workflowApi?.getWorkflowOverviewApiSurfaceInventory ||
|
||||
!workflowApi?.getWorkflowOverviewPersistenceSummary ||
|
||||
!workflowApi?.validateWorkflowOverviewReleaseReadinessArtifactJson ||
|
||||
!workflowApi?.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomContract ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness ||
|
||||
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState ||
|
||||
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState ||
|
||||
!workflowApi?.loadWorkflowOverviewReleaseReadinessArtifactUrl ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomContract ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness ||
|
||||
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState ||
|
||||
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomContract ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness ||
|
||||
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState ||
|
||||
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomContract ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness ||
|
||||
!workflowApi?.renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState ||
|
||||
!workflowApi?.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactRenderState ||
|
||||
!workflowApi?.getWorkflowOverviewReleaseReadinessArtifactDomContract ||
|
||||
@@ -77,8 +104,23 @@
|
||||
const releaseArtifactValidation = workflowApi.validateWorkflowOverviewReleaseReadinessArtifactJson(
|
||||
releaseArtifactJson,
|
||||
);
|
||||
const releaseArtifactJsonWorkflow = workflowApi.runWorkflowOverviewReleaseReadinessArtifactJsonWorkflow({
|
||||
artifactJson: releaseArtifactJson,
|
||||
});
|
||||
const releaseArtifactJsonWorkflowSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowSummaryViewModel(releaseArtifactJsonWorkflow);
|
||||
const releaseArtifactJsonWorkflowActionPlan = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowActionPlan(releaseArtifactJsonWorkflow);
|
||||
const releaseArtifactJsonWorkflowRenderState = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowRenderState(releaseArtifactJsonWorkflowSummary);
|
||||
const releaseArtifactValidationSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationSummaryViewModel(releaseArtifactValidation);
|
||||
const releaseArtifactValidationActionPlan = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlan(releaseArtifactValidation);
|
||||
const releaseArtifactValidationActionPlanRenderState = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanRenderState(
|
||||
releaseArtifactValidationActionPlan,
|
||||
);
|
||||
const releaseArtifactDisplay = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDisplayViewModel(
|
||||
releaseArtifactValidation,
|
||||
);
|
||||
@@ -87,6 +129,8 @@
|
||||
);
|
||||
const releaseArtifactDomContract = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomContract();
|
||||
const releaseArtifactDomReadinessMissing = workflowApi.getWorkflowOverviewReleaseReadinessArtifactDomReadiness();
|
||||
const releaseArtifactJsonWorkflowDomReadinessMissing = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness();
|
||||
const domContract = workflowApi.getWorkflowOverviewDomContract();
|
||||
const domReadiness = workflowApi.getWorkflowOverviewDomReadiness();
|
||||
const renderResult = workflowApi.renderWorkflowOverview();
|
||||
@@ -138,7 +182,7 @@
|
||||
"workflow overview release artifact validation API name",
|
||||
);
|
||||
assertEqual(releaseArtifactValidation.ready, true, "workflow overview release artifact validation readiness");
|
||||
assertEqual(releaseArtifactValidation.gateCount, 11, "workflow overview release artifact validation gates");
|
||||
assertEqual(releaseArtifactValidation.gateCount, 12, "workflow overview release artifact validation gates");
|
||||
assertEqual(
|
||||
releaseArtifactValidationSummary.statusLine,
|
||||
"Ready: Artifact evidence complete",
|
||||
@@ -254,12 +298,102 @@
|
||||
const releaseArtifactMountResult = workflowApi.mountWorkflowOverviewReleaseReadinessArtifactState({
|
||||
renderState: releaseArtifactRenderState,
|
||||
});
|
||||
const releaseArtifactValidationActionPlanNode = workflowDoc.createElement("section");
|
||||
releaseArtifactValidationActionPlanNode.dataset.workflowOverviewReleaseReadinessArtifactValidationActionPlan = "";
|
||||
const releaseArtifactValidationActionPlanStatus = workflowDoc.createElement("p");
|
||||
releaseArtifactValidationActionPlanStatus.dataset.workflowOverviewReleaseReadinessArtifactValidationActionPlanStatus = "";
|
||||
const releaseArtifactValidationActionPlanRows = workflowDoc.createElement("dl");
|
||||
releaseArtifactValidationActionPlanRows.dataset.workflowOverviewReleaseReadinessArtifactValidationActionPlanRows = "";
|
||||
releaseArtifactValidationActionPlanNode.append(
|
||||
releaseArtifactValidationActionPlanStatus,
|
||||
releaseArtifactValidationActionPlanRows,
|
||||
);
|
||||
workflowDoc.body.append(releaseArtifactValidationActionPlanNode);
|
||||
const releaseArtifactValidationActionPlanDomReadinessReady = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactValidationActionPlanDomReadiness();
|
||||
const releaseArtifactValidationActionPlanRenderResult = workflowApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState(
|
||||
releaseArtifactValidationActionPlanRenderState,
|
||||
);
|
||||
const releaseArtifactValidationActionPlanMountResult = workflowApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactValidationActionPlanState({
|
||||
renderState: releaseArtifactValidationActionPlanRenderState,
|
||||
});
|
||||
const releaseArtifactJsonWorkflowNode = workflowDoc.createElement("section");
|
||||
releaseArtifactJsonWorkflowNode.dataset.workflowOverviewReleaseReadinessArtifactJsonWorkflow = "";
|
||||
const releaseArtifactJsonWorkflowStatus = workflowDoc.createElement("p");
|
||||
releaseArtifactJsonWorkflowStatus.dataset.workflowOverviewReleaseReadinessArtifactJsonWorkflowStatus = "";
|
||||
const releaseArtifactJsonWorkflowRows = workflowDoc.createElement("dl");
|
||||
releaseArtifactJsonWorkflowRows.dataset.workflowOverviewReleaseReadinessArtifactJsonWorkflowRows = "";
|
||||
releaseArtifactJsonWorkflowNode.append(releaseArtifactJsonWorkflowStatus, releaseArtifactJsonWorkflowRows);
|
||||
workflowDoc.body.append(releaseArtifactJsonWorkflowNode);
|
||||
const releaseArtifactJsonWorkflowDomReadinessReady = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactJsonWorkflowDomReadiness();
|
||||
const releaseArtifactJsonWorkflowRenderResult = workflowApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState(
|
||||
releaseArtifactJsonWorkflowRenderState,
|
||||
);
|
||||
const releaseArtifactJsonWorkflowMountResult = workflowApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactJsonWorkflowState({
|
||||
renderState: releaseArtifactJsonWorkflowRenderState,
|
||||
});
|
||||
const releaseArtifactUrlWorkflow = await workflowApi.loadWorkflowOverviewReleaseReadinessArtifactUrl({
|
||||
artifactUrl: "../../tests/fixtures/project-release-readiness-ready.json",
|
||||
mount: true,
|
||||
});
|
||||
const releaseArtifactUrlWorkflowSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowSummaryViewModel(releaseArtifactUrlWorkflow);
|
||||
const releaseArtifactUrlWorkflowActionPlan = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowActionPlan(releaseArtifactUrlWorkflow);
|
||||
const releaseArtifactUrlWorkflowRenderState = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowRenderState(releaseArtifactUrlWorkflowSummary);
|
||||
const releaseArtifactUrlWorkflowNode = workflowDoc.createElement("section");
|
||||
releaseArtifactUrlWorkflowNode.dataset.workflowOverviewReleaseReadinessArtifactUrlWorkflow = "";
|
||||
const releaseArtifactUrlWorkflowStatus = workflowDoc.createElement("p");
|
||||
releaseArtifactUrlWorkflowStatus.dataset.workflowOverviewReleaseReadinessArtifactUrlWorkflowStatus = "";
|
||||
const releaseArtifactUrlWorkflowRows = workflowDoc.createElement("dl");
|
||||
releaseArtifactUrlWorkflowRows.dataset.workflowOverviewReleaseReadinessArtifactUrlWorkflowRows = "";
|
||||
releaseArtifactUrlWorkflowNode.append(releaseArtifactUrlWorkflowStatus, releaseArtifactUrlWorkflowRows);
|
||||
workflowDoc.body.append(releaseArtifactUrlWorkflowNode);
|
||||
const releaseArtifactUrlWorkflowDomReadinessReady = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlWorkflowDomReadiness();
|
||||
const releaseArtifactUrlWorkflowRenderResult = workflowApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState(
|
||||
releaseArtifactUrlWorkflowRenderState,
|
||||
);
|
||||
const releaseArtifactUrlWorkflowMountResult = workflowApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactUrlWorkflowState({
|
||||
renderState: releaseArtifactUrlWorkflowRenderState,
|
||||
});
|
||||
const releaseArtifactGateExecutionSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryViewModel(releaseArtifactValidation);
|
||||
const releaseArtifactGateExecutionSummaryRenderState = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryRenderState(
|
||||
releaseArtifactGateExecutionSummary,
|
||||
);
|
||||
const releaseArtifactGateExecutionSummaryNode = workflowDoc.createElement("section");
|
||||
releaseArtifactGateExecutionSummaryNode.dataset.workflowOverviewReleaseReadinessArtifactGateExecutionSummary = "";
|
||||
const releaseArtifactGateExecutionSummaryStatus = workflowDoc.createElement("p");
|
||||
releaseArtifactGateExecutionSummaryStatus.dataset.workflowOverviewReleaseReadinessArtifactGateExecutionSummaryStatus = "";
|
||||
const releaseArtifactGateExecutionSummaryRows = workflowDoc.createElement("dl");
|
||||
releaseArtifactGateExecutionSummaryRows.dataset.workflowOverviewReleaseReadinessArtifactGateExecutionSummaryRows = "";
|
||||
releaseArtifactGateExecutionSummaryNode.append(
|
||||
releaseArtifactGateExecutionSummaryStatus,
|
||||
releaseArtifactGateExecutionSummaryRows,
|
||||
);
|
||||
workflowDoc.body.append(releaseArtifactGateExecutionSummaryNode);
|
||||
const releaseArtifactGateExecutionSummaryDomReadinessReady = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryDomReadiness();
|
||||
const releaseArtifactGateExecutionSummaryRenderResult = workflowApi
|
||||
.renderWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState(
|
||||
releaseArtifactGateExecutionSummaryRenderState,
|
||||
);
|
||||
const releaseArtifactGateExecutionSummaryMountResult = workflowApi
|
||||
.mountWorkflowOverviewReleaseReadinessArtifactGateExecutionSummaryState({
|
||||
renderState: releaseArtifactGateExecutionSummaryRenderState,
|
||||
});
|
||||
const releaseArtifactUrlGateExecutionSummary = workflowApi
|
||||
.getWorkflowOverviewReleaseReadinessArtifactUrlGateExecutionSummaryViewModel(releaseArtifactUrlWorkflow);
|
||||
assertEqual(releaseArtifactDomReadinessReady.ready, true, "workflow overview release artifact DOM readiness");
|
||||
assertEqual(releaseArtifactRenderResult.rendered, true, "workflow overview release artifact render result");
|
||||
assertEqual(releaseArtifactRenderResult.rowCount, 8, "workflow overview release artifact render row count");
|
||||
@@ -275,6 +409,36 @@
|
||||
);
|
||||
assertEqual(releaseArtifactMountResult.ready, true, "workflow overview release artifact mount readiness");
|
||||
assertEqual(releaseArtifactMountResult.renderResult.rowCount, 8, "workflow overview release artifact mount rows");
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowDomReadinessMissing.missing.join(","),
|
||||
"mount,status,rows",
|
||||
"workflow overview release artifact JSON workflow missing DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowDomReadinessReady.ready,
|
||||
true,
|
||||
"workflow overview release artifact JSON workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowRenderResult.rowCount,
|
||||
5,
|
||||
"workflow overview release artifact JSON workflow render rows",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowRenderResult.rowIds.includes("gate-execution-summary"),
|
||||
true,
|
||||
"workflow overview release artifact JSON workflow gate row",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowMountResult.ready,
|
||||
true,
|
||||
"workflow overview release artifact JSON workflow mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowStatus.textContent,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"workflow overview release artifact JSON workflow rendered status",
|
||||
);
|
||||
assertEqual(releaseArtifactUrlWorkflow.ready, true, "workflow overview release artifact URL workflow readiness");
|
||||
assertEqual(releaseArtifactUrlWorkflow.httpStatus, 200, "workflow overview release artifact URL workflow status");
|
||||
assertEqual(
|
||||
@@ -287,6 +451,136 @@
|
||||
"Ready: Artifact URL workflow complete",
|
||||
"workflow overview release artifact URL workflow summary view model",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-url-workflow",
|
||||
"workflow overview release artifact URL workflow render scope",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowDomReadinessReady.ready,
|
||||
true,
|
||||
"workflow overview release artifact URL workflow DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowRenderResult.rowCount,
|
||||
8,
|
||||
"workflow overview release artifact URL workflow render rows",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowRenderResult.rowIds.includes("mount-result"),
|
||||
true,
|
||||
"workflow overview release artifact URL workflow mount row",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowMountResult.ready,
|
||||
true,
|
||||
"workflow overview release artifact URL workflow DOM mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowStatus.textContent,
|
||||
"Ready: Artifact URL workflow complete",
|
||||
"workflow overview release artifact URL workflow rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflow.statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"workflow overview release artifact JSON workflow",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowSummary.statusLine,
|
||||
"Ready: Artifact JSON workflow complete",
|
||||
"workflow overview release artifact JSON workflow summary",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowActionPlan.shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
"workflow overview release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflowRenderState.dataset.handoffScope,
|
||||
"workflow-overview-release-readiness-artifact-json-workflow",
|
||||
"workflow overview release artifact JSON workflow render state scope",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflow.gateExecutionSummaryViewModel.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"workflow overview release artifact JSON workflow gate summary",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactJsonWorkflow.actionPlan.nextCommand,
|
||||
null,
|
||||
"workflow overview release artifact JSON workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlWorkflowActionPlan.shellScript,
|
||||
"# Project release readiness artifact URL workflow is already ready.\n",
|
||||
"workflow overview release artifact URL workflow action plan",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlan.shellScript,
|
||||
"# Project release readiness artifact validation is already ready.\n",
|
||||
"workflow overview release artifact validation action plan",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanRenderState.statusLine,
|
||||
"Ready: Artifact validation action plan complete",
|
||||
"workflow overview release artifact validation action-plan render state",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanDomReadinessReady.ready,
|
||||
true,
|
||||
"workflow overview release artifact validation action-plan DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanRenderResult.rowIds.includes("next-command"),
|
||||
true,
|
||||
"workflow overview release artifact validation action-plan next-command row",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanMountResult.ready,
|
||||
true,
|
||||
"workflow overview release artifact validation action-plan mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactValidationActionPlanStatus.textContent,
|
||||
"Ready: Artifact validation action plan complete",
|
||||
"workflow overview release artifact validation action-plan rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummary.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"workflow overview release artifact gate execution summary",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryRenderState.rows.length,
|
||||
17,
|
||||
"workflow overview release artifact gate execution summary render rows",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryDomReadinessReady.ready,
|
||||
true,
|
||||
"workflow overview release artifact gate execution summary DOM readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryRenderResult.rowIds.includes("gate-ui-node-smokes"),
|
||||
true,
|
||||
"workflow overview release artifact gate execution summary SDK row",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryMountResult.ready,
|
||||
true,
|
||||
"workflow overview release artifact gate execution summary mount readiness",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactGateExecutionSummaryStatus.textContent,
|
||||
"Ready: All release gate evidence present",
|
||||
"workflow overview release artifact gate execution summary rendered status",
|
||||
);
|
||||
assertEqual(
|
||||
releaseArtifactUrlGateExecutionSummary.statusLine,
|
||||
"Ready: All release gate evidence present",
|
||||
"workflow overview release artifact URL gate execution summary",
|
||||
);
|
||||
assertEqual(releaseArtifactUrlWorkflow.mountResult.ready, true, "workflow overview release artifact URL workflow mount");
|
||||
assertEqual(releaseArtifactStatus.textContent, releaseArtifactRenderState.statusLine, "workflow overview release artifact rendered status");
|
||||
assertEqual(
|
||||
|
||||
83
wasm-port/tests/browser/real_simulation_page_smoke.html
Normal file
83
wasm-port/tests/browser/real_simulation_page_smoke.html
Normal file
@@ -0,0 +1,83 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>LinuxCNC Real Simulation Page Smoke</title>
|
||||
</head>
|
||||
<body>
|
||||
<pre id="status">running</pre>
|
||||
<script type="module">
|
||||
const status = document.getElementById("status");
|
||||
|
||||
async function loadFrame(src) {
|
||||
const frame = document.createElement("iframe");
|
||||
frame.src = src;
|
||||
frame.width = "1280";
|
||||
frame.height = "800";
|
||||
document.body.appendChild(frame);
|
||||
await new Promise((resolve, reject) => {
|
||||
frame.addEventListener("load", resolve, { once: true });
|
||||
frame.addEventListener("error", reject, { once: true });
|
||||
});
|
||||
return frame;
|
||||
}
|
||||
|
||||
async function waitForState(frame) {
|
||||
for (let i = 0; i < 200; i += 1) {
|
||||
const state = frame.contentWindow?.linuxCncRealSimulationState;
|
||||
if (state?.summary?.ready) {
|
||||
return state;
|
||||
}
|
||||
await new Promise((resolve) => setTimeout(resolve, 50));
|
||||
}
|
||||
throw new Error("real simulation page did not expose ready state");
|
||||
}
|
||||
|
||||
try {
|
||||
const frame = await loadFrame("../../runtime/ui/simulation/index.html");
|
||||
const doc = frame.contentDocument;
|
||||
const state = await waitForState(frame);
|
||||
const polyline = doc.querySelector("[data-toolpath-polyline]");
|
||||
const rows = [...doc.querySelectorAll("[data-motion-row]")];
|
||||
const programRows = [...doc.querySelectorAll("[data-program-line]")];
|
||||
const canonicalOutput = doc.querySelector("[data-canonical-output]")?.textContent ?? "";
|
||||
|
||||
if (doc.body.dataset.simulationReady !== "true") {
|
||||
throw new Error("simulation body readiness flag not true");
|
||||
}
|
||||
if (state.apiName !== "real-browser-simulation-state") {
|
||||
throw new Error("simulation state API name drift");
|
||||
}
|
||||
if (state.summary.motionEventCount < 5) {
|
||||
throw new Error("simulation motion event count too low");
|
||||
}
|
||||
if (!canonicalOutput.includes("canon_event=STRAIGHT_FEED line=2 x=1 y=0 z=0")) {
|
||||
throw new Error("simulation canonical output missing LinuxCNC feed event");
|
||||
}
|
||||
if (!polyline?.getAttribute("points")?.includes("1,0")) {
|
||||
throw new Error("simulation toolpath polyline missing expected point");
|
||||
}
|
||||
if (rows.length !== state.motion.length) {
|
||||
throw new Error("simulation motion table row count drift");
|
||||
}
|
||||
if (programRows.length < 6) {
|
||||
throw new Error("simulation program rows missing");
|
||||
}
|
||||
if (doc.querySelector('[data-axis="x"]')?.textContent !== "0.000") {
|
||||
throw new Error("simulation final X axis drift");
|
||||
}
|
||||
if (doc.querySelector('[data-axis="y"]')?.textContent !== "0.000") {
|
||||
throw new Error("simulation final Y axis drift");
|
||||
}
|
||||
if (!doc.querySelector("[data-toolpath-svg]")?.getAttribute("viewBox")) {
|
||||
throw new Error("simulation SVG viewBox missing");
|
||||
}
|
||||
|
||||
status.textContent = "browser_real_simulation_page_smoke=ok";
|
||||
} catch (error) {
|
||||
status.textContent = `browser_real_simulation_page_smoke=fail ${error.stack || error.message}`;
|
||||
throw error;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -68,7 +68,7 @@
|
||||
);
|
||||
assertEqual(readyWorkflow.ready, true, "ready workflow readiness");
|
||||
assertEqual(readyWorkflow.httpStatus, 200, "ready workflow HTTP status");
|
||||
assertEqual(readyWorkflow.validation.gateCount, 11, "ready workflow gate count");
|
||||
assertEqual(readyWorkflow.validation.gateCount, 12, "ready workflow gate count");
|
||||
assertEqual(
|
||||
readyWorkflow.validationSummaryViewModel.statusLine,
|
||||
"Ready: Artifact evidence complete",
|
||||
|
||||
78
wasm-port/tests/browser/verify_real_simulation_browser.sh
Executable file
78
wasm-port/tests/browser/verify_real_simulation_browser.sh
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
CHROMIUM="${CHROMIUM:-$(command -v chromium || command -v chromium-browser || command -v google-chrome || command -v google-chrome-stable || true)}"
|
||||
|
||||
if [[ -z "$CHROMIUM" ]]; then
|
||||
echo "missing Chromium-compatible browser; set CHROMIUM=/path/to/browser" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "${SKIP_INTERP_BUILD:-0}" != "1" ]]; then
|
||||
"$ROOT_DIR/tools/build_wasm_core.sh"
|
||||
fi
|
||||
|
||||
TMP_DIR="$(mktemp -d)"
|
||||
PORT_FILE="$TMP_DIR/port"
|
||||
SERVER_LOG="$TMP_DIR/server.log"
|
||||
CHROME_PROFILE="$TMP_DIR/chrome-profile"
|
||||
mkdir -p "$CHROME_PROFILE"
|
||||
|
||||
cleanup() {
|
||||
if [[ -n "${SERVER_PID:-}" ]]; then
|
||||
kill "$SERVER_PID" 2>/dev/null || true
|
||||
wait "$SERVER_PID" 2>/dev/null || true
|
||||
fi
|
||||
rm -rf "$TMP_DIR"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
python3 - <<'PY' "$ROOT_DIR" "$PORT_FILE" >"$SERVER_LOG" 2>&1 &
|
||||
import functools
|
||||
import http.server
|
||||
import pathlib
|
||||
import socketserver
|
||||
import sys
|
||||
|
||||
root = pathlib.Path(sys.argv[1])
|
||||
port_file = pathlib.Path(sys.argv[2])
|
||||
|
||||
handler = functools.partial(http.server.SimpleHTTPRequestHandler, directory=str(root))
|
||||
with socketserver.TCPServer(("127.0.0.1", 0), handler) as httpd:
|
||||
port_file.write_text(str(httpd.server_address[1]), encoding="ascii")
|
||||
httpd.serve_forever()
|
||||
PY
|
||||
SERVER_PID=$!
|
||||
|
||||
for _ in $(seq 1 100); do
|
||||
[[ -s "$PORT_FILE" ]] && break
|
||||
sleep 0.05
|
||||
done
|
||||
|
||||
if [[ ! -s "$PORT_FILE" ]]; then
|
||||
echo "real simulation browser smoke HTTP server did not start" >&2
|
||||
cat "$SERVER_LOG" >&2 || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PORT="$(cat "$PORT_FILE")"
|
||||
URL="http://127.0.0.1:$PORT/tests/browser/real_simulation_page_smoke.html"
|
||||
OUT="$TMP_DIR/chromium-real-simulation.out"
|
||||
|
||||
"$CHROMIUM" \
|
||||
--headless=new \
|
||||
--disable-gpu \
|
||||
--no-sandbox \
|
||||
--user-data-dir="$CHROME_PROFILE" \
|
||||
--virtual-time-budget=10000 \
|
||||
--dump-dom \
|
||||
"$URL" >"$OUT" 2>&1
|
||||
|
||||
if ! grep -Fq "browser_real_simulation_page_smoke=ok" "$OUT"; then
|
||||
echo "browser real simulation page smoke failed" >&2
|
||||
sed -n '1,260p' "$OUT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "browser_real_simulation_page_smoke=ok"
|
||||
Reference in New Issue
Block a user