Menu
popagent
publicLatest change 6edc7e928c57dab23c0973ed3f7ee70b3ebb72d5 - Initial popagent baseline by AkurAI Build
import { beforeAll, describe, expect, test } from "bun:test";
import { RequestContext } from "@mastra/core/request-context";
import { recallSecret, storeSecret, updateSecret } from "./secrets";
beforeAll(() => {
process.env.POPAGENT_SECRET_KEY ??= crypto.getRandomValues(new Uint8Array(32)).toBase64();
});
function context(resourceId: string) {
const requestContext = new RequestContext();
requestContext.set("popagent.resourceId", resourceId);
return { requestContext } as never;
}
describe("secret tools", () => {
test("store, recall, and update one encrypted resource-scoped secret", async () => {
const resourceId = `secret-tools-${crypto.randomUUID()}`;
const toolContext = context(resourceId);
expect(await storeSecret.execute?.(
{ name: "database/password", value: "initial-value" },
toolContext,
)).toEqual({ stored: true, name: "database/password" });
expect(await recallSecret.execute?.(
{ name: "database/password" },
toolContext,
)).toEqual({ name: "database/password", value: "initial-value" });
expect(await updateSecret.execute?.(
{ name: "database/password", value: "replacement-value" },
toolContext,
)).toEqual({ updated: true, name: "database/password" });
expect(await recallSecret.execute?.(
{ name: "database/password" },
toolContext,
)).toEqual({ name: "database/password", value: "replacement-value" });
await expect(recallSecret.execute?.(
{ name: "database/password" },
context(`${resourceId}-other`),
)).rejects.toThrow("was not found");
});
test("store does not overwrite and update does not create", async () => {
const toolContext = context(`secret-tools-${crypto.randomUUID()}`);
await storeSecret.execute?.({ name: "api-token", value: "first" }, toolContext);
await expect(storeSecret.execute?.(
{ name: "api-token", value: "second" },
toolContext,
)).rejects.toThrow("already exists");
await expect(updateSecret.execute?.(
{ name: "missing", value: "value" },
toolContext,
)).rejects.toThrow("was not found");
});
});