feat(team-mode): add team tasklist dependencies with tests

This commit is contained in:
YeonGyu-Kim
2026-04-28 10:46:10 +09:00
parent 4270af3ac9
commit 205ce93654
2 changed files with 55 additions and 0 deletions
@@ -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"
})
}