diff --git a/src/features/team-mode/team-tasklist/get.test.ts b/src/features/team-mode/team-tasklist/get.test.ts new file mode 100644 index 000000000..815e72ce2 --- /dev/null +++ b/src/features/team-mode/team-tasklist/get.test.ts @@ -0,0 +1,45 @@ +/// + +import { expect, test } from "bun:test" + +import { createTask } from "./store" +import { createTaskInput, createTasklistFixture } from "./test-support" +import { getTask } from "./get" + +test("getTask returns a persisted task", async () => { + // given + const fixture = await createTasklistFixture() + + try { + const createdTask = await createTask(fixture.teamRunId, createTaskInput({ subject: "persisted task" }), fixture.config) + + // when + const loadedTask = await getTask(fixture.teamRunId, createdTask.id, fixture.config) + + // then + expect(loadedTask).toEqual(createdTask) + } finally { + await fixture.cleanup() + } +}) + +test("getTask throws when the task file is missing", async () => { + // given + const fixture = await createTasklistFixture() + + try { + // when + let thrownError: unknown = null + + try { + await getTask(fixture.teamRunId, "999", fixture.config) + } catch (error) { + thrownError = error + } + + // then + expect(thrownError).toBeInstanceOf(Error) + } finally { + await fixture.cleanup() + } +}) diff --git a/src/features/team-mode/team-tasklist/get.ts b/src/features/team-mode/team-tasklist/get.ts new file mode 100644 index 000000000..002fca34c --- /dev/null +++ b/src/features/team-mode/team-tasklist/get.ts @@ -0,0 +1,13 @@ +import { readFile } from "node:fs/promises" +import path from "node:path" + +import type { TeamModeConfig } from "../../../config/schema/team-mode" +import { getTasksDir, resolveBaseDir } from "../team-registry" +import { TaskSchema } from "../types" +import type { Task } from "../types" + +export async function getTask(teamRunId: string, taskId: string, config: TeamModeConfig): Promise { + const tasksDirectory = getTasksDir(resolveBaseDir(config), teamRunId) + const taskContent = await readFile(path.join(tasksDirectory, `${taskId}.json`), "utf8") + return TaskSchema.parse(JSON.parse(taskContent)) +}