Use instance test helper in question tool tests (#25459)

This commit is contained in:
Kit Langton 2026-05-02 16:13:32 -04:00 committed by GitHub
commit 73406e786f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -6,7 +6,6 @@ import { SessionID, MessageID } from "../../src/session/schema"
import { Agent } from "../../src/agent/agent" import { Agent } from "../../src/agent/agent"
import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner" import { CrossSpawnSpawner } from "@opencode-ai/core/cross-spawn-spawner"
import { Truncate } from "@/tool/truncate" import { Truncate } from "@/tool/truncate"
import { provideTmpdirInstance } from "../fixture/fixture"
import { testEffect } from "../lib/effect" import { testEffect } from "../lib/effect"
const ctx = { const ctx = {
@ -34,56 +33,52 @@ const pending = Effect.fn("QuestionToolTest.pending")(function* (question: Quest
}) })
describe("tool.question", () => { describe("tool.question", () => {
it.live("should successfully execute with valid question parameters", () => it.instance("should successfully execute with valid question parameters", () =>
provideTmpdirInstance(() => Effect.gen(function* () {
Effect.gen(function* () { const question = yield* Question.Service
const question = yield* Question.Service const toolInfo = yield* QuestionTool
const toolInfo = yield* QuestionTool const tool = yield* toolInfo.init()
const tool = yield* toolInfo.init() const questions = [
const questions = [ {
{ question: "What is your favorite color?",
question: "What is your favorite color?", header: "Color",
header: "Color", options: [
options: [ { label: "Red", description: "The color of passion" },
{ label: "Red", description: "The color of passion" }, { label: "Blue", description: "The color of sky" },
{ label: "Blue", description: "The color of sky" }, ],
], multiple: false,
multiple: false, },
}, ]
]
const fiber = yield* tool.execute({ questions }, ctx).pipe(Effect.forkScoped) const fiber = yield* tool.execute({ questions }, ctx).pipe(Effect.forkScoped)
const item = yield* pending(question) const item = yield* pending(question)
yield* question.reply({ requestID: item.id, answers: [["Red"]] }) yield* question.reply({ requestID: item.id, answers: [["Red"]] })
const result = yield* Fiber.join(fiber) const result = yield* Fiber.join(fiber)
expect(result.title).toBe("Asked 1 question") expect(result.title).toBe("Asked 1 question")
}), }),
),
) )
it.live("should now pass with a header longer than 12 but less than 30 chars", () => it.instance("should now pass with a header longer than 12 but less than 30 chars", () =>
provideTmpdirInstance(() => Effect.gen(function* () {
Effect.gen(function* () { const question = yield* Question.Service
const question = yield* Question.Service const toolInfo = yield* QuestionTool
const toolInfo = yield* QuestionTool const tool = yield* toolInfo.init()
const tool = yield* toolInfo.init() const questions = [
const questions = [ {
{ question: "What is your favorite animal?",
question: "What is your favorite animal?", header: "This Header is Over 12",
header: "This Header is Over 12", options: [{ label: "Dog", description: "Man's best friend" }],
options: [{ label: "Dog", description: "Man's best friend" }], },
}, ]
]
const fiber = yield* tool.execute({ questions }, ctx).pipe(Effect.forkScoped) const fiber = yield* tool.execute({ questions }, ctx).pipe(Effect.forkScoped)
const item = yield* pending(question) const item = yield* pending(question)
yield* question.reply({ requestID: item.id, answers: [["Dog"]] }) yield* question.reply({ requestID: item.id, answers: [["Dog"]] })
const result = yield* Fiber.join(fiber) const result = yield* Fiber.join(fiber)
expect(result.output).toContain(`"What is your favorite animal?"="Dog"`) expect(result.output).toContain(`"What is your favorite animal?"="Dog"`)
}), }),
),
) )
// intentionally removed the zod validation due to tool call errors, hoping prompting is gonna be good enough // intentionally removed the zod validation due to tool call errors, hoping prompting is gonna be good enough