Ability to cache subsonic artist images locally on disk (#61)

This commit is contained in:
Simon J
2021-10-03 16:36:50 +11:00
committed by GitHub
parent da1860d556
commit d7a7747fab
9 changed files with 404 additions and 142 deletions

View File

@@ -66,11 +66,13 @@ describe("envVar", () => {
describe("validationPattern", () => {
it("should fail when the value does not match the pattern", () => {
expect(
() => envVar("bnb-var", {
expect(() =>
envVar("bnb-var", {
validationPattern: /^foobar$/,
})
).toThrowError(`Invalid value specified for 'bnb-var', must match ${/^foobar$/}`)
).toThrowError(
`Invalid value specified for 'bnb-var', must match ${/^foobar$/}`
);
});
});
});
@@ -117,7 +119,7 @@ describe("config", () => {
}
describe("bonobUrl", () => {
["BNB_URL", "BONOB_URL", "BONOB_WEB_ADDRESS"].forEach(key => {
["BNB_URL", "BONOB_URL", "BONOB_WEB_ADDRESS"].forEach((key) => {
describe(`when ${key} is specified`, () => {
it("should be used", () => {
const url = "http://bonob1.example.com:8877/";
@@ -126,7 +128,7 @@ describe("config", () => {
process.env["BONOB_URL"] = "";
process.env["BONOB_WEB_ADDRESS"] = "";
process.env[key] = url;
expect(config().bonobUrl.href()).toEqual(url);
});
});
@@ -163,69 +165,73 @@ describe("config", () => {
describe("icons", () => {
describe("foregroundColor", () => {
["BNB_ICON_FOREGROUND_COLOR", "BONOB_ICON_FOREGROUND_COLOR"].forEach(k => {
describe(`when ${k} is not specified`, () => {
it(`should default to undefined`, () => {
expect(config().icons.foregroundColor).toEqual(undefined);
["BNB_ICON_FOREGROUND_COLOR", "BONOB_ICON_FOREGROUND_COLOR"].forEach(
(k) => {
describe(`when ${k} is not specified`, () => {
it(`should default to undefined`, () => {
expect(config().icons.foregroundColor).toEqual(undefined);
});
});
});
describe(`when ${k} is ''`, () => {
it(`should default to undefined`, () => {
process.env[k] = "";
expect(config().icons.foregroundColor).toEqual(undefined);
describe(`when ${k} is ''`, () => {
it(`should default to undefined`, () => {
process.env[k] = "";
expect(config().icons.foregroundColor).toEqual(undefined);
});
});
});
describe(`when ${k} is specified`, () => {
it(`should use it`, () => {
process.env[k] = "pink";
expect(config().icons.foregroundColor).toEqual("pink");
describe(`when ${k} is specified`, () => {
it(`should use it`, () => {
process.env[k] = "pink";
expect(config().icons.foregroundColor).toEqual("pink");
});
});
});
describe(`when ${k} is an invalid string`, () => {
it(`should blow up`, () => {
process.env[k] = "#dfasd";
expect(() => config()).toThrow(
`Invalid value specified for 'BNB_ICON_FOREGROUND_COLOR', must match ${WORD}`
);
describe(`when ${k} is an invalid string`, () => {
it(`should blow up`, () => {
process.env[k] = "#dfasd";
expect(() => config()).toThrow(
`Invalid value specified for 'BNB_ICON_FOREGROUND_COLOR', must match ${WORD}`
);
});
});
});
});
}
);
});
describe("backgroundColor", () => {
["BNB_ICON_BACKGROUND_COLOR", "BONOB_ICON_BACKGROUND_COLOR"].forEach(k => {
describe(`when ${k} is not specified`, () => {
it(`should default to undefined`, () => {
expect(config().icons.backgroundColor).toEqual(undefined);
["BNB_ICON_BACKGROUND_COLOR", "BONOB_ICON_BACKGROUND_COLOR"].forEach(
(k) => {
describe(`when ${k} is not specified`, () => {
it(`should default to undefined`, () => {
expect(config().icons.backgroundColor).toEqual(undefined);
});
});
});
describe(`when ${k} is ''`, () => {
it(`should default to undefined`, () => {
process.env[k] = "";
expect(config().icons.backgroundColor).toEqual(undefined);
describe(`when ${k} is ''`, () => {
it(`should default to undefined`, () => {
process.env[k] = "";
expect(config().icons.backgroundColor).toEqual(undefined);
});
});
});
describe(`when ${k} is specified`, () => {
it(`should use it`, () => {
process.env[k] = "blue";
expect(config().icons.backgroundColor).toEqual("blue");
describe(`when ${k} is specified`, () => {
it(`should use it`, () => {
process.env[k] = "blue";
expect(config().icons.backgroundColor).toEqual("blue");
});
});
});
describe(`when ${k} is an invalid string`, () => {
it(`should blow up`, () => {
process.env[k] = "#red";
expect(() => config()).toThrow(
`Invalid value specified for 'BNB_ICON_BACKGROUND_COLOR', must match ${WORD}`
);
describe(`when ${k} is an invalid string`, () => {
it(`should blow up`, () => {
process.env[k] = "#red";
expect(() => config()).toThrow(
`Invalid value specified for 'BNB_ICON_BACKGROUND_COLOR', must match ${WORD}`
);
});
});
});
});
}
);
});
});
@@ -234,7 +240,7 @@ describe("config", () => {
expect(config().secret).toEqual("bonob");
});
["BNB_SECRET", "BONOB_SECRET"].forEach(key => {
["BNB_SECRET", "BONOB_SECRET"].forEach((key) => {
it(`should be overridable using ${key}`, () => {
process.env[key] = "new secret";
expect(config().secret).toEqual("new secret");
@@ -248,7 +254,7 @@ describe("config", () => {
expect(config().sonos.serviceName).toEqual("bonob");
});
["BNB_SONOS_SERVICE_NAME", "BONOB_SONOS_SERVICE_NAME"].forEach(k => {
["BNB_SONOS_SERVICE_NAME", "BONOB_SONOS_SERVICE_NAME"].forEach((k) => {
it("should be overridable", () => {
process.env[k] = "foobar1000";
expect(config().sonos.serviceName).toEqual("foobar1000");
@@ -256,21 +262,23 @@ describe("config", () => {
});
});
["BNB_SONOS_DEVICE_DISCOVERY", "BONOB_SONOS_DEVICE_DISCOVERY"].forEach(k => {
describeBooleanConfigValue(
"deviceDiscovery",
k,
true,
(config) => config.sonos.discovery.enabled
);
});
["BNB_SONOS_DEVICE_DISCOVERY", "BONOB_SONOS_DEVICE_DISCOVERY"].forEach(
(k) => {
describeBooleanConfigValue(
"deviceDiscovery",
k,
true,
(config) => config.sonos.discovery.enabled
);
}
);
describe("seedHost", () => {
it("should default to undefined", () => {
expect(config().sonos.discovery.seedHost).toBeUndefined();
});
["BNB_SONOS_SEED_HOST", "BONOB_SONOS_SEED_HOST"].forEach(k => {
["BNB_SONOS_SEED_HOST", "BONOB_SONOS_SEED_HOST"].forEach((k) => {
it("should be overridable", () => {
process.env[k] = "123.456.789.0";
expect(config().sonos.discovery.seedHost).toEqual("123.456.789.0");
@@ -278,7 +286,7 @@ describe("config", () => {
});
});
["BNB_SONOS_AUTO_REGISTER", "BONOB_SONOS_AUTO_REGISTER"].forEach(k => {
["BNB_SONOS_AUTO_REGISTER", "BONOB_SONOS_AUTO_REGISTER"].forEach((k) => {
describeBooleanConfigValue(
"autoRegister",
k,
@@ -287,13 +295,12 @@ describe("config", () => {
);
});
describe("sid", () => {
it("should default to 246", () => {
expect(config().sonos.sid).toEqual(246);
});
["BNB_SONOS_SERVICE_ID", "BONOB_SONOS_SERVICE_ID"].forEach(k => {
["BNB_SONOS_SERVICE_ID", "BONOB_SONOS_SERVICE_ID"].forEach((k) => {
it("should be overridable", () => {
process.env[k] = "786";
expect(config().sonos.sid).toEqual(786);
@@ -304,28 +311,34 @@ describe("config", () => {
describe("subsonic", () => {
describe("url", () => {
["BNB_SUBSONIC_URL", "BONOB_SUBSONIC_URL", "BONOB_NAVIDROME_URL"].forEach(k => {
describe(`when ${k} is not specified`, () => {
it(`should default to http://${hostname()}:4533`, () => {
expect(config().subsonic.url).toEqual(`http://${hostname()}:4533`);
["BNB_SUBSONIC_URL", "BONOB_SUBSONIC_URL", "BONOB_NAVIDROME_URL"].forEach(
(k) => {
describe(`when ${k} is not specified`, () => {
it(`should default to http://${hostname()}:4533`, () => {
expect(config().subsonic.url).toEqual(
`http://${hostname()}:4533`
);
});
});
});
describe(`when ${k} is ''`, () => {
it(`should default to http://${hostname()}:4533`, () => {
process.env[k] = "";
expect(config().subsonic.url).toEqual(`http://${hostname()}:4533`);
describe(`when ${k} is ''`, () => {
it(`should default to http://${hostname()}:4533`, () => {
process.env[k] = "";
expect(config().subsonic.url).toEqual(
`http://${hostname()}:4533`
);
});
});
});
describe(`when ${k} is specified`, () => {
it(`should use it for ${k}`, () => {
const url = "http://navidrome.example.com:1234";
process.env[k] = url;
expect(config().subsonic.url).toEqual(url);
describe(`when ${k} is specified`, () => {
it(`should use it for ${k}`, () => {
const url = "http://navidrome.example.com:1234";
process.env[k] = url;
expect(config().subsonic.url).toEqual(url);
});
});
});
});
}
);
});
describe("customClientsFor", () => {
@@ -333,17 +346,31 @@ describe("config", () => {
expect(config().subsonic.customClientsFor).toBeUndefined();
});
["BNB_SUBSONIC_CUSTOM_CLIENTS", "BONOB_SUBSONIC_CUSTOM_CLIENTS", "BONOB_NAVIDROME_CUSTOM_CLIENTS"].forEach(k => {
[
"BNB_SUBSONIC_CUSTOM_CLIENTS",
"BONOB_SUBSONIC_CUSTOM_CLIENTS",
"BONOB_NAVIDROME_CUSTOM_CLIENTS",
].forEach((k) => {
it(`should be overridable for ${k}`, () => {
process.env[k] = "whoop/whoop";
expect(config().subsonic.customClientsFor).toEqual("whoop/whoop");
});
});
});
});
describe("artistImageCache", () => {
it("should default to undefined", () => {
expect(config().subsonic.artistImageCache).toBeUndefined();
});
["BNB_SCROBBLE_TRACKS", "BONOB_SCROBBLE_TRACKS"].forEach(k => {
it(`should be overridable for BNB_SUBSONIC_ARTIST_IMAGE_CACHE`, () => {
process.env["BNB_SUBSONIC_ARTIST_IMAGE_CACHE"] = "/some/path";
expect(config().subsonic.artistImageCache).toEqual("/some/path");
});
});
});
["BNB_SCROBBLE_TRACKS", "BONOB_SCROBBLE_TRACKS"].forEach((k) => {
describeBooleanConfigValue(
"scrobbleTracks",
k,
@@ -352,7 +379,7 @@ describe("config", () => {
);
});
["BNB_REPORT_NOW_PLAYING", "BONOB_REPORT_NOW_PLAYING"].forEach(k => {
["BNB_REPORT_NOW_PLAYING", "BONOB_REPORT_NOW_PLAYING"].forEach((k) => {
describeBooleanConfigValue(
"reportNowPlaying",
k,