4aa3590017
Build and Push Docker Image / build (push) Successful in 53s
Docs Check / Markdown lint (push) Successful in 1m36s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 2m31s
CI / Security audit (push) Successful in 2m55s
Docs Check / Mermaid diagram parse check (push) Successful in 3m24s
CI / Swagger Validation & Coverage (push) Successful in 3m30s
CI / Tests & coverage (push) Successful in 3m50s
- Deleted redundant unit test file tests/unit/dashboard.test.js - Enabled skipped frontend DOM state and API tests in tests/frontend/state.test.js - Fixed Supertest client socket abort exception in SSE stream integration tests using new graceful testClose parameter - Consolidated duplicate helpers in server/routes/history.js and server/utils/arrRetrievers.js to unified services TagMatcher and DownloadAssembler - Added comprehensive unit tests for loadSecrets.js, PollingSonarrRetriever.js, PollingRadarrRetriever.js, and ombiHelpers.js - Achieved a 100% Vitest pass rate (834/834 tests) with robust code coverage
123 lines
4.2 KiB
JavaScript
123 lines
4.2 KiB
JavaScript
// Copyright (c) 2026 Gordon Bolton. MIT License.
|
|
import { describe, it, expect } from 'vitest';
|
|
|
|
const {
|
|
extractRequestedUser,
|
|
filterRequestsByUser
|
|
} = require('../../server/utils/ombiHelpers');
|
|
|
|
describe('ombiHelpers', () => {
|
|
describe('extractRequestedUser', () => {
|
|
it('returns empty string if request is null or undefined', () => {
|
|
expect(extractRequestedUser(null)).toBe('');
|
|
expect(extractRequestedUser(undefined)).toBe('');
|
|
});
|
|
|
|
it('returns requestedUser if requestedUser is a string', () => {
|
|
const req = { requestedUser: 'testuser', requestedByAlias: 'alias' };
|
|
expect(extractRequestedUser(req)).toBe('testuser');
|
|
});
|
|
|
|
it('falls back to requestedByAlias if requestedUser is missing', () => {
|
|
const req = { requestedByAlias: 'aliasuser' };
|
|
expect(extractRequestedUser(req)).toBe('aliasuser');
|
|
});
|
|
|
|
it('returns alias from requestedUser object if present', () => {
|
|
const req = {
|
|
requestedUser: {
|
|
alias: 'alias_val',
|
|
userAlias: 'userAlias_val',
|
|
userName: 'userName_val',
|
|
normalizedUserName: 'normalized_val'
|
|
}
|
|
};
|
|
expect(extractRequestedUser(req)).toBe('alias_val');
|
|
});
|
|
|
|
it('returns userAlias from requestedUser object if alias is missing', () => {
|
|
const req = {
|
|
requestedUser: {
|
|
userAlias: 'userAlias_val',
|
|
userName: 'userName_val',
|
|
normalizedUserName: 'normalized_val'
|
|
}
|
|
};
|
|
expect(extractRequestedUser(req)).toBe('userAlias_val');
|
|
});
|
|
|
|
it('returns userName from requestedUser object if alias/userAlias are missing', () => {
|
|
const req = {
|
|
requestedUser: {
|
|
userName: 'userName_val',
|
|
normalizedUserName: 'normalized_val'
|
|
}
|
|
};
|
|
expect(extractRequestedUser(req)).toBe('userName_val');
|
|
});
|
|
|
|
it('returns normalizedUserName from requestedUser object if other fields are missing', () => {
|
|
const req = {
|
|
requestedUser: {
|
|
normalizedUserName: 'normalized_val'
|
|
}
|
|
};
|
|
expect(extractRequestedUser(req)).toBe('normalized_val');
|
|
});
|
|
|
|
it('falls back to requestedByAlias when requestedUser is empty object {} (bug fix)', () => {
|
|
const req = {
|
|
requestedUser: {},
|
|
requestedByAlias: 'fallback_alias'
|
|
};
|
|
expect(extractRequestedUser(req)).toBe('fallback_alias');
|
|
});
|
|
|
|
it('returns empty string if requestedUser is empty object {} and requestedByAlias is missing', () => {
|
|
const req = {
|
|
requestedUser: {}
|
|
};
|
|
expect(extractRequestedUser(req)).toBe('');
|
|
});
|
|
});
|
|
|
|
describe('filterRequestsByUser', () => {
|
|
const movie1 = { id: 1, requestedUser: { userName: 'user1' }, type: 'movie' };
|
|
const movie2 = { id: 2, requestedUser: { userName: 'user2' }, type: 'movie' };
|
|
const tv1 = { id: 3, requestedUser: { alias: 'User1' }, type: 'tv' };
|
|
|
|
it('returns empty array if requests input is not an array', () => {
|
|
expect(filterRequestsByUser(null, 'user1', false)).toEqual([]);
|
|
expect(filterRequestsByUser({}, 'user1', false)).toEqual([]);
|
|
});
|
|
|
|
it('returns all requests unmodified if showAll is true', () => {
|
|
const requests = [movie1, movie2];
|
|
expect(filterRequestsByUser(requests, 'user1', true)).toEqual(requests);
|
|
});
|
|
|
|
it('returns all requests unmodified if username is falsy or missing', () => {
|
|
const requests = [movie1, movie2];
|
|
expect(filterRequestsByUser(requests, '', false)).toEqual(requests);
|
|
expect(filterRequestsByUser(requests, null, false)).toEqual(requests);
|
|
});
|
|
|
|
it('filters requests correctly for a specific user', () => {
|
|
const requests = [movie1, movie2, tv1];
|
|
const result = filterRequestsByUser(requests, 'user1', false);
|
|
expect(result).toHaveLength(2);
|
|
expect(result).toContainEqual(movie1);
|
|
expect(result).toContainEqual(tv1);
|
|
expect(result).not.toContainEqual(movie2);
|
|
});
|
|
|
|
it('performs case-insensitive filtering', () => {
|
|
const requests = [movie1, movie2, tv1];
|
|
const result = filterRequestsByUser(requests, 'USER1', false);
|
|
expect(result).toHaveLength(2);
|
|
expect(result).toContainEqual(movie1);
|
|
expect(result).toContainEqual(tv1);
|
|
});
|
|
});
|
|
});
|