178 lines
3.7 KiB
TypeScript
178 lines
3.7 KiB
TypeScript
import { describe, expect, it } from "bun:test";
|
|
import { parseTask } from "../markdown/parser.ts";
|
|
import { serializeTask } from "../markdown/serializer.ts";
|
|
import type { Task } from "../types/index.ts";
|
|
|
|
describe("Priority functionality", () => {
|
|
describe("parseTask", () => {
|
|
it("should parse task with priority field", () => {
|
|
const content = `---
|
|
id: task-1
|
|
title: "High priority task"
|
|
status: "To Do"
|
|
priority: high
|
|
assignee: []
|
|
created_date: "2025-06-20"
|
|
labels: []
|
|
dependencies: []
|
|
---
|
|
|
|
## Description
|
|
|
|
This is a high priority task.`;
|
|
|
|
const task = parseTask(content);
|
|
|
|
expect(task.id).toBe("task-1");
|
|
expect(task.title).toBe("High priority task");
|
|
expect(task.priority).toBe("high");
|
|
});
|
|
|
|
it("should handle all priority levels", () => {
|
|
const priorities = ["high", "medium", "low"] as const;
|
|
|
|
for (const priority of priorities) {
|
|
const content = `---
|
|
id: task-${priority}
|
|
title: "${priority} priority task"
|
|
status: "To Do"
|
|
priority: ${priority}
|
|
assignee: []
|
|
created_date: "2025-06-20"
|
|
labels: []
|
|
dependencies: []
|
|
---
|
|
|
|
## Description
|
|
|
|
This is a ${priority} priority task.`;
|
|
|
|
const task = parseTask(content);
|
|
expect(task.priority).toBe(priority);
|
|
}
|
|
});
|
|
|
|
it("should handle invalid priority values gracefully", () => {
|
|
const content = `---
|
|
id: task-1
|
|
title: "Invalid priority task"
|
|
status: "To Do"
|
|
priority: invalid
|
|
assignee: []
|
|
created_date: "2025-06-20"
|
|
labels: []
|
|
dependencies: []
|
|
---
|
|
|
|
## Description
|
|
|
|
This task has an invalid priority.`;
|
|
|
|
const task = parseTask(content);
|
|
|
|
expect(task.priority).toBeUndefined();
|
|
});
|
|
|
|
it("should handle task without priority field", () => {
|
|
const content = `---
|
|
id: task-1
|
|
title: "No priority task"
|
|
status: "To Do"
|
|
assignee: []
|
|
created_date: "2025-06-20"
|
|
labels: []
|
|
dependencies: []
|
|
---
|
|
|
|
## Description
|
|
|
|
This task has no priority.`;
|
|
|
|
const task = parseTask(content);
|
|
|
|
expect(task.priority).toBeUndefined();
|
|
});
|
|
|
|
it("should handle case-insensitive priority values", () => {
|
|
const content = `---
|
|
id: task-1
|
|
title: "Mixed case priority"
|
|
status: "To Do"
|
|
priority: HIGH
|
|
assignee: []
|
|
created_date: "2025-06-20"
|
|
labels: []
|
|
dependencies: []
|
|
---
|
|
|
|
## Description
|
|
|
|
This task has mixed case priority.`;
|
|
|
|
const task = parseTask(content);
|
|
|
|
expect(task.priority).toBe("high");
|
|
});
|
|
});
|
|
|
|
describe("serializeTask", () => {
|
|
it("should serialize task with priority", () => {
|
|
const task: Task = {
|
|
id: "task-1",
|
|
title: "High priority task",
|
|
status: "To Do",
|
|
assignee: [],
|
|
createdDate: "2025-06-20",
|
|
labels: [],
|
|
dependencies: [],
|
|
rawContent: "## Description\n\nThis is a high priority task.",
|
|
priority: "high",
|
|
};
|
|
|
|
const serialized = serializeTask(task);
|
|
|
|
expect(serialized).toContain("priority: high");
|
|
});
|
|
|
|
it("should not include priority field when undefined", () => {
|
|
const task: Task = {
|
|
id: "task-1",
|
|
title: "No priority task",
|
|
status: "To Do",
|
|
assignee: [],
|
|
createdDate: "2025-06-20",
|
|
labels: [],
|
|
dependencies: [],
|
|
rawContent: "## Description\n\nThis task has no priority.",
|
|
};
|
|
|
|
const serialized = serializeTask(task);
|
|
|
|
expect(serialized).not.toContain("priority:");
|
|
});
|
|
|
|
it("should round-trip priority values correctly", () => {
|
|
const priorities: Array<"high" | "medium" | "low"> = ["high", "medium", "low"];
|
|
|
|
for (const priority of priorities) {
|
|
const originalTask: Task = {
|
|
id: "task-1",
|
|
title: `${priority} priority task`,
|
|
status: "To Do",
|
|
assignee: [],
|
|
createdDate: "2025-06-20",
|
|
labels: [],
|
|
dependencies: [],
|
|
rawContent: `## Description\n\nThis is a ${priority} priority task.`,
|
|
priority,
|
|
};
|
|
|
|
const serialized = serializeTask(originalTask);
|
|
const parsed = parseTask(serialized);
|
|
|
|
expect(parsed.priority).toBe(priority);
|
|
}
|
|
});
|
|
});
|
|
});
|