feat(team-mode): add team tasklist dependencies with tests
This commit is contained in:
@@ -0,0 +1,47 @@
|
|||||||
|
/// <reference types="bun-types" />
|
||||||
|
|
||||||
|
import { describe, expect, test } from "bun:test"
|
||||||
|
|
||||||
|
import type { Task } from "../types"
|
||||||
|
import { canClaim } from "./dependencies"
|
||||||
|
|
||||||
|
function buildTask(id: string, status: Task["status"], blockedBy: string[] = []): Task {
|
||||||
|
const now = Date.now()
|
||||||
|
return {
|
||||||
|
version: 1,
|
||||||
|
id,
|
||||||
|
subject: `subject-${id}`,
|
||||||
|
description: `description-${id}`,
|
||||||
|
status,
|
||||||
|
blocks: [],
|
||||||
|
blockedBy,
|
||||||
|
createdAt: now,
|
||||||
|
updatedAt: now,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("canClaim", () => {
|
||||||
|
test("returns false when a blocker is not completed", () => {
|
||||||
|
// given
|
||||||
|
const blockerTask = buildTask("2", "in_progress")
|
||||||
|
const dependentTask = buildTask("1", "pending", ["2"])
|
||||||
|
|
||||||
|
// when
|
||||||
|
const claimable = canClaim(dependentTask, [dependentTask, blockerTask])
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(claimable).toBe(false)
|
||||||
|
})
|
||||||
|
|
||||||
|
test("ignores missing blockers and completed blockers", () => {
|
||||||
|
// given
|
||||||
|
const completedBlockerTask = buildTask("2", "completed")
|
||||||
|
const dependentTask = buildTask("1", "pending", ["2", "999"])
|
||||||
|
|
||||||
|
// when
|
||||||
|
const claimable = canClaim(dependentTask, [dependentTask, completedBlockerTask])
|
||||||
|
|
||||||
|
// then
|
||||||
|
expect(claimable).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import type { Task } from "../types"
|
||||||
|
|
||||||
|
export function canClaim(task: Task, allTasks: Task[]): boolean {
|
||||||
|
return task.blockedBy.every((blockerId) => {
|
||||||
|
const blockerTask = allTasks.find((candidateTask) => candidateTask.id === blockerId)
|
||||||
|
return blockerTask === undefined || blockerTask.status === "completed"
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user