chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import { readFileSync } from "node:fs";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import path from "node:path";
|
||||
|
||||
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
||||
const sourcePath = path.resolve(
|
||||
scriptDir,
|
||||
"../src/pages/instances/CreateInstancePage.tsx",
|
||||
);
|
||||
const source = readFileSync(sourcePath, "utf8");
|
||||
|
||||
function sectionBetween(startMarker, endMarker) {
|
||||
const start = source.indexOf(startMarker);
|
||||
const end = source.indexOf(endMarker);
|
||||
if (start === -1 || end === -1 || end <= start) {
|
||||
throw new Error(`Unable to locate section: ${startMarker}`);
|
||||
}
|
||||
return source.slice(start, end);
|
||||
}
|
||||
|
||||
function assert(condition, message) {
|
||||
if (!condition) {
|
||||
throw new Error(message);
|
||||
}
|
||||
}
|
||||
|
||||
const stepOne = sectionBetween(
|
||||
"{/* Step 1: Basic Information */}",
|
||||
"{/* Step 2: Select Type */}",
|
||||
);
|
||||
const stepTwo = sectionBetween(
|
||||
"{/* Step 2: Select Type */}",
|
||||
"{/* Step 3: Configuration */}",
|
||||
);
|
||||
const stepThree = source.slice(source.indexOf("{/* Step 3: Configuration */}"));
|
||||
|
||||
assert(
|
||||
/id:\s*"lite"/.test(source) && /id:\s*"pro"/.test(source),
|
||||
"Create instance page must define Lite and Pro mode options.",
|
||||
);
|
||||
assert(
|
||||
stepOne.includes("renderInstanceModeSelector()"),
|
||||
"Lite/Pro selector must be visible in step 1.",
|
||||
);
|
||||
assert(
|
||||
!stepTwo.includes("renderInstanceModeSelector()"),
|
||||
"Lite/Pro selector should not be hidden behind step 2.",
|
||||
);
|
||||
assert(
|
||||
source.includes('const usesDedicatedResources = selectedMode === "pro";'),
|
||||
"Create page must distinguish Pro-only dedicated resource controls.",
|
||||
);
|
||||
assert(
|
||||
source.includes('const showRuntimeImageSelector = selectedMode === "pro";'),
|
||||
"Runtime image selector visibility must be controlled by Pro mode only.",
|
||||
);
|
||||
assert(
|
||||
stepTwo.includes("{showRuntimeImageSelector && ("),
|
||||
"Step 2 runtime image selector must be hidden for Lite mode.",
|
||||
);
|
||||
assert(
|
||||
stepThree.includes("{usesDedicatedResources && ("),
|
||||
"Step 3 resource controls must be hidden for Lite mode.",
|
||||
);
|
||||
assert(
|
||||
stepThree.includes("{showRuntimeImageSelector && ("),
|
||||
"Step 3 summary must hide runtime image details for Lite mode.",
|
||||
);
|
||||
assert(
|
||||
source.includes("...(usesDedicatedResources"),
|
||||
"Quota validation must include CPU/memory/storage/GPU only for Pro mode.",
|
||||
);
|
||||
|
||||
console.log("Create instance mode selector placement is valid.");
|
||||
Reference in New Issue
Block a user