mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-03-31 06:12:26 +00:00
Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
237 lines
6.4 KiB
TypeScript
237 lines
6.4 KiB
TypeScript
import { test, expect } from "bun:test"
|
|
import path from "path"
|
|
import { tmpdir } from "../fixture/fixture"
|
|
import { Instance } from "../../src/project/instance"
|
|
import { Provider } from "../../src/provider/provider"
|
|
import { Env } from "../../src/env"
|
|
import { Auth } from "../../src/auth"
|
|
import { Global } from "../../src/global"
|
|
|
|
test("Bedrock: config region takes precedence over AWS_REGION env var", async () => {
|
|
await using tmp = await tmpdir({
|
|
init: async (dir) => {
|
|
await Bun.write(
|
|
path.join(dir, "opencode.json"),
|
|
JSON.stringify({
|
|
$schema: "https://opencode.ai/config.json",
|
|
provider: {
|
|
"amazon-bedrock": {
|
|
options: {
|
|
region: "eu-west-1",
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
)
|
|
},
|
|
})
|
|
await Instance.provide({
|
|
directory: tmp.path,
|
|
init: async () => {
|
|
Env.set("AWS_REGION", "us-east-1")
|
|
Env.set("AWS_PROFILE", "default")
|
|
},
|
|
fn: async () => {
|
|
const providers = await Provider.list()
|
|
expect(providers["amazon-bedrock"]).toBeDefined()
|
|
// Region from config should be used (not env var)
|
|
expect(providers["amazon-bedrock"].options?.region).toBe("eu-west-1")
|
|
},
|
|
})
|
|
})
|
|
|
|
test("Bedrock: falls back to AWS_REGION env var when no config", async () => {
|
|
await using tmp = await tmpdir({
|
|
init: async (dir) => {
|
|
await Bun.write(
|
|
path.join(dir, "opencode.json"),
|
|
JSON.stringify({
|
|
$schema: "https://opencode.ai/config.json",
|
|
}),
|
|
)
|
|
},
|
|
})
|
|
await Instance.provide({
|
|
directory: tmp.path,
|
|
init: async () => {
|
|
Env.set("AWS_REGION", "eu-west-1")
|
|
Env.set("AWS_PROFILE", "default")
|
|
},
|
|
fn: async () => {
|
|
const providers = await Provider.list()
|
|
expect(providers["amazon-bedrock"]).toBeDefined()
|
|
expect(providers["amazon-bedrock"].options?.region).toBe("eu-west-1")
|
|
},
|
|
})
|
|
})
|
|
|
|
test("Bedrock: without explicit region config, uses AWS_REGION env or defaults", async () => {
|
|
await using tmp = await tmpdir({
|
|
init: async (dir) => {
|
|
await Bun.write(
|
|
path.join(dir, "opencode.json"),
|
|
JSON.stringify({
|
|
$schema: "https://opencode.ai/config.json",
|
|
}),
|
|
)
|
|
},
|
|
})
|
|
await Instance.provide({
|
|
directory: tmp.path,
|
|
init: async () => {
|
|
Env.set("AWS_PROFILE", "default")
|
|
// AWS_REGION might be set in the environment, use that or default
|
|
},
|
|
fn: async () => {
|
|
const providers = await Provider.list()
|
|
expect(providers["amazon-bedrock"]).toBeDefined()
|
|
// Should have some region set (either from env or default)
|
|
expect(providers["amazon-bedrock"].options?.region).toBeDefined()
|
|
expect(typeof providers["amazon-bedrock"].options?.region).toBe("string")
|
|
},
|
|
})
|
|
})
|
|
|
|
test("Bedrock: uses config region in provider options", async () => {
|
|
await using tmp = await tmpdir({
|
|
init: async (dir) => {
|
|
await Bun.write(
|
|
path.join(dir, "opencode.json"),
|
|
JSON.stringify({
|
|
$schema: "https://opencode.ai/config.json",
|
|
provider: {
|
|
"amazon-bedrock": {
|
|
options: {
|
|
region: "eu-north-1",
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
)
|
|
},
|
|
})
|
|
await Instance.provide({
|
|
directory: tmp.path,
|
|
init: async () => {
|
|
Env.set("AWS_PROFILE", "default")
|
|
},
|
|
fn: async () => {
|
|
const providers = await Provider.list()
|
|
const bedrockProvider = providers["amazon-bedrock"]
|
|
expect(bedrockProvider).toBeDefined()
|
|
expect(bedrockProvider.options?.region).toBe("eu-north-1")
|
|
},
|
|
})
|
|
})
|
|
|
|
test("Bedrock: respects config region for different instances", async () => {
|
|
// First instance with EU config
|
|
await using tmp1 = await tmpdir({
|
|
init: async (dir) => {
|
|
await Bun.write(
|
|
path.join(dir, "opencode.json"),
|
|
JSON.stringify({
|
|
$schema: "https://opencode.ai/config.json",
|
|
provider: {
|
|
"amazon-bedrock": {
|
|
options: {
|
|
region: "eu-west-1",
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
)
|
|
},
|
|
})
|
|
|
|
await Instance.provide({
|
|
directory: tmp1.path,
|
|
init: async () => {
|
|
Env.set("AWS_PROFILE", "default")
|
|
Env.set("AWS_REGION", "us-east-1")
|
|
},
|
|
fn: async () => {
|
|
const providers1 = await Provider.list()
|
|
expect(providers1["amazon-bedrock"].options?.region).toBe("eu-west-1")
|
|
},
|
|
})
|
|
|
|
// Second instance with US config
|
|
await using tmp2 = await tmpdir({
|
|
init: async (dir) => {
|
|
await Bun.write(
|
|
path.join(dir, "opencode.json"),
|
|
JSON.stringify({
|
|
$schema: "https://opencode.ai/config.json",
|
|
provider: {
|
|
"amazon-bedrock": {
|
|
options: {
|
|
region: "us-west-2",
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
)
|
|
},
|
|
})
|
|
|
|
await Instance.provide({
|
|
directory: tmp2.path,
|
|
init: async () => {
|
|
Env.set("AWS_PROFILE", "default")
|
|
Env.set("AWS_REGION", "eu-west-1")
|
|
},
|
|
fn: async () => {
|
|
const providers2 = await Provider.list()
|
|
expect(providers2["amazon-bedrock"].options?.region).toBe("us-west-2")
|
|
},
|
|
})
|
|
})
|
|
|
|
test("Bedrock: loads when bearer token from auth.json is present", async () => {
|
|
await using tmp = await tmpdir({
|
|
init: async (dir) => {
|
|
await Bun.write(
|
|
path.join(dir, "opencode.json"),
|
|
JSON.stringify({
|
|
$schema: "https://opencode.ai/config.json",
|
|
provider: {
|
|
"amazon-bedrock": {
|
|
options: {
|
|
region: "eu-west-1",
|
|
},
|
|
},
|
|
},
|
|
}),
|
|
)
|
|
},
|
|
})
|
|
|
|
// Setup auth.json with bearer token for amazon-bedrock
|
|
const authPath = path.join(Global.Path.data, "auth.json")
|
|
await Bun.write(
|
|
authPath,
|
|
JSON.stringify({
|
|
"amazon-bedrock": {
|
|
type: "api",
|
|
key: "test-bearer-token",
|
|
},
|
|
}),
|
|
)
|
|
|
|
await Instance.provide({
|
|
directory: tmp.path,
|
|
init: async () => {
|
|
// Clear env vars so only auth.json should trigger autoload
|
|
Env.set("AWS_PROFILE", "")
|
|
Env.set("AWS_ACCESS_KEY_ID", "")
|
|
Env.set("AWS_BEARER_TOKEN_BEDROCK", "")
|
|
},
|
|
fn: async () => {
|
|
const providers = await Provider.list()
|
|
expect(providers["amazon-bedrock"]).toBeDefined()
|
|
expect(providers["amazon-bedrock"].options?.region).toBe("eu-west-1")
|
|
},
|
|
})
|
|
})
|