Spaces:
Paused
Paused
| const assert = require('assert'); | |
| const fs = require('node:fs'); | |
| const os = require('node:os'); | |
| const path = require('node:path'); | |
| const { createApp } = require('../server/app'); | |
| function restoreEnv(snapshot) { | |
| for (const key of Object.keys(process.env)) { | |
| delete process.env[key]; | |
| } | |
| Object.assign(process.env, snapshot); | |
| } | |
| describe('server error envelope', function () { | |
| let envSnapshot; | |
| let tempDir; | |
| beforeEach(function () { | |
| envSnapshot = { ...process.env }; | |
| tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'k-vault-server-')); | |
| process.env.NODE_ENV = 'test'; | |
| process.env.PORT = '0'; | |
| process.env.DATA_DIR = tempDir; | |
| process.env.DB_PATH = path.join(tempDir, 'k-vault.db'); | |
| process.env.CHUNK_DIR = path.join(tempDir, 'chunks'); | |
| process.env.BASIC_USER = 'admin'; | |
| process.env.BASIC_PASS = 'admin'; | |
| process.env.SQLITE_BACKUP_ENABLED = 'false'; | |
| process.env.RUNTIME_SECRETS_AUTO_GENERATE = 'false'; | |
| delete process.env.CONFIG_ENCRYPTION_KEY; | |
| delete process.env.SESSION_SECRET; | |
| delete process.env.FILE_URL_SECRET; | |
| }); | |
| afterEach(function () { | |
| restoreEnv(envSnapshot); | |
| fs.rmSync(tempDir, { recursive: true, force: true }); | |
| }); | |
| it('returns JSON when encrypted storage config save fails', async function () { | |
| const app = await createApp(); | |
| const authHeader = `Basic ${Buffer.from('admin:admin').toString('base64')}`; | |
| const originalConsoleError = console.error; | |
| console.error = () => {}; | |
| try { | |
| const response = await app.fetch(new Request('http://localhost/api/storage', { | |
| method: 'POST', | |
| headers: { | |
| Accept: 'application/vnd.kvault.v2+json', | |
| Authorization: authHeader, | |
| 'Content-Type': 'application/json', | |
| 'X-KVault-Client': 'app-v2', | |
| }, | |
| body: JSON.stringify({ | |
| name: 'hf-space', | |
| type: 'huggingface', | |
| enabled: true, | |
| isDefault: true, | |
| config: { | |
| token: 'hf_xxx', | |
| repo: 'owner/dataset', | |
| }, | |
| }), | |
| })); | |
| const payload = JSON.parse(await response.text()); | |
| assert.strictEqual(response.status, 500); | |
| assert.match(response.headers.get('content-type') || '', /application\/json/i); | |
| assert.strictEqual(payload.success, false); | |
| assert.strictEqual(payload.error.code, 'SERVER_MISCONFIGURED'); | |
| assert.match(payload.error.message, /CONFIG_ENCRYPTION_KEY|SESSION_SECRET/i); | |
| assert.match(payload.error.detail, /CONFIG_ENCRYPTION_KEY/i); | |
| assert.ok(payload.traceId); | |
| } finally { | |
| console.error = originalConsoleError; | |
| await app.container.close(); | |
| } | |
| }); | |
| }); | |