117 lines
5.0 KiB
JavaScript
117 lines
5.0 KiB
JavaScript
/**
|
|
* ICD Test Runner — CRUD: Models
|
|
* Model preference lifecycle — hide/unhide, bulk, validation.
|
|
*/
|
|
(function () {
|
|
'use strict';
|
|
var T = window.ICD;
|
|
if (!T) return;
|
|
if (!T.crud) T.crud = {};
|
|
|
|
T.crud.models = async function (testTag) {
|
|
|
|
// ── Model Preferences CRUD ──
|
|
// Depends on provider setup from smoke tier — needs at least one model in /models/enabled
|
|
|
|
await T.test('crud', 'models', 'GET /models/preferences (initially empty for test user)', async function () {
|
|
var d = await T.apiGet('/models/preferences');
|
|
T.assertHasKey(d, 'data', '/models/preferences');
|
|
T.assert(Array.isArray(d.data), 'data should be array');
|
|
});
|
|
|
|
// Find a model to use for preference tests
|
|
var prefModelId = null;
|
|
var prefConfigId = null;
|
|
await T.test('crud', 'models', 'GET /models/enabled (pick model for pref test)', async function () {
|
|
var d = await T.apiGet('/models/enabled');
|
|
var models = d.data || [];
|
|
var catalog = models.filter(function (m) { return !m.is_persona && m.provider_config_id; });
|
|
if (catalog.length === 0) return; // no catalog models yet — skip pref write tests
|
|
prefModelId = catalog[0].model_id;
|
|
prefConfigId = catalog[0].provider_config_id;
|
|
});
|
|
|
|
if (prefModelId && prefConfigId) {
|
|
await T.test('crud', 'models', 'PUT /models/preferences (hide model)', async function () {
|
|
var d = await T.apiPut('/models/preferences', {
|
|
model_id: prefModelId,
|
|
provider_config_id: prefConfigId,
|
|
hidden: true
|
|
});
|
|
T.assert(d.message === 'preference updated', 'expected success message');
|
|
});
|
|
|
|
await T.test('crud', 'models', 'GET /models/preferences (verify hidden)', async function () {
|
|
var d = await T.apiGet('/models/preferences');
|
|
var prefs = d.data || [];
|
|
var found = prefs.find(function (p) {
|
|
return p.model_id === prefModelId && p.provider_config_id === prefConfigId;
|
|
});
|
|
T.assert(found, 'preference entry should exist after PUT');
|
|
T.assert(found.hidden === true, 'hidden should be true');
|
|
T.assertShape(found, T.S.modelPreference, 'preference');
|
|
});
|
|
|
|
await T.test('crud', 'models', 'GET /models/enabled (hidden flag propagated)', async function () {
|
|
var d = await T.apiGet('/models/enabled');
|
|
var models = d.data || [];
|
|
var found = models.find(function (m) {
|
|
return m.model_id === prefModelId && m.provider_config_id === prefConfigId;
|
|
});
|
|
if (found) {
|
|
T.assert(found.hidden === true, 'model should have hidden=true in /models/enabled');
|
|
}
|
|
});
|
|
|
|
await T.test('crud', 'models', 'PUT /models/preferences (unhide — upsert)', async function () {
|
|
var d = await T.apiPut('/models/preferences', {
|
|
model_id: prefModelId,
|
|
provider_config_id: prefConfigId,
|
|
hidden: false
|
|
});
|
|
T.assert(d.message === 'preference updated', 'expected success message');
|
|
});
|
|
|
|
await T.test('crud', 'models', 'GET /models/preferences (verify unhidden, no dup)', async function () {
|
|
var d = await T.apiGet('/models/preferences');
|
|
var prefs = d.data || [];
|
|
var matches = prefs.filter(function (p) {
|
|
return p.model_id === prefModelId && p.provider_config_id === prefConfigId;
|
|
});
|
|
T.assert(matches.length === 1, 'upsert should not duplicate: got ' + matches.length);
|
|
T.assert(matches[0].hidden === false, 'hidden should be false after unhide');
|
|
});
|
|
|
|
await T.test('crud', 'models', 'PUT /models/preferences (missing provider_config_id → 400)', async function () {
|
|
var token = await T.getAuthToken();
|
|
var d = await T.authFetch(token, 'PUT', '/models/preferences', { model_id: prefModelId, hidden: true });
|
|
T.assertStatus(d, 400, 'missing provider_config_id');
|
|
});
|
|
|
|
await T.test('crud', 'models', 'PUT /models/preferences (missing model_id → 400)', async function () {
|
|
var token = await T.getAuthToken();
|
|
var d = await T.authFetch(token, 'PUT', '/models/preferences', { provider_config_id: prefConfigId, hidden: true });
|
|
T.assertStatus(d, 400, 'missing model_id');
|
|
});
|
|
|
|
await T.test('crud', 'models', 'POST /models/preferences/bulk (hide)', async function () {
|
|
var d = await T.apiPost('/models/preferences/bulk', {
|
|
entries: [{ model_id: prefModelId, provider_config_id: prefConfigId }],
|
|
hidden: true
|
|
});
|
|
T.assert(d.message === 'preferences updated', 'expected bulk success message');
|
|
T.assert(d.count === 1, 'count should be 1');
|
|
});
|
|
|
|
await T.test('crud', 'models', 'POST /models/preferences/bulk (unhide cleanup)', async function () {
|
|
var d = await T.apiPost('/models/preferences/bulk', {
|
|
entries: [{ model_id: prefModelId, provider_config_id: prefConfigId }],
|
|
hidden: false
|
|
});
|
|
T.assert(d.message === 'preferences updated', 'expected bulk success message');
|
|
});
|
|
}
|
|
|
|
};
|
|
})();
|