test(lanes): prove profile scaffolding end to end with a real boot (A3)
This commit is contained in:
@@ -341,3 +341,54 @@ describe("checkProfile", () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("end to end: init -> check -> real boot", () => {
|
||||||
|
it("a single-service, no-database repo boots for real after init", async () => {
|
||||||
|
const lanesLib = require("../lib/lanes");
|
||||||
|
const runtime = require("../lib/lane-runtime");
|
||||||
|
|
||||||
|
const repo = makeRepo();
|
||||||
|
// A plain Node script reading process.env.PORT — the exact convention
|
||||||
|
// bootLine's `env PORT="$..." npm run <script>` targets.
|
||||||
|
fs.writeFileSync(
|
||||||
|
path.join(repo, "package.json"),
|
||||||
|
JSON.stringify({
|
||||||
|
scripts: {
|
||||||
|
start:
|
||||||
|
"node -e \"require('http').createServer((_,res)=>res.end('ok')).listen(process.env.PORT)\"",
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
|
const facts = detect.detectNode(repo);
|
||||||
|
detect.scaffoldProfile(repo, facts);
|
||||||
|
const checked = await detect.checkProfile(repo);
|
||||||
|
assert.equal(checked.ok, true, JSON.stringify(checked.errors));
|
||||||
|
|
||||||
|
const lane = lanesLib.createLane({ title: "e2e", cwd: repo, kind: "managed" });
|
||||||
|
try {
|
||||||
|
const runtimeFacts = await runtime.upLane(lanesLib.getLane(lane.id));
|
||||||
|
assert.equal(runtimeFacts.up, true);
|
||||||
|
assert.equal(runtimeFacts.healthy, true);
|
||||||
|
} finally {
|
||||||
|
await runtime.downLane(lanesLib.getLane(lane.id));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it("a monorepo with a database scaffolds correctly but check fails until migrate/seed are finished", async () => {
|
||||||
|
const repo = makeRepo();
|
||||||
|
writePkg(path.join(repo, "backend"), { start: "node server.js" });
|
||||||
|
writePkg(path.join(repo, "frontend"), { dev: "vite" });
|
||||||
|
writeCompose(repo, " postgres:\n image: postgres:16\n redis:\n image: redis:7\n");
|
||||||
|
fs.writeFileSync(path.join(repo, "backend", ".env.example"), "SOMETHING=1\n");
|
||||||
|
|
||||||
|
const facts = detect.detectNode(repo);
|
||||||
|
const scaffolded = detect.scaffoldProfile(repo, facts);
|
||||||
|
assert.ok(scaffolded.todos.includes("hooks/migrate.sh"));
|
||||||
|
assert.ok(scaffolded.todos.includes("hooks/seed.sh"));
|
||||||
|
|
||||||
|
const checked = await detect.checkProfile(repo);
|
||||||
|
assert.equal(checked.ok, false);
|
||||||
|
assert.ok(checked.errors.some((e) => /migrate\.sh/.test(e)));
|
||||||
|
assert.ok(checked.errors.some((e) => /seed\.sh/.test(e)));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user