chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { describe, test } from "node:test";
|
||||
import { z } from "zod";
|
||||
|
||||
// ─── maskApiKey ───────────────────────────────────────
|
||||
// Exact replica of the function from
|
||||
// src/app/api/v1/agents/credentials/route.ts:31-34
|
||||
|
||||
function maskApiKey(key: string): string {
|
||||
if (key.length <= 4) return "****";
|
||||
return "****" + key.slice(-4);
|
||||
}
|
||||
|
||||
// ─── SaveCredentialSchema ─────────────────────────────
|
||||
// Exact replica of the schema from
|
||||
// src/app/api/v1/agents/credentials/route.ts:13-17
|
||||
|
||||
const SaveCredentialSchema = z.object({
|
||||
providerId: z.enum(["jules", "devin", "codex-cloud"]),
|
||||
apiKey: z.string().min(1),
|
||||
baseUrl: z.string().url().optional(),
|
||||
});
|
||||
|
||||
describe("cloud-agent credentials API — maskApiKey", () => {
|
||||
test('returns "****" for a 1-char key', () => {
|
||||
assert.equal(maskApiKey("x"), "****");
|
||||
});
|
||||
|
||||
test('returns "****" for exactly 4-char key', () => {
|
||||
assert.equal(maskApiKey("abcd"), "****");
|
||||
});
|
||||
|
||||
test('returns "****" for empty string', () => {
|
||||
assert.equal(maskApiKey(""), "****");
|
||||
});
|
||||
|
||||
test("shows last 4 chars for a longer key", () => {
|
||||
assert.equal(maskApiKey("sk-1234567890"), "****7890");
|
||||
});
|
||||
|
||||
test("shows last 4 chars for a 5-char key", () => {
|
||||
assert.equal(maskApiKey("abcde"), "****bcde");
|
||||
});
|
||||
|
||||
test("always starts with ****", () => {
|
||||
const result = maskApiKey("very-long-api-key-here");
|
||||
assert.ok(result.startsWith("****"));
|
||||
});
|
||||
});
|
||||
|
||||
describe("cloud-agent credentials API — SaveCredentialSchema validation", () => {
|
||||
test("accepts valid body with all required fields", () => {
|
||||
const result = SaveCredentialSchema.safeParse({
|
||||
providerId: "jules",
|
||||
apiKey: "my-secret-key",
|
||||
});
|
||||
assert.equal(result.success, true);
|
||||
if (result.success) {
|
||||
assert.equal(result.data.providerId, "jules");
|
||||
assert.equal(result.data.apiKey, "my-secret-key");
|
||||
}
|
||||
});
|
||||
|
||||
test("accepts valid body with optional baseUrl", () => {
|
||||
const result = SaveCredentialSchema.safeParse({
|
||||
providerId: "devin",
|
||||
apiKey: "key123",
|
||||
baseUrl: "https://api.example.com",
|
||||
});
|
||||
assert.equal(result.success, true);
|
||||
if (result.success) {
|
||||
assert.equal(result.data.baseUrl, "https://api.example.com");
|
||||
}
|
||||
});
|
||||
|
||||
test("accepts all three valid providerIds", () => {
|
||||
for (const id of ["jules", "devin", "codex-cloud"]) {
|
||||
const result = SaveCredentialSchema.safeParse({ providerId: id, apiKey: "k" });
|
||||
assert.equal(result.success, true, `Expected success for providerId="${id}"`);
|
||||
}
|
||||
});
|
||||
|
||||
test("rejects missing providerId", () => {
|
||||
const result = SaveCredentialSchema.safeParse({ apiKey: "my-key" });
|
||||
assert.equal(result.success, false);
|
||||
});
|
||||
|
||||
test("rejects invalid providerId", () => {
|
||||
const result = SaveCredentialSchema.safeParse({
|
||||
providerId: "unknown-agent",
|
||||
apiKey: "my-key",
|
||||
});
|
||||
assert.equal(result.success, false);
|
||||
});
|
||||
|
||||
test("rejects empty apiKey", () => {
|
||||
const result = SaveCredentialSchema.safeParse({
|
||||
providerId: "jules",
|
||||
apiKey: "",
|
||||
});
|
||||
assert.equal(result.success, false);
|
||||
});
|
||||
|
||||
test("rejects missing apiKey", () => {
|
||||
const result = SaveCredentialSchema.safeParse({ providerId: "jules" });
|
||||
assert.equal(result.success, false);
|
||||
});
|
||||
|
||||
test("rejects invalid baseUrl format", () => {
|
||||
const result = SaveCredentialSchema.safeParse({
|
||||
providerId: "jules",
|
||||
apiKey: "key",
|
||||
baseUrl: "not-a-url",
|
||||
});
|
||||
assert.equal(result.success, false);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user