fix(db-tests): seed a SecretBackend for Secret model tests
Some checks failed
CI/CD / lint (pull_request) Successful in 1m17s
CI/CD / test (pull_request) Successful in 1m36s
CI/CD / typecheck (pull_request) Successful in 3m13s
CI/CD / smoke (pull_request) Failing after 2m4s
CI/CD / build (pull_request) Successful in 4m43s
CI/CD / publish (pull_request) Has been skipped
Some checks failed
CI/CD / lint (pull_request) Successful in 1m17s
CI/CD / test (pull_request) Successful in 1m36s
CI/CD / typecheck (pull_request) Successful in 3m13s
CI/CD / smoke (pull_request) Failing after 2m4s
CI/CD / build (pull_request) Successful in 4m43s
CI/CD / publish (pull_request) Has been skipped
The four Secret tests in models.test.ts created rows via raw prisma.secret.create without a backendId, so the schema default '' violated Secret_backendId_fkey (that default only exists so 'db push' can add the column to pre-existing rows; real writes always carry a valid FK). Seed a plaintext backend per test, the same shape bootstrapSecretBackends creates, and clear SecretBackend rows in clearAllTables so nothing leaks between tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,7 @@ export async function clearAllTables(client: PrismaClient): Promise<void> {
|
|||||||
await client.prompt.deleteMany();
|
await client.prompt.deleteMany();
|
||||||
await client.projectServer.deleteMany();
|
await client.projectServer.deleteMany();
|
||||||
await client.secret.deleteMany();
|
await client.secret.deleteMany();
|
||||||
|
await client.secretBackend.deleteMany();
|
||||||
await client.session.deleteMany();
|
await client.session.deleteMany();
|
||||||
await client.project.deleteMany();
|
await client.project.deleteMany();
|
||||||
await client.mcpServer.deleteMany();
|
await client.mcpServer.deleteMany();
|
||||||
|
|||||||
@@ -184,9 +184,22 @@ describe('McpServer', () => {
|
|||||||
// ── Secret model ──
|
// ── Secret model ──
|
||||||
|
|
||||||
describe('Secret', () => {
|
describe('Secret', () => {
|
||||||
|
// New Secret rows always carry a valid backend FK (SecretService guarantees
|
||||||
|
// this; the schema-level `backendId @default("")` only exists so `db push`
|
||||||
|
// can add the column to pre-existing rows). Seed the plaintext backend each
|
||||||
|
// test the same way bootstrapSecretBackends does.
|
||||||
|
let backendId: string;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const backend = await prisma.secretBackend.create({
|
||||||
|
data: { name: 'default', type: 'plaintext', isDefault: true },
|
||||||
|
});
|
||||||
|
backendId = backend.id;
|
||||||
|
});
|
||||||
|
|
||||||
it('creates a secret with defaults', async () => {
|
it('creates a secret with defaults', async () => {
|
||||||
const secret = await prisma.secret.create({
|
const secret = await prisma.secret.create({
|
||||||
data: { name: 'my-secret' },
|
data: { name: 'my-secret', backendId },
|
||||||
});
|
});
|
||||||
expect(secret.name).toBe('my-secret');
|
expect(secret.name).toBe('my-secret');
|
||||||
expect(secret.data).toEqual({});
|
expect(secret.data).toEqual({});
|
||||||
@@ -197,6 +210,7 @@ describe('Secret', () => {
|
|||||||
const secret = await prisma.secret.create({
|
const secret = await prisma.secret.create({
|
||||||
data: {
|
data: {
|
||||||
name: 'api-keys',
|
name: 'api-keys',
|
||||||
|
backendId,
|
||||||
data: { API_KEY: 'test-key', API_SECRET: 'test-secret' },
|
data: { API_KEY: 'test-key', API_SECRET: 'test-secret' },
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -206,13 +220,15 @@ describe('Secret', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('enforces unique name', async () => {
|
it('enforces unique name', async () => {
|
||||||
await prisma.secret.create({ data: { name: 'dup-secret' } });
|
await prisma.secret.create({ data: { name: 'dup-secret', backendId } });
|
||||||
await expect(prisma.secret.create({ data: { name: 'dup-secret' } })).rejects.toThrow();
|
await expect(
|
||||||
|
prisma.secret.create({ data: { name: 'dup-secret', backendId } }),
|
||||||
|
).rejects.toThrow();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('updates data', async () => {
|
it('updates data', async () => {
|
||||||
const secret = await prisma.secret.create({
|
const secret = await prisma.secret.create({
|
||||||
data: { name: 'updatable', data: { KEY: 'old' } },
|
data: { name: 'updatable', backendId, data: { KEY: 'old' } },
|
||||||
});
|
});
|
||||||
const updated = await prisma.secret.update({
|
const updated = await prisma.secret.update({
|
||||||
where: { id: secret.id },
|
where: { id: secret.id },
|
||||||
|
|||||||
Reference in New Issue
Block a user