157 lines
5.3 KiB
JavaScript
157 lines
5.3 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
IMAGE_MAKE_DEFAULT_CONFIG,
|
|
createImageMakeAdminConfigService,
|
|
normalizeImageMakeAdminConfig,
|
|
} from './image-make-admin-config.mjs';
|
|
|
|
function createPool(initial = null) {
|
|
let row = initial;
|
|
return {
|
|
async query(sql, params = []) {
|
|
const compact = String(sql).replace(/\s+/g, ' ').trim();
|
|
if (compact.startsWith('CREATE TABLE')) return [[]];
|
|
if (compact.startsWith('SELECT') && compact.includes('FROM h5_image_make_admin_config')) {
|
|
return [[row].filter(Boolean)];
|
|
}
|
|
if (compact.startsWith('INSERT INTO h5_image_make_admin_config')) {
|
|
row = {
|
|
config_json: params[1],
|
|
secrets_ciphertext: params[2],
|
|
secrets_iv: params[3],
|
|
secrets_tag: params[4],
|
|
updated_by: params[5],
|
|
updated_at: params[6],
|
|
};
|
|
return [[]];
|
|
}
|
|
return [[]];
|
|
},
|
|
};
|
|
}
|
|
|
|
const dashScopeLlmProviderService = {
|
|
async resolveDashScopeCredentials() {
|
|
return {
|
|
apiKey: 'sk-test-key-1234567890',
|
|
keyId: 'vision-key-1',
|
|
keyName: 'Qwen DashScope',
|
|
source: 'vision',
|
|
apiKeyMasked: 'sk-test********7890',
|
|
};
|
|
},
|
|
};
|
|
|
|
test('normalizeImageMakeAdminConfig keeps default provider aligned with enabled providers', () => {
|
|
const config = normalizeImageMakeAdminConfig({
|
|
defaultProvider: 'aliyun_bailian',
|
|
providers: {
|
|
aliyun_bailian: { enabled: false },
|
|
mock: { enabled: true },
|
|
},
|
|
});
|
|
assert.equal(config.defaultProvider, 'mock');
|
|
});
|
|
|
|
test('image make admin config reads DashScope key from unified model center', async () => {
|
|
const service = createImageMakeAdminConfigService(createPool(), {
|
|
env: { IMAGE_MAKE_TOKEN: 'runtime-token' },
|
|
llmProviderService: dashScopeLlmProviderService,
|
|
});
|
|
const saved = await service.updateAdminConfig({
|
|
defaultProvider: 'aliyun_bailian',
|
|
providers: {
|
|
mock: { enabled: false },
|
|
aliyun_bailian: {
|
|
enabled: true,
|
|
model: 'qwen-image-plus',
|
|
apiBase: 'https://dashscope.aliyuncs.com/api/v1',
|
|
},
|
|
},
|
|
}, { updatedBy: 'admin-1' });
|
|
assert.equal(saved.ok, true);
|
|
assert.equal(saved.config.providers.aliyun_bailian.apiKeyConfigured, true);
|
|
assert.match(saved.config.providers.aliyun_bailian.apiKeyMasked, /\*/);
|
|
assert.equal(saved.config.providers.aliyun_bailian.dashScopeSource, 'vision');
|
|
|
|
const runtime = await service.getRuntimeConfig();
|
|
assert.equal(runtime.ok, true);
|
|
assert.equal(runtime.defaultProvider, 'aliyun_bailian');
|
|
assert.equal(runtime.providers.aliyun_bailian.apiKey, 'sk-test-key-1234567890');
|
|
});
|
|
|
|
test('image make admin config rejects bailian when model center has no DashScope key', async () => {
|
|
const service = createImageMakeAdminConfigService(createPool(), {
|
|
env: { IMAGE_MAKE_TOKEN: 'runtime-token' },
|
|
llmProviderService: { async resolveDashScopeCredentials() { return null; } },
|
|
});
|
|
const result = await service.updateAdminConfig({
|
|
defaultProvider: 'aliyun_bailian',
|
|
providers: {
|
|
mock: { enabled: false },
|
|
aliyun_bailian: {
|
|
enabled: true,
|
|
model: 'qwen-image-plus',
|
|
apiBase: 'https://dashscope.aliyuncs.com/api/v1',
|
|
},
|
|
},
|
|
});
|
|
assert.equal(result.ok, false);
|
|
assert.match(result.message, /统一模型中心/);
|
|
});
|
|
|
|
test('image make admin config rejects invalid comfyui runtime', async () => {
|
|
const service = createImageMakeAdminConfigService(createPool(), {
|
|
env: { IMAGE_MAKE_TOKEN: 'runtime-token' },
|
|
llmProviderService: dashScopeLlmProviderService,
|
|
});
|
|
const result = await service.updateAdminConfig({
|
|
defaultProvider: 'comfyui',
|
|
providers: {
|
|
mock: { enabled: false },
|
|
comfyui: { enabled: true, apiBase: 'http://127.0.0.1:8188', checkpoint: '' },
|
|
},
|
|
});
|
|
assert.equal(result.ok, false);
|
|
assert.match(result.message, /Checkpoint/);
|
|
});
|
|
|
|
test('image make runtime request authorization uses IMAGE_MAKE_TOKEN', () => {
|
|
const service = createImageMakeAdminConfigService(createPool(), {
|
|
env: { IMAGE_MAKE_TOKEN: 'runtime-token' },
|
|
});
|
|
assert.equal(service.authorizeRuntimeRequest('runtime-token'), true);
|
|
assert.equal(service.authorizeRuntimeRequest('wrong'), false);
|
|
});
|
|
|
|
test('image make admin config falls back to legacy stored DashScope key', async () => {
|
|
const pool = createPool();
|
|
const service = createImageMakeAdminConfigService(pool, {
|
|
env: { IMAGE_MAKE_TOKEN: 'runtime-token' },
|
|
llmProviderService: { async resolveDashScopeCredentials() { return null; } },
|
|
});
|
|
await service.updateAdminConfig({
|
|
defaultProvider: 'aliyun_bailian',
|
|
providers: {
|
|
mock: { enabled: false },
|
|
aliyun_bailian: {
|
|
enabled: true,
|
|
model: 'qwen-image-plus',
|
|
apiBase: 'https://dashscope.aliyuncs.com/api/v1',
|
|
apiKey: 'sk-legacy-key-1234567890',
|
|
},
|
|
},
|
|
}, { updatedBy: 'admin-1' });
|
|
const runtime = await service.getRuntimeConfig();
|
|
assert.equal(runtime.ok, true);
|
|
assert.equal(runtime.providers.aliyun_bailian.apiKey, 'sk-legacy-key-1234567890');
|
|
});
|
|
|
|
test('image make default config starts with mock only', () => {
|
|
const config = normalizeImageMakeAdminConfig({});
|
|
assert.equal(config.defaultProvider, IMAGE_MAKE_DEFAULT_CONFIG.defaultProvider);
|
|
assert.equal(config.providers.mock.enabled, true);
|
|
assert.equal(config.providers.aliyun_bailian.enabled, false);
|
|
});
|