Use instance test helper in question tool tests (#25459)
This commit is contained in:
parent
76d490afeb
commit
73406e786f
1 changed files with 40 additions and 45 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue