mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
Disabled sonos should return false for all mutations
This commit is contained in:
@@ -37,7 +37,7 @@ export default function () {
|
|||||||
sonos: {
|
sonos: {
|
||||||
serviceName: process.env["BONOB_SONOS_SERVICE_NAME"] || "bonob",
|
serviceName: process.env["BONOB_SONOS_SERVICE_NAME"] || "bonob",
|
||||||
discovery: {
|
discovery: {
|
||||||
auto:
|
enabled:
|
||||||
(process.env["BONOB_SONOS_DEVICE_DISCOVERY"] || "true") == "true",
|
(process.env["BONOB_SONOS_DEVICE_DISCOVERY"] || "true") == "true",
|
||||||
seedHost: process.env["BONOB_SONOS_SEED_HOST"],
|
seedHost: process.env["BONOB_SONOS_SEED_HOST"],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const bonobUrl = new URLBuilder(params[0]!);
|
|||||||
|
|
||||||
const config = readConfig();
|
const config = readConfig();
|
||||||
|
|
||||||
registrar(bonobUrl, config.sonos.discovery)()
|
registrar(bonobUrl, config.sonos.discovery.seedHost)()
|
||||||
.then((success) => {
|
.then((success) => {
|
||||||
if (success) {
|
if (success) {
|
||||||
console.log(`Successfully registered bonob @ ${bonobUrl} with sonos`);
|
console.log(`Successfully registered bonob @ ${bonobUrl} with sonos`);
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import _ from "underscore";
|
import _ from "underscore";
|
||||||
import logger from "./logger";
|
import logger from "./logger";
|
||||||
import sonos, { bonobService, Discovery } from "./sonos";
|
import sonos, { bonobService } from "./sonos";
|
||||||
import { URLBuilder } from "./url_builder";
|
import { URLBuilder } from "./url_builder";
|
||||||
|
|
||||||
export default (
|
export default (
|
||||||
bonobUrl: URLBuilder,
|
bonobUrl: URLBuilder,
|
||||||
sonosDiscovery: Discovery = {
|
seedHost?: string
|
||||||
auto: true,
|
|
||||||
seedHost: undefined,
|
|
||||||
}
|
|
||||||
) =>
|
) =>
|
||||||
async () => {
|
async () => {
|
||||||
const about = bonobUrl.append({ pathname: "/about" });
|
const about = bonobUrl.append({ pathname: "/about" });
|
||||||
@@ -34,5 +31,5 @@ export default (
|
|||||||
.then(({ name, sid }: { name: string; sid: number }) =>
|
.then(({ name, sid }: { name: string; sid: number }) =>
|
||||||
bonobService(name, sid, bonobUrl)
|
bonobService(name, sid, bonobUrl)
|
||||||
)
|
)
|
||||||
.then((service) => sonos(sonosDiscovery).register(service));
|
.then((service) => sonos({ enabled: true, seedHost }).register(service));
|
||||||
};
|
};
|
||||||
|
|||||||
10
src/sonos.ts
10
src/sonos.ts
@@ -101,8 +101,8 @@ export interface Sonos {
|
|||||||
export const SONOS_DISABLED: Sonos = {
|
export const SONOS_DISABLED: Sonos = {
|
||||||
devices: () => Promise.resolve([]),
|
devices: () => Promise.resolve([]),
|
||||||
services: () => Promise.resolve([]),
|
services: () => Promise.resolve([]),
|
||||||
remove: (_: number) => Promise.resolve(true),
|
remove: (_: number) => Promise.resolve(false),
|
||||||
register: (_: Service) => Promise.resolve(true),
|
register: (_: Service) => Promise.resolve(false),
|
||||||
};
|
};
|
||||||
|
|
||||||
export const asService = (musicService: MusicService): Service => ({
|
export const asService = (musicService: MusicService): Service => ({
|
||||||
@@ -243,13 +243,13 @@ export function autoDiscoverySonos(sonosSeedHost?: string): Sonos {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type Discovery = {
|
export type Discovery = {
|
||||||
auto: boolean;
|
enabled: boolean;
|
||||||
seedHost?: string;
|
seedHost?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default (
|
export default (
|
||||||
sonosDiscovery: Discovery = { auto: true }
|
sonosDiscovery: Discovery = { enabled: true }
|
||||||
): Sonos =>
|
): Sonos =>
|
||||||
sonosDiscovery.auto
|
sonosDiscovery.enabled
|
||||||
? autoDiscoverySonos(sonosDiscovery.seedHost)
|
? autoDiscoverySonos(sonosDiscovery.seedHost)
|
||||||
: SONOS_DISABLED;
|
: SONOS_DISABLED;
|
||||||
|
|||||||
@@ -198,7 +198,7 @@ describe("config", () => {
|
|||||||
"deviceDiscovery",
|
"deviceDiscovery",
|
||||||
"BONOB_SONOS_DEVICE_DISCOVERY",
|
"BONOB_SONOS_DEVICE_DISCOVERY",
|
||||||
true,
|
true,
|
||||||
(config) => config.sonos.discovery.auto
|
(config) => config.sonos.discovery.enabled
|
||||||
);
|
);
|
||||||
|
|
||||||
describe("seedHost", () => {
|
describe("seedHost", () => {
|
||||||
|
|||||||
@@ -75,41 +75,62 @@ describe("registrar", () => {
|
|||||||
(sonos as jest.Mock).mockReturnValue(fakeSonos);
|
(sonos as jest.Mock).mockReturnValue(fakeSonos);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("seedHost", () => {
|
||||||
|
describe("is specified", () => {
|
||||||
|
it("should register using the seed host", async () => {
|
||||||
|
fakeSonos.register.mockResolvedValue(true);
|
||||||
|
const seedHost = "127.0.0.11";
|
||||||
|
|
||||||
|
expect(await registrar(bonobUrl, seedHost)()).toEqual(
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(bonobService).toHaveBeenCalledWith(
|
||||||
|
serviceDetails.name,
|
||||||
|
serviceDetails.sid,
|
||||||
|
bonobUrl
|
||||||
|
);
|
||||||
|
expect(sonos).toHaveBeenCalledWith({ enabled: true, seedHost });
|
||||||
|
expect(fakeSonos.register).toHaveBeenCalledWith(service);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("is not specified", () => {
|
||||||
|
it("should register without using the seed host", async () => {
|
||||||
|
fakeSonos.register.mockResolvedValue(true);
|
||||||
|
|
||||||
|
expect(await registrar(bonobUrl)()).toEqual(
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(bonobService).toHaveBeenCalledWith(
|
||||||
|
serviceDetails.name,
|
||||||
|
serviceDetails.sid,
|
||||||
|
bonobUrl
|
||||||
|
);
|
||||||
|
expect(sonos).toHaveBeenCalledWith({ enabled: true });
|
||||||
|
expect(fakeSonos.register).toHaveBeenCalledWith(service);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("when registration succeeds", () => {
|
describe("when registration succeeds", () => {
|
||||||
it("should fetch the service details and register", async () => {
|
it("should fetch the service details and register", async () => {
|
||||||
fakeSonos.register.mockResolvedValue(true);
|
fakeSonos.register.mockResolvedValue(true);
|
||||||
const sonosDiscovery = { auto: true };
|
|
||||||
|
|
||||||
expect(await registrar(bonobUrl, sonosDiscovery)()).toEqual(
|
expect(await registrar(bonobUrl)()).toEqual(
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(bonobService).toHaveBeenCalledWith(
|
|
||||||
serviceDetails.name,
|
|
||||||
serviceDetails.sid,
|
|
||||||
bonobUrl
|
|
||||||
);
|
|
||||||
expect(sonos).toHaveBeenCalledWith(sonosDiscovery);
|
|
||||||
expect(fakeSonos.register).toHaveBeenCalledWith(service);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when registration fails", () => {
|
describe("when registration fails", () => {
|
||||||
it("should fetch the service details and register", async () => {
|
it("should fetch the service details and register", async () => {
|
||||||
fakeSonos.register.mockResolvedValue(false);
|
fakeSonos.register.mockResolvedValue(false);
|
||||||
const sonosDiscovery = { auto: false, seedHost: "192.168.1.163" };
|
|
||||||
|
|
||||||
expect(await registrar(bonobUrl, sonosDiscovery)()).toEqual(
|
expect(await registrar(bonobUrl)()).toEqual(
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(bonobService).toHaveBeenCalledWith(
|
|
||||||
serviceDetails.name,
|
|
||||||
serviceDetails.sid,
|
|
||||||
bonobUrl
|
|
||||||
);
|
|
||||||
expect(sonos).toHaveBeenCalledWith(sonosDiscovery);
|
|
||||||
expect(fakeSonos.register).toHaveBeenCalledWith(service);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -274,12 +274,13 @@ describe("sonos", () => {
|
|||||||
|
|
||||||
describe("when is disabled", () => {
|
describe("when is disabled", () => {
|
||||||
it("should return a disabled client", async () => {
|
it("should return a disabled client", async () => {
|
||||||
const disabled = sonos({ auto: false });
|
const disabled = sonos({ enabled: false });
|
||||||
|
|
||||||
expect(disabled).toEqual(SONOS_DISABLED);
|
expect(disabled).toEqual(SONOS_DISABLED);
|
||||||
expect(await disabled.devices()).toEqual([]);
|
expect(await disabled.devices()).toEqual([]);
|
||||||
expect(await disabled.services()).toEqual([]);
|
expect(await disabled.services()).toEqual([]);
|
||||||
expect(await disabled.register(aService())).toEqual(true);
|
expect(await disabled.register(aService())).toEqual(false);
|
||||||
|
expect(await disabled.remove(123)).toEqual(false);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -310,7 +311,7 @@ describe("sonos", () => {
|
|||||||
);
|
);
|
||||||
sonosManager.InitializeWithDiscovery.mockResolvedValue(true);
|
sonosManager.InitializeWithDiscovery.mockResolvedValue(true);
|
||||||
|
|
||||||
const actualDevices = await sonos({ auto: true }).devices();
|
const actualDevices = await sonos({ enabled: true }).devices();
|
||||||
|
|
||||||
expect(SonosManager).toHaveBeenCalledTimes(1);
|
expect(SonosManager).toHaveBeenCalledTimes(1);
|
||||||
expect(sonosManager.InitializeWithDiscovery).toHaveBeenCalledWith(10);
|
expect(sonosManager.InitializeWithDiscovery).toHaveBeenCalledWith(10);
|
||||||
@@ -331,7 +332,7 @@ describe("sonos", () => {
|
|||||||
);
|
);
|
||||||
sonosManager.InitializeWithDiscovery.mockResolvedValue(true);
|
sonosManager.InitializeWithDiscovery.mockResolvedValue(true);
|
||||||
|
|
||||||
const actualDevices = await sonos({ auto: true, seedHost: "" }).devices();
|
const actualDevices = await sonos({ enabled: true, seedHost: "" }).devices();
|
||||||
|
|
||||||
expect(SonosManager).toHaveBeenCalledTimes(1);
|
expect(SonosManager).toHaveBeenCalledTimes(1);
|
||||||
expect(sonosManager.InitializeWithDiscovery).toHaveBeenCalledWith(10);
|
expect(sonosManager.InitializeWithDiscovery).toHaveBeenCalledWith(10);
|
||||||
@@ -354,7 +355,7 @@ describe("sonos", () => {
|
|||||||
);
|
);
|
||||||
sonosManager.InitializeFromDevice.mockResolvedValue(true);
|
sonosManager.InitializeFromDevice.mockResolvedValue(true);
|
||||||
|
|
||||||
const actualDevices = await sonos({ auto: true, seedHost }).devices();
|
const actualDevices = await sonos({ enabled: true, seedHost }).devices();
|
||||||
|
|
||||||
expect(SonosManager).toHaveBeenCalledTimes(1);
|
expect(SonosManager).toHaveBeenCalledTimes(1);
|
||||||
expect(sonosManager.InitializeFromDevice).toHaveBeenCalledWith(
|
expect(sonosManager.InitializeFromDevice).toHaveBeenCalledWith(
|
||||||
@@ -377,7 +378,7 @@ describe("sonos", () => {
|
|||||||
);
|
);
|
||||||
sonosManager.InitializeWithDiscovery.mockResolvedValue(true);
|
sonosManager.InitializeWithDiscovery.mockResolvedValue(true);
|
||||||
|
|
||||||
const actualDevices = await sonos({ auto: true, seedHost: undefined }).devices();
|
const actualDevices = await sonos({ enabled: true, seedHost: undefined }).devices();
|
||||||
|
|
||||||
expect(actualDevices).toEqual([
|
expect(actualDevices).toEqual([
|
||||||
{
|
{
|
||||||
@@ -408,7 +409,7 @@ describe("sonos", () => {
|
|||||||
);
|
);
|
||||||
sonosManager.InitializeWithDiscovery.mockResolvedValue(false);
|
sonosManager.InitializeWithDiscovery.mockResolvedValue(false);
|
||||||
|
|
||||||
expect(await sonos({ auto: true, seedHost: "" }).devices()).toEqual([]);
|
expect(await sonos({ enabled: true, seedHost: "" }).devices()).toEqual([]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user