test(session): port llm.test.ts to it.instance (#28578)
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import { Provider } from "@/provider/provider"
|
import { Provider } from "@/provider/provider"
|
||||||
|
import { serviceUse } from "@/effect/service-use"
|
||||||
import * as Log from "@opencode-ai/core/util/log"
|
import * as Log from "@opencode-ai/core/util/log"
|
||||||
import { Context, Effect, Layer } from "effect"
|
import { Context, Effect, Layer } from "effect"
|
||||||
import * as Stream from "effect/Stream"
|
import * as Stream from "effect/Stream"
|
||||||
@@ -54,6 +55,8 @@ export interface Interface {
|
|||||||
|
|
||||||
export class Service extends Context.Service<Service, Interface>()("@opencode/LLM") {}
|
export class Service extends Context.Service<Service, Interface>()("@opencode/LLM") {}
|
||||||
|
|
||||||
|
export const use = serviceUse(Service)
|
||||||
|
|
||||||
const live: Layer.Layer<
|
const live: Layer.Layer<
|
||||||
Service,
|
Service,
|
||||||
never,
|
never,
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ export async function tmpdir<T>(options?: TmpDirOptions<T>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Effectful scoped tmpdir. Cleaned up when the scope closes. Make sure these stay in sync */
|
/** Effectful scoped tmpdir. Cleaned up when the scope closes. Make sure these stay in sync */
|
||||||
export function tmpdirScoped(options?: { git?: boolean; config?: Partial<Config.Info> }) {
|
export function tmpdirScoped(options?: { git?: boolean; config?: Partial<Config.Info> | (() => Partial<Config.Info>) }) {
|
||||||
return Effect.gen(function* () {
|
return Effect.gen(function* () {
|
||||||
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner
|
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner
|
||||||
const dirpath = sanitizePath(path.join(os.tmpdir(), "opencode-test-" + Math.random().toString(36).slice(2)))
|
const dirpath = sanitizePath(path.join(os.tmpdir(), "opencode-test-" + Math.random().toString(36).slice(2)))
|
||||||
@@ -146,10 +146,11 @@ export function tmpdirScoped(options?: { git?: boolean; config?: Partial<Config.
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (options?.config) {
|
if (options?.config) {
|
||||||
|
const resolved = typeof options.config === "function" ? options.config() : options.config
|
||||||
yield* Effect.promise(() =>
|
yield* Effect.promise(() =>
|
||||||
fs.writeFile(
|
fs.writeFile(
|
||||||
path.join(dir, "opencode.json"),
|
path.join(dir, "opencode.json"),
|
||||||
JSON.stringify({ $schema: "https://opencode.ai/config.json", ...options.config }),
|
JSON.stringify({ $schema: "https://opencode.ai/config.json", ...resolved }),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -180,7 +181,7 @@ export const disposeAllInstancesEffect = InstanceStore.Service.use((store) => st
|
|||||||
|
|
||||||
export function provideTmpdirInstance<A, E, R>(
|
export function provideTmpdirInstance<A, E, R>(
|
||||||
self: (path: string) => Effect.Effect<A, E, R>,
|
self: (path: string) => Effect.Effect<A, E, R>,
|
||||||
options?: { git?: boolean; config?: Partial<Config.Info> },
|
options?: { git?: boolean; config?: Partial<Config.Info> | (() => Partial<Config.Info>) },
|
||||||
) {
|
) {
|
||||||
return Effect.gen(function* () {
|
return Effect.gen(function* () {
|
||||||
const path = yield* tmpdirScoped(options)
|
const path = yield* tmpdirScoped(options)
|
||||||
@@ -204,7 +205,7 @@ export function provideTmpdirInstance<A, E, R>(
|
|||||||
export class TestInstance extends Context.Service<TestInstance, { readonly directory: string }>()("@test/Instance") {}
|
export class TestInstance extends Context.Service<TestInstance, { readonly directory: string }>()("@test/Instance") {}
|
||||||
|
|
||||||
export const withTmpdirInstance =
|
export const withTmpdirInstance =
|
||||||
(options?: { git?: boolean; config?: Partial<Config.Info> }) =>
|
(options?: { git?: boolean; config?: Partial<Config.Info> | (() => Partial<Config.Info>) }) =>
|
||||||
<A, E, R>(self: Effect.Effect<A, E, R>) =>
|
<A, E, R>(self: Effect.Effect<A, E, R>) =>
|
||||||
Effect.gen(function* () {
|
Effect.gen(function* () {
|
||||||
const directory = yield* tmpdirScoped(options)
|
const directory = yield* tmpdirScoped(options)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import type { Config } from "@/config/config"
|
|||||||
import { TestInstance, withTmpdirInstance } from "../fixture/fixture"
|
import { TestInstance, withTmpdirInstance } from "../fixture/fixture"
|
||||||
|
|
||||||
type Body<A, E, R> = Effect.Effect<A, E, R> | (() => Effect.Effect<A, E, R>)
|
type Body<A, E, R> = Effect.Effect<A, E, R> | (() => Effect.Effect<A, E, R>)
|
||||||
type InstanceOptions = { git?: boolean; config?: Partial<Config.Info> }
|
type InstanceOptions = { git?: boolean; config?: Partial<Config.Info> | (() => Partial<Config.Info>) }
|
||||||
|
|
||||||
function isInstanceOptions(options: InstanceOptions | number | TestOptions | undefined): options is InstanceOptions {
|
function isInstanceOptions(options: InstanceOptions | number | TestOptions | undefined): options is InstanceOptions {
|
||||||
return !!options && typeof options === "object" && ("git" in options || "config" in options)
|
return !!options && typeof options === "object" && ("git" in options || "config" in options)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user