Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ci/docker/install_node.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
set -e

"$(dirname $0)/install.sh" \
'https://nodejs.org/dist/v12.22.12/node-v12.22.12-linux-x64.tar.xz' \
'e6d052364bfa2c17da92cf31794100cfd709ba147415ddaeed2222eec9ca1469'
'https://unofficial-builds.nodejs.org/download/release/v22.22.0/node-v22.22.0-linux-x64-glibc-217.tar.xz' \
'db4a1d582e6fffcf7fb348149ca4ac8fa685699c5bc46cd7e22bbf9a7e673454'

export PATH="/usr/local/bin:$PATH"

Expand Down
6 changes: 3 additions & 3 deletions js/api_tests/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@
"license": "MIT",
"private": true,
"scripts": {
"test": "qunit src/main.js"
"test": "vitest"
},
"dependencies": {
"axios": "^0.21.2",
"eventsource": "^2.0.2",
"lodash": "^4.17.21",
"mkdirp": "^1.0.4",
"picomatch": "^4.0.3",
"qunit": "^2.19.3",
"rimraf": "^3.0.2"
"rimraf": "^3.0.2",
"vitest": "^4.0.17"
}
}
1 change: 0 additions & 1 deletion js/api_tests/sources.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ src/client_config_api_tests.js
src/event_expectation.js
src/http_features_tests.js
src/install_app.js
src/main.js
src/outputs_api_tests.js
src/permissions_tests.js
src/play_queue_api_tests.js
Expand Down
87 changes: 44 additions & 43 deletions js/api_tests/src/artwork_api_tests.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import path from 'path';
import { promisify } from 'util';
import fs from 'fs';
import q from 'qunit';
import { client, config, tracks, usePlayer } from './test_env.js';
import { describe, test, assert } from 'vitest';
import { client, config, tracks, setupPlayer } from './test_env.js';

const readFile = promisify(fs.readFile);
const readFile = fs.promises.readFile;

function getFile(name)
{
Expand All @@ -27,58 +26,60 @@ function getArtwork(playlist, item)
});
}

q.module('artwork 1', usePlayer());
describe('artwork 1', () => {
setupPlayer();

q.test('get from folder', async assert =>
{
await client.addPlaylistItems(0, [tracks.t1]);
await client.waitPlaybackMetadata();
test('get from folder', async () => {
await client.addPlaylistItems(0, [tracks.t1]);
await client.waitPlaybackMetadata();

const expected = await getFile('cover.png');
const response = await getArtwork(0, 0);
const expected = await getFile('cover.png');
const response = await getArtwork(0, 0);

assert.equal(response.status, 200);
assert.equal(response.headers['content-type'], 'image/png');
assert.ok(response.data.equals(expected));
});
assert.equal(response.status, 200);
assert.equal(response.headers['content-type'], 'image/png');
assert.ok(response.data.equals(expected));
});

q.test('get current', async assert =>
{
await client.addPlaylistItems(0, [tracks.t1]);
await client.play(0, 0);
await client.waitForState('playing');
await client.waitPlaybackMetadata();
test('get current', async () => {
await client.addPlaylistItems(0, [tracks.t1]);
await client.play(0, 0);
await client.waitForState('playing');
await client.waitPlaybackMetadata();

const expected = await getFile('cover.png');
const response = await getCurrentArtwork();
const expected = await getFile('cover.png');
const response = await getCurrentArtwork();

assert.equal(response.status, 200);
assert.equal(response.headers['content-type'], 'image/png');
assert.ok(response.data.equals(expected));
assert.equal(response.status, 200);
assert.equal(response.headers['content-type'], 'image/png');
assert.ok(response.data.equals(expected));
});
});

q.module('artwork 2', usePlayer());
describe('artwork 2', () => {
setupPlayer();

q.test('get from tag', async assert =>
{
await client.addPlaylistItems(0, [tracks.t2Alt]);
await client.waitPlaybackMetadata();
test('get from tag', async () => {
await client.addPlaylistItems(0, [tracks.t2Alt]);
await client.waitPlaybackMetadata();

const expected = await getFile('cover-white.png.hidden');
const response = await getArtwork(0, 0);
const expected = await getFile('cover-white.png.hidden');
const response = await getArtwork(0, 0);

assert.equal(response.status, 200);
assert.equal(response.headers['content-type'], 'image/png');
assert.ok(response.data.equals(expected));
assert.equal(response.status, 200);
assert.equal(response.headers['content-type'], 'image/png');
assert.ok(response.data.equals(expected));
});
});

q.module('artwork 3', usePlayer());
describe('artwork 3', () => {
setupPlayer();

q.test('missing', async assert =>
{
await client.addPlaylistItems(0, [tracks.t3]);
await client.waitPlaybackMetadata();
test('missing', async () => {
await client.addPlaylistItems(0, [tracks.t3]);
await client.waitPlaybackMetadata();

const response = await getArtwork(0, 0);
assert.equal(response.status, 404);
const response = await getArtwork(0, 0);
assert.equal(response.status, 404);
});
});
49 changes: 24 additions & 25 deletions js/api_tests/src/authentication_tests.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import q from 'qunit';
import { describe, test, assert } from 'vitest';
import lodash from 'lodash';
import { client, usePlayer } from './test_env.js';
import { client, setupPlayer } from './test_env.js';

const { startsWith } = lodash;

Expand Down Expand Up @@ -30,34 +30,33 @@ function makeRequest(config)
return client.handler.axios.get('api/player', fullConfig);
}

q.module('authentication', usePlayer({ pluginSettings, axiosConfig }));
describe('authentication', () => {
setupPlayer({ pluginSettings, axiosConfig });

q.test('require auth', async assert =>
{
const response = await makeRequest();

assert.equal(response.status, 401);
assert.ok(response.data && response.data.error);
assert.ok(startsWith(response.headers['www-authenticate'], 'Basic'));
});
test('require auth', async () => {
const response = await makeRequest();

q.test('invalid auth', async assert =>
{
const response = await makeRequest({
auth: { username: authUser, password: 'wrong' }
assert.equal(response.status, 401);
assert.ok(response.data && response.data.error);
assert.ok(startsWith(response.headers['www-authenticate'], 'Basic'));
});

assert.equal(response.status, 401);
assert.ok(response.data && response.data.error);
assert.ok(startsWith(response.headers['www-authenticate'], 'Basic'));
});
test('invalid auth', async () => {
const response = await makeRequest({
auth: { username: authUser, password: 'wrong' }
});

q.test('valid auth', async assert =>
{
const response = await makeRequest({
auth: { username: authUser, password: authPassword }
assert.equal(response.status, 401);
assert.ok(response.data && response.data.error);
assert.ok(startsWith(response.headers['www-authenticate'], 'Basic'));
});

assert.equal(response.status, 200);
assert.ok(response.data && response.data.player);
test('valid auth', async () => {
const response = await makeRequest({
auth: { username: authUser, password: authPassword }
});

assert.equal(response.status, 200);
assert.ok(response.data && response.data.player);
});
});
82 changes: 39 additions & 43 deletions js/api_tests/src/browser_api_tests.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import path from 'path';
import { promisify } from 'util';
import fs from 'fs';
import q from 'qunit';
import lodash from 'lodash';
import { client, config, usePlayer } from './test_env.js';
import { omit, sortBy } from 'lodash';
import { describe, test, assert } from 'vitest';
import { client, config, setupPlayer } from './test_env.js';

const { omit, sortBy } = lodash;

const readdir = promisify(fs.readdir);
const stat = promisify(fs.stat);
const readdir = fs.promises.readdir;
const stat = fs.promises.stat;

const musicSubdir = path.join(config.musicDir, 'subdir');

Expand Down Expand Up @@ -50,38 +47,37 @@ async function getFileSystemEntriesDirect(dirPath)
return sortBy(items, ['type', 'path']);
}

q.module('browser api', usePlayer());

q.test('get roots', async assert =>
{
const result = await client.getFileSystemRoots()
const actual = normalizeResult(result.roots);
const expected = [{
name: config.musicDir,
path: config.musicDir,
type: 'D',
}];

assert.ok(isPathSeparator(result.pathSeparator));
assert.deepEqual(actual, expected);
});

q.test('get entries root', async assert =>
{
const result = await client.getFileSystemEntries(config.musicDir);
const expected = await getFileSystemEntriesDirect(config.musicDir);
const actual = normalizeResult(result.entries);

assert.ok(isPathSeparator(result.pathSeparator));
assert.deepEqual(actual, expected);
});

q.test('get entries subdir', async assert =>
{
const result = await client.getFileSystemEntries(musicSubdir);
const expected = await getFileSystemEntriesDirect(musicSubdir);
const actual = normalizeResult(result.entries);

assert.ok(isPathSeparator(result.pathSeparator));
assert.deepEqual(actual, expected);
});
describe('browser api', () => {
setupPlayer();

test('get roots', async () => {
const result = await client.getFileSystemRoots()
const actual = normalizeResult(result.roots);
const expected = [{
name: config.musicDir,
path: config.musicDir,
type: 'D',
}];

assert.ok(isPathSeparator(result.pathSeparator));
assert.deepEqual(actual, expected);
});

test('get entries root', async () => {
const result = await client.getFileSystemEntries(config.musicDir);
const expected = await getFileSystemEntriesDirect(config.musicDir);
const actual = normalizeResult(result.entries);

assert.ok(isPathSeparator(result.pathSeparator));
assert.deepEqual(actual, expected);
});

test('get entries subdir', async () => {
const result = await client.getFileSystemEntries(musicSubdir);
const expected = await getFileSystemEntriesDirect(musicSubdir);
const actual = normalizeResult(result.entries);

assert.ok(isPathSeparator(result.pathSeparator));
assert.deepEqual(actual, expected);
});
});
31 changes: 16 additions & 15 deletions js/api_tests/src/client_config_api_tests.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
import q from 'qunit';
import { client, usePlayer } from './test_env.js';
import { describe, test, assert } from 'vitest';
import { client, setupPlayer } from './test_env.js';

q.module('client config api', usePlayer());
describe('client config api', () => {
setupPlayer();

q.test('client config', async assert =>
{
const id = 'api_test_' + Math.round(1000000 * Math.random());
test('client config', async () => {
const id = 'api_test_' + Math.round(1000000 * Math.random());

const config1 = await client.getClientConfig(id);
assert.equal(config1, null);
const config1 = await client.getClientConfig(id);
assert.equal(config1, null);

const value = { prop1: true, prop2: 'hello', prop3: { prop4: 123, prop5: [ 'item' ] } };
await client.setClientConfig(id, value);
const value = { prop1: true, prop2: 'hello', prop3: { prop4: 123, prop5: ['item'] } };
await client.setClientConfig(id, value);

const config2 = await client.getClientConfig(id);
assert.deepEqual(config2, value);
const config2 = await client.getClientConfig(id);
assert.deepEqual(config2, value);

await client.removeClientConfig(id);
const config3 = await client.getClientConfig(id);
assert.deepEqual(config3, null);
await client.removeClientConfig(id);
const config3 = await client.getClientConfig(id);
assert.deepEqual(config3, null);
});
});
Loading