From 0b32bdf1e5d213bf130f28f55f517ee8d6cb5f5f Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 28 Aug 2026 17:47:18 -0400 Subject: [PATCH] test(core): use disposable session fixtures (#45745) --- packages/core/test/session-create.test.ts | 12 +++--------- packages/core/test/session-message-update.test.ts | 7 ++----- packages/core/test/session-prompt.test.ts | 10 +++------- 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/packages/core/test/session-create.test.ts b/packages/core/test/session-create.test.ts index 662b45d5c89..11bc3639db3 100644 --- a/packages/core/test/session-create.test.ts +++ b/packages/core/test/session-create.test.ts @@ -37,7 +37,7 @@ import { testEffect } from "./lib/effect" import { LocationServiceMap } from "@opencode-ai/core/location-service-map" import { promptLocationLayer } from "./fixture/prompt-location" import { globalProjectLayer } from "./lib/project" -import { tmpdir } from "./fixture/tmpdir" +import { tmpdirScoped } from "./fixture/tmpdir" const it = testEffect( AppNodeBuilder.build( @@ -96,10 +96,7 @@ const assertCreateInputTypes = (session: Session.Interface) => { void assertCreateInputTypes function withTmp(f: (directory: string) => Effect.Effect) { - return Effect.acquireRelease( - Effect.promise(() => tmpdir()), - (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()), - ).pipe(Effect.flatMap((tmp) => f(tmp.path))) + return tmpdirScoped().pipe(Effect.flatMap((tmp) => f(tmp.path))) } describe("Session.create", () => { @@ -967,10 +964,7 @@ describe("Session.create", () => { data: event.data, })) - const tmp = yield* Effect.acquireRelease( - Effect.promise(() => tmpdir()), - (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()), - ) + const tmp = yield* tmpdirScoped() const targetLayer = AppNodeBuilder.build( LayerNode.group([Database.node, Bus.node, SessionProjector.node, SessionStore.node]), [ diff --git a/packages/core/test/session-message-update.test.ts b/packages/core/test/session-message-update.test.ts index 23810107e1d..45e72cb111c 100644 --- a/packages/core/test/session-message-update.test.ts +++ b/packages/core/test/session-message-update.test.ts @@ -21,7 +21,7 @@ import { SessionProjector } from "@opencode-ai/core/session/projector" import { SessionStore } from "@opencode-ai/core/session/store" import { Money } from "@opencode-ai/schema/money" import { LayerNode } from "@opencode-ai/util/effect/layer-node" -import { tmpdir } from "./fixture/tmpdir" +import { tmpdirScoped } from "./fixture/tmpdir" import { testEffect } from "./lib/effect" import { globalProjectLayer } from "./lib/project" @@ -149,10 +149,7 @@ describe("Session.updateMessage", () => { type: event.type, data: event.data, })) - const tmp = yield* Effect.acquireRelease( - Effect.promise(() => tmpdir()), - (tmp) => Effect.promise(() => tmp[Symbol.asyncDispose]()), - ) + const tmp = yield* tmpdirScoped() const target = AppNodeBuilder.build( LayerNode.group([Database.node, Bus.node, SessionProjector.node, SessionStore.node]), [ diff --git a/packages/core/test/session-prompt.test.ts b/packages/core/test/session-prompt.test.ts index a75146300d1..fbc8a86cbaa 100644 --- a/packages/core/test/session-prompt.test.ts +++ b/packages/core/test/session-prompt.test.ts @@ -1,7 +1,5 @@ import { describe, expect } from "bun:test" import { DateTime, Effect, Fiber, Layer, LayerMap, Schema, Stream } from "effect" -import { mkdtemp, rm } from "fs/promises" -import { tmpdir } from "os" import path from "path" import { pathToFileURL } from "url" import { eq } from "drizzle-orm" @@ -30,6 +28,7 @@ import { Image } from "@opencode-ai/core/image" import { PluginSupervisor } from "@opencode-ai/core/plugin/supervisor" import { PluginHooks } from "@opencode-ai/core/plugin/hooks" import { Snapshot } from "@opencode-ai/core/snapshot" +import { tmpdirScoped } from "./fixture/tmpdir" import { testEffect } from "./lib/effect" const executionCalls: Session.ID[] = [] @@ -403,11 +402,8 @@ describe("Session.prompt", () => { Effect.gen(function* () { yield* setup const session = yield* Session.Service - const directory = yield* Effect.acquireRelease( - Effect.promise(() => mkdtemp(path.join(tmpdir(), "opencode-session-prompt-"))), - (directory) => Effect.promise(() => rm(directory, { recursive: true, force: true })), - ) - const source = path.join(directory, "image.png") + const directory = yield* tmpdirScoped("opencode-session-prompt-") + const source = path.join(directory.path, "image.png") const bytes = Buffer.from( "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=", "base64",