62 lines
2.6 KiB
JavaScript
62 lines
2.6 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
|
|
const { buildDuplicateApiSourceName, buildDuplicateApiSource } = require('../src/web/routes/data-sources/api-sources/duplicate');
|
|
const { buildApiSourceFormViewModel } = require('../src/web/routes/data-sources/api-sources/form-view-model');
|
|
|
|
test('api source duplicate helper copies editable fields and resets runtime state', () => {
|
|
const source = {
|
|
id: 9,
|
|
name: 'Source A',
|
|
api_url: 'https://example.com/api',
|
|
auth_method: 'bearer',
|
|
auth_username: 'user',
|
|
auth_password: 'pass',
|
|
auth_bearer_token: 'token',
|
|
auth_header_name: 'X-API-Key',
|
|
auth_header_value: 'secret',
|
|
items_path: 'items',
|
|
update_interval_value: 15,
|
|
update_interval_unit: 'minutes',
|
|
last_pulled_at: '2026-08-01T12:00:00.000Z',
|
|
last_pull_error: 'Bad response',
|
|
last_response_status: 500,
|
|
last_response_content_type: 'application/json',
|
|
last_response_json: '{"ok":false}'
|
|
};
|
|
|
|
const duplicate = buildDuplicateApiSource(source, buildDuplicateApiSourceName(source.name));
|
|
|
|
assert.equal(duplicate.id, null);
|
|
assert.equal(duplicate.name, 'Copy of Source A');
|
|
assert.equal(duplicate.api_url, 'https://example.com/api');
|
|
assert.equal(duplicate.apiUrl, 'https://example.com/api');
|
|
assert.equal(duplicate.authMethod, 'bearer');
|
|
assert.equal(duplicate.authUsername, 'user');
|
|
assert.equal(duplicate.authPassword, 'pass');
|
|
assert.equal(duplicate.authBearerToken, 'token');
|
|
assert.equal(duplicate.authHeaderName, 'X-API-Key');
|
|
assert.equal(duplicate.authHeaderValue, 'secret');
|
|
assert.equal(duplicate.itemsPath, 'items');
|
|
assert.equal(duplicate.lastPulledAt, null);
|
|
assert.equal(duplicate.lastPullError, '');
|
|
assert.equal(duplicate.lastResponseStatus, null);
|
|
assert.equal(duplicate.lastResponseContentType, '');
|
|
assert.equal(duplicate.lastResponseJson, '');
|
|
});
|
|
|
|
test('api source duplicate form model keeps info toast variant', () => {
|
|
const model = buildApiSourceFormViewModel({ id: null, name: 'Source A' }, 'Review the copied values and save when ready.', { permissionKeys: ['api-sources.create'] }, { messageVariant: 'info', showSaveSecondaryActions: true }, false);
|
|
|
|
assert.equal(model.messageVariant, 'info');
|
|
assert.equal(model.showSaveSecondaryActions, true);
|
|
});
|
|
|
|
test('api source list template includes duplicate action', () => {
|
|
const template = fs.readFileSync(path.join(__dirname, '..', 'src', 'web', 'views', 'data-sources', 'api-sources', 'list.hbs'), 'utf8');
|
|
|
|
assert.match(template, /\/data-sources\/api-sources\/{\{id\}\}\/duplicate/);
|
|
assert.match(template, />Dupe<\/a>/);
|
|
}); |