feat: add isolated read-only gray deployment

This commit is contained in:
john
2026-07-21 17:07:13 +08:00
parent 280cae028b
commit 816af97bb0
5 changed files with 259 additions and 0 deletions
+29
View File
@@ -118,3 +118,32 @@ test('image_make admin routes require an admin user and an enabled service', asy
assert.equal(unavailable.status, 503);
});
});
test('gray read-only mode blocks admin writes while keeping reads available', async () => {
let updateCalled = false;
const service = {
getAdminConfig: async () => ({ config: { defaultProvider: 'mock', providers: {} } }),
updateAdminConfig: async () => {
updateCalled = true;
return { ok: true };
},
};
const services = {
...createServices({ imageMakeAdminConfigService: service }),
readOnlyMode: true,
};
await withServer(services, async (baseUrl) => {
const readResponse = await fetch(`${baseUrl}/admin-api/image-make/config`, { headers: adminHeaders });
assert.equal(readResponse.status, 200);
const writeResponse = await fetch(`${baseUrl}/admin-api/image-make/config`, {
method: 'PATCH',
headers: adminHeaders,
body: JSON.stringify({ defaultProvider: 'mock' }),
});
assert.equal(writeResponse.status, 423);
assert.match((await writeResponse.json()).message, /灰度只读模式/);
assert.equal(updateCalled, false);
});
});