Initial import: Music_Server, MusicFree, catalog-sync
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
"use strict";
|
||||
|
||||
const test = require("node:test");
|
||||
const assert = require("node:assert/strict");
|
||||
|
||||
function loadPluginFresh() {
|
||||
const modulePath = require.resolve("./music_server_lan");
|
||||
delete require.cache[modulePath];
|
||||
return require("./music_server_lan");
|
||||
}
|
||||
|
||||
function clearRuntimeEnv() {
|
||||
delete globalThis.env;
|
||||
}
|
||||
|
||||
test.afterEach(() => {
|
||||
clearRuntimeEnv();
|
||||
});
|
||||
|
||||
test("plugin.userVariables exposes public and lan base urls", () => {
|
||||
const plugin = loadPluginFresh();
|
||||
const keys = plugin.userVariables.map((item) => item.key);
|
||||
assert.deepEqual(keys, ["baseUrl", "lanBaseUrl", "accessToken"]);
|
||||
});
|
||||
|
||||
test("recommend requests use lan base url when lan health probe succeeds", async () => {
|
||||
const plugin = loadPluginFresh();
|
||||
plugin.__clearTestState();
|
||||
plugin.__setConfigForTests({
|
||||
baseUrl: "http://64.83.43.123:18081",
|
||||
lanBaseUrl: "http://192.168.5.43:18081",
|
||||
accessToken: "",
|
||||
});
|
||||
|
||||
const originalFetch = globalThis.fetch;
|
||||
const fetchCalls = [];
|
||||
globalThis.fetch = async (url, options) => {
|
||||
fetchCalls.push({ url, options });
|
||||
if (url === "http://192.168.5.43:18081/healthz") {
|
||||
return {
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () => JSON.stringify({ status: "ok" }),
|
||||
};
|
||||
}
|
||||
if (url === "http://192.168.5.43:18081/mf/v1/recommend/tags") {
|
||||
return {
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () =>
|
||||
JSON.stringify({
|
||||
pinned: [{ id: "all", title: "all" }],
|
||||
data: [],
|
||||
}),
|
||||
};
|
||||
}
|
||||
throw new Error(`Unexpected request: ${url}`);
|
||||
};
|
||||
|
||||
try {
|
||||
const result = await plugin.getRecommendSheetTags();
|
||||
assert.equal(result.pinned[0].id, "all");
|
||||
} finally {
|
||||
globalThis.fetch = originalFetch;
|
||||
}
|
||||
|
||||
assert.deepEqual(
|
||||
fetchCalls.map((entry) => entry.url),
|
||||
[
|
||||
"http://192.168.5.43:18081/healthz",
|
||||
"http://192.168.5.43:18081/mf/v1/recommend/tags",
|
||||
],
|
||||
);
|
||||
});
|
||||
|
||||
test("recommend requests fall back to public base url when lan health probe fails", async () => {
|
||||
const plugin = loadPluginFresh();
|
||||
plugin.__clearTestState();
|
||||
plugin.__setConfigForTests({
|
||||
baseUrl: "http://64.83.43.123:18081",
|
||||
lanBaseUrl: "http://192.168.5.43:18081",
|
||||
accessToken: "",
|
||||
});
|
||||
|
||||
const originalFetch = globalThis.fetch;
|
||||
const fetchCalls = [];
|
||||
globalThis.fetch = async (url, options) => {
|
||||
fetchCalls.push({ url, options });
|
||||
if (url === "http://192.168.5.43:18081/healthz") {
|
||||
throw new Error("connect failed");
|
||||
}
|
||||
if (url === "http://64.83.43.123:18081/mf/v1/recommend/tags") {
|
||||
return {
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () =>
|
||||
JSON.stringify({
|
||||
pinned: [{ id: "all", title: "all" }],
|
||||
data: [],
|
||||
}),
|
||||
};
|
||||
}
|
||||
throw new Error(`Unexpected request: ${url}`);
|
||||
};
|
||||
|
||||
try {
|
||||
const result = await plugin.getRecommendSheetTags();
|
||||
assert.equal(result.pinned[0].id, "all");
|
||||
} finally {
|
||||
globalThis.fetch = originalFetch;
|
||||
}
|
||||
|
||||
assert.deepEqual(
|
||||
fetchCalls.map((entry) => entry.url),
|
||||
[
|
||||
"http://192.168.5.43:18081/healthz",
|
||||
"http://64.83.43.123:18081/mf/v1/recommend/tags",
|
||||
],
|
||||
);
|
||||
});
|
||||
|
||||
test("getMediaSource joins relative stream url against lan base url after successful probe", async () => {
|
||||
const plugin = loadPluginFresh();
|
||||
plugin.__clearTestState();
|
||||
plugin.__setConfigForTests({
|
||||
baseUrl: "http://64.83.43.123:18081",
|
||||
lanBaseUrl: "http://192.168.5.43:18081",
|
||||
accessToken: "",
|
||||
});
|
||||
|
||||
const originalFetch = globalThis.fetch;
|
||||
const fetchCalls = [];
|
||||
globalThis.fetch = async (url, options) => {
|
||||
fetchCalls.push({ url, options });
|
||||
if (url === "http://192.168.5.43:18081/healthz") {
|
||||
return {
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () => JSON.stringify({ status: "ok" }),
|
||||
};
|
||||
}
|
||||
if (url === "http://192.168.5.43:18081/mf/v1/media/resolve") {
|
||||
return {
|
||||
ok: true,
|
||||
status: 200,
|
||||
text: async () =>
|
||||
JSON.stringify({
|
||||
stream: {
|
||||
url: "/mf/v1/media/stream/token-1",
|
||||
},
|
||||
selected_source: {
|
||||
quality: "super",
|
||||
},
|
||||
}),
|
||||
};
|
||||
}
|
||||
throw new Error(`Unexpected request: ${url}`);
|
||||
};
|
||||
|
||||
try {
|
||||
const result = await plugin.getMediaSource({ id: "song-1" }, "high");
|
||||
assert.deepEqual(result, {
|
||||
url: "http://192.168.5.43:18081/mf/v1/media/stream/token-1",
|
||||
headers: {},
|
||||
quality: "super",
|
||||
});
|
||||
} finally {
|
||||
globalThis.fetch = originalFetch;
|
||||
}
|
||||
|
||||
assert.deepEqual(
|
||||
fetchCalls.map((entry) => entry.url),
|
||||
[
|
||||
"http://192.168.5.43:18081/healthz",
|
||||
"http://192.168.5.43:18081/mf/v1/media/resolve",
|
||||
],
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user