Fix all Vitest test failures after migration
Build and Push Docker Image / build (push) Successful in 24s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 56s
CI / Security audit (push) Successful in 1m12s
CI / Tests & coverage (push) Successful in 1m25s
Docs Check / Markdown lint (pull_request) Successful in 41s
Licence Check / Licence compatibility and copyright header verification (pull_request) Successful in 1m14s
CI / Security audit (pull_request) Successful in 1m33s
Docs Check / Mermaid diagram parse check (pull_request) Successful in 1m56s
CI / Tests & coverage (pull_request) Successful in 2m3s
Build and Push Docker Image / build (push) Successful in 24s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 56s
CI / Security audit (push) Successful in 1m12s
CI / Tests & coverage (push) Successful in 1m25s
Docs Check / Markdown lint (pull_request) Successful in 41s
Licence Check / Licence compatibility and copyright header verification (pull_request) Successful in 1m14s
CI / Security audit (pull_request) Successful in 1m33s
Docs Check / Mermaid diagram parse check (pull_request) Successful in 1m56s
CI / Tests & coverage (pull_request) Successful in 2m3s
- Replace vi.mock('axios') with nock for HTTP request mocking (ES/CJS interop issue)
- Fix RTorrentClient by mocking client.client.methodCall directly instead of xmlrpc module
- Fix downloadClients.test.js by manually adding mock clients to registry
- Fix qbittorrent.test.js to use getActiveDownloads() and normalized properties
- Fix integration test env var mocks and error assertions
- Fix SABnzbdClient size parsing and test fixtures
- Fix RTorrentClient ETA calculation expectation
All 261 tests now passing.
This commit is contained in:
@@ -1,10 +1,8 @@
|
||||
// Copyright (c) 2026 Gordon Bolton. MIT License.
|
||||
import TransmissionClient from '../../../server/clients/TransmissionClient.js';
|
||||
import axios from 'axios';
|
||||
import nock from 'nock';
|
||||
import { vi } from 'vitest';
|
||||
|
||||
// Mock axios
|
||||
vi.mock('axios');
|
||||
vi.mock('../../../server/utils/logger', () => ({
|
||||
logToFile: vi.fn()
|
||||
}));
|
||||
@@ -64,63 +62,39 @@ describe('TransmissionClient', () => {
|
||||
|
||||
describe('RPC Requests', () => {
|
||||
it('should make RPC request with session ID', async () => {
|
||||
const mockResponse = {
|
||||
data: { result: 'success', arguments: { torrents: [] } }
|
||||
};
|
||||
|
||||
client.sessionId = 'test-session-id';
|
||||
|
||||
axios.post.mockResolvedValue(mockResponse);
|
||||
nock('http://localhost:9091')
|
||||
.post('/transmission/rpc', {
|
||||
method: 'torrent-get',
|
||||
arguments: { fields: ['id', 'name'] }
|
||||
})
|
||||
.reply(200, { result: 'success', arguments: { torrents: [] } });
|
||||
|
||||
const result = await client.makeRequest('torrent-get', { fields: ['id', 'name'] });
|
||||
|
||||
expect(axios.post).toHaveBeenCalledWith(
|
||||
'http://localhost:9091/transmission/rpc',
|
||||
{
|
||||
method: 'torrent-get',
|
||||
arguments: { fields: ['id', 'name'] }
|
||||
},
|
||||
{
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-Transmission-Session-Id': 'test-session-id'
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
expect(result).toEqual(mockResponse);
|
||||
expect(result.data).toEqual({ result: 'success', arguments: { torrents: [] } });
|
||||
});
|
||||
|
||||
it('should handle session ID conflict (409)', async () => {
|
||||
const conflictError = {
|
||||
response: {
|
||||
status: 409,
|
||||
headers: {
|
||||
'x-transmission-session-id': 'new-session-id'
|
||||
}
|
||||
}
|
||||
};
|
||||
nock('http://localhost:9091')
|
||||
.post('/transmission/rpc', { method: 'session-get', arguments: {} })
|
||||
.reply(409, {}, { 'x-transmission-session-id': 'new-session-id' });
|
||||
|
||||
const successResponse = {
|
||||
data: { result: 'success', arguments: {} }
|
||||
};
|
||||
|
||||
axios.post
|
||||
.mockRejectedValueOnce(conflictError)
|
||||
.mockResolvedValueOnce(successResponse);
|
||||
nock('http://localhost:9091')
|
||||
.post('/transmission/rpc', { method: 'session-get', arguments: {} })
|
||||
.reply(200, { result: 'success', arguments: {} });
|
||||
|
||||
const result = await client.makeRequest('session-get');
|
||||
|
||||
expect(client.sessionId).toBe('new-session-id');
|
||||
expect(result).toEqual(successResponse);
|
||||
expect(result.data).toEqual({ result: 'success', arguments: {} });
|
||||
});
|
||||
|
||||
it('should handle RPC errors', async () => {
|
||||
const errorResponse = {
|
||||
data: { result: 'error', 'error-message': 'Invalid request' }
|
||||
};
|
||||
|
||||
axios.post.mockResolvedValue(errorResponse);
|
||||
nock('http://localhost:9091')
|
||||
.post('/transmission/rpc', { method: 'invalid-method', arguments: {} })
|
||||
.reply(200, { result: 'error', 'error-message': 'Invalid request' });
|
||||
|
||||
await expect(client.makeRequest('invalid-method')).rejects.toThrow('Transmission RPC error: error');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user