94 lines
3.2 KiB
TypeScript
94 lines
3.2 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import { BaseExecutor } from "../../open-sse/executors/base.ts";
|
|
import type { ProviderCredentials } from "../../open-sse/executors/base.ts";
|
|
|
|
/**
|
|
* TestExecutor exposes protected resolveBaseUrl for unit testing.
|
|
*/
|
|
class TestExecutor extends BaseExecutor {
|
|
constructor(config = {}) {
|
|
super("test-provider", {
|
|
baseUrls: ["https://default.example/v1/chat/completions"],
|
|
...config,
|
|
});
|
|
}
|
|
|
|
/** Public wrapper for the protected method. */
|
|
publicResolveBaseUrl(credentials: ProviderCredentials | null, fallback?: string): string {
|
|
return this.resolveBaseUrl(credentials, fallback);
|
|
}
|
|
|
|
async transformRequest(model: string, body: unknown, stream: boolean) {
|
|
return body;
|
|
}
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Tests
|
|
// ---------------------------------------------------------------------------
|
|
|
|
test("resolveBaseUrl: returns credentials.providerSpecificData.baseUrl when set", () => {
|
|
const executor = new TestExecutor();
|
|
const result = executor.publicResolveBaseUrl({
|
|
apiKey: "key-1",
|
|
providerSpecificData: { baseUrl: "https://custom.example/v1/chat/completions" },
|
|
});
|
|
assert.equal(result, "https://custom.example/v1/chat/completions");
|
|
});
|
|
|
|
test("resolveBaseUrl: returns fallback when credentials have no baseUrl", () => {
|
|
const executor = new TestExecutor();
|
|
const result = executor.publicResolveBaseUrl(
|
|
{ apiKey: "key-1" },
|
|
"https://fallback.example/v1/chat/completions"
|
|
);
|
|
assert.equal(result, "https://fallback.example/v1/chat/completions");
|
|
});
|
|
|
|
test("resolveBaseUrl: returns config.baseUrl when no credentials and no fallback", () => {
|
|
const executor = new TestExecutor({
|
|
baseUrl: "https://config.example/v1/chat/completions",
|
|
});
|
|
const result = executor.publicResolveBaseUrl(null);
|
|
assert.equal(result, "https://config.example/v1/chat/completions");
|
|
});
|
|
|
|
test("resolveBaseUrl: returns empty string when nothing is configured", () => {
|
|
const executor = new TestExecutor();
|
|
const result = executor.publicResolveBaseUrl(null);
|
|
assert.equal(result, "");
|
|
});
|
|
|
|
test("resolveBaseUrl: credentials.baseUrl takes precedence over fallback", () => {
|
|
const executor = new TestExecutor();
|
|
const result = executor.publicResolveBaseUrl(
|
|
{
|
|
apiKey: "key-1",
|
|
providerSpecificData: { baseUrl: "https://cred.example/v1" },
|
|
},
|
|
"https://fallback.example/v1"
|
|
);
|
|
assert.equal(result, "https://cred.example/v1");
|
|
});
|
|
|
|
test("resolveBaseUrl: credentials.baseUrl takes precedence over config.baseUrl", () => {
|
|
const executor = new TestExecutor({
|
|
baseUrl: "https://config.example/v1",
|
|
});
|
|
const result = executor.publicResolveBaseUrl({
|
|
apiKey: "key-1",
|
|
providerSpecificData: { baseUrl: "https://cred.example/v1" },
|
|
});
|
|
assert.equal(result, "https://cred.example/v1");
|
|
});
|
|
|
|
test("resolveBaseUrl: fallback takes precedence over config.baseUrl", () => {
|
|
const executor = new TestExecutor({
|
|
baseUrl: "https://config.example/v1",
|
|
});
|
|
const result = executor.publicResolveBaseUrl({ apiKey: "key-1" }, "https://fallback.example/v1");
|
|
assert.equal(result, "https://fallback.example/v1");
|
|
});
|