feat(P03): multi-project support, NFR milestone versioning, phase context reset, install scripts (v0.3.0)
This commit is contained in:
@@ -13,6 +13,18 @@ describe("CommitBuilder", () => {
|
||||
expect(block).toContain("status: execute");
|
||||
});
|
||||
|
||||
it("builds ci block with project", () => {
|
||||
const ci: CiMetadata = { phase: 1, milestone: "v1.0", status: "execute", project: "task-api" };
|
||||
const block = CommitBuilder.buildCiBlock(ci);
|
||||
expect(block).toContain("project: task-api");
|
||||
});
|
||||
|
||||
it("builds ci block without project when not set", () => {
|
||||
const ci: CiMetadata = { phase: 1, milestone: "v1.0", status: "execute" };
|
||||
const block = CommitBuilder.buildCiBlock(ci);
|
||||
expect(block).not.toContain("project:");
|
||||
});
|
||||
|
||||
it("builds ci block with decisions", () => {
|
||||
const ci: CiMetadata = {
|
||||
phase: 1,
|
||||
@@ -172,6 +184,16 @@ describe("CommitBuilder", () => {
|
||||
expect(parsed.compound!.problem).toBe("Token replay attacks");
|
||||
expect(parsed.lessons).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("round-trips project field", () => {
|
||||
const ci: CiMetadata = { phase: 1, milestone: "v1.0", status: "execute", project: "task-api" };
|
||||
const block = CommitBuilder.buildCiBlock(ci);
|
||||
const fullMessage = `feat(task-api/P01): test\n\n---ci---\n${block}\n---/ci---`;
|
||||
const extracted = extractCiBlock(fullMessage)!;
|
||||
const parsed = parseCiBlock(extracted)!;
|
||||
|
||||
expect(parsed.project).toBe("task-api");
|
||||
});
|
||||
});
|
||||
|
||||
describe("buildInitCommit", () => {
|
||||
@@ -193,6 +215,19 @@ describe("CommitBuilder", () => {
|
||||
expect(msg).toContain("Build a REST API for task management");
|
||||
expect(msg).toContain("AUTH-01");
|
||||
});
|
||||
|
||||
it("builds an init commit message with project", () => {
|
||||
const msg = CommitBuilder.buildInitCommit({
|
||||
projectName: "task-api",
|
||||
phaseCount: 4,
|
||||
milestone: "v1.0",
|
||||
project: "task-api",
|
||||
specification: "Build a REST API",
|
||||
requirements: ["AUTH-01"],
|
||||
});
|
||||
|
||||
expect(msg).toContain("project: task-api");
|
||||
});
|
||||
});
|
||||
|
||||
describe("buildTaskCommit", () => {
|
||||
@@ -223,6 +258,22 @@ describe("CommitBuilder", () => {
|
||||
expect(msg).toContain("D-003");
|
||||
expect(msg).toContain("AUTH-01");
|
||||
});
|
||||
|
||||
it("builds a task commit with project prefix", () => {
|
||||
const msg = CommitBuilder.buildTaskCommit({
|
||||
type: "feat",
|
||||
phase: 1,
|
||||
milestone: "v1.0",
|
||||
project: "task-api",
|
||||
plan: "01-01",
|
||||
task: "01-01-02",
|
||||
subject: "registration endpoint",
|
||||
status: "execute",
|
||||
});
|
||||
|
||||
expect(msg).toContain("feat(task-api/P01-01-02):");
|
||||
expect(msg).toContain("project: task-api");
|
||||
});
|
||||
});
|
||||
|
||||
describe("buildPhaseCompletionCommit", () => {
|
||||
|
||||
Reference in New Issue
Block a user