mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
Support for register using a seed host (#51)
This commit is contained in:
@@ -198,17 +198,17 @@ describe("config", () => {
|
||||
"deviceDiscovery",
|
||||
"BONOB_SONOS_DEVICE_DISCOVERY",
|
||||
true,
|
||||
(config) => config.sonos.deviceDiscovery
|
||||
(config) => config.sonos.discovery.auto
|
||||
);
|
||||
|
||||
describe("seedHost", () => {
|
||||
it("should default to undefined", () => {
|
||||
expect(config().sonos.seedHost).toBeUndefined();
|
||||
expect(config().sonos.discovery.seedHost).toBeUndefined();
|
||||
});
|
||||
|
||||
it("should be overridable", () => {
|
||||
process.env["BONOB_SONOS_SEED_HOST"] = "123.456.789.0";
|
||||
expect(config().sonos.seedHost).toEqual("123.456.789.0");
|
||||
expect(config().sonos.discovery.seedHost).toEqual("123.456.789.0");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -20,6 +20,8 @@ import sharp from "sharp";
|
||||
jest.mock("sharp");
|
||||
|
||||
import randomString from "../src/random_string";
|
||||
jest.mock("../src/random_string");
|
||||
|
||||
import {
|
||||
Album,
|
||||
Artist,
|
||||
@@ -43,8 +45,6 @@ import {
|
||||
aTrack,
|
||||
} from "./builders";
|
||||
|
||||
jest.mock("../src/random_string");
|
||||
|
||||
describe("t", () => {
|
||||
it("should be an md5 of the password and the salt", () => {
|
||||
const p = "password123";
|
||||
|
||||
116
tests/registrar.test.ts
Normal file
116
tests/registrar.test.ts
Normal file
@@ -0,0 +1,116 @@
|
||||
import axios from "axios";
|
||||
jest.mock("axios");
|
||||
|
||||
const fakeSonos = {
|
||||
register: jest.fn(),
|
||||
};
|
||||
|
||||
import sonos, { bonobService } from "../src/sonos";
|
||||
jest.mock("../src/sonos");
|
||||
|
||||
import registrar from "../src/registrar";
|
||||
import { URLBuilder } from "../src/url_builder";
|
||||
|
||||
describe("registrar", () => {
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
jest.resetAllMocks();
|
||||
});
|
||||
|
||||
describe("when the bonob service can not be found", () => {
|
||||
it("should fail", async () => {
|
||||
const status = 409;
|
||||
|
||||
(axios.get as jest.Mock).mockResolvedValue({
|
||||
status,
|
||||
});
|
||||
|
||||
const bonobUrl = new URLBuilder("http://fail.example.com/bonob");
|
||||
|
||||
return expect(registrar(bonobUrl)()).rejects.toEqual(
|
||||
`Unexpected response status ${status} from ${bonobUrl
|
||||
.append({ pathname: "/about" })
|
||||
.href()}`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("when the bonob service returns unexpected content", () => {
|
||||
it("should fail", async () => {
|
||||
(axios.get as jest.Mock).mockResolvedValue({
|
||||
status: 200,
|
||||
// invalid response from /about as does not have name and sid
|
||||
data: {}
|
||||
});
|
||||
|
||||
const bonobUrl = new URLBuilder("http://fail.example.com/bonob");
|
||||
|
||||
return expect(registrar(bonobUrl)()).rejects.toEqual(
|
||||
`Unexpected response from ${bonobUrl
|
||||
.append({ pathname: "/about" })
|
||||
.href()}, expected service.name and service.sid`
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("when the bonob service can be found", () => {
|
||||
const bonobUrl = new URLBuilder("http://success.example.com/bonob");
|
||||
|
||||
const serviceDetails = {
|
||||
name: "bob",
|
||||
sid: 123,
|
||||
};
|
||||
|
||||
const service = "service";
|
||||
|
||||
beforeEach(() => {
|
||||
(axios.get as jest.Mock).mockResolvedValue({
|
||||
status: 200,
|
||||
data: {
|
||||
service: serviceDetails,
|
||||
},
|
||||
});
|
||||
|
||||
(bonobService as jest.Mock).mockResolvedValue(service);
|
||||
(sonos as jest.Mock).mockReturnValue(fakeSonos);
|
||||
});
|
||||
|
||||
describe("when registration succeeds", () => {
|
||||
it("should fetch the service details and register", async () => {
|
||||
fakeSonos.register.mockResolvedValue(true);
|
||||
const sonosDiscovery = { auto: true };
|
||||
|
||||
expect(await registrar(bonobUrl, sonosDiscovery)()).toEqual(
|
||||
true
|
||||
);
|
||||
|
||||
expect(bonobService).toHaveBeenCalledWith(
|
||||
serviceDetails.name,
|
||||
serviceDetails.sid,
|
||||
bonobUrl
|
||||
);
|
||||
expect(sonos).toHaveBeenCalledWith(sonosDiscovery);
|
||||
expect(fakeSonos.register).toHaveBeenCalledWith(service);
|
||||
});
|
||||
});
|
||||
|
||||
describe("when registration fails", () => {
|
||||
it("should fetch the service details and register", async () => {
|
||||
fakeSonos.register.mockResolvedValue(false);
|
||||
const sonosDiscovery = { auto: false, seedHost: "192.168.1.163" };
|
||||
|
||||
expect(await registrar(bonobUrl, sonosDiscovery)()).toEqual(
|
||||
false
|
||||
);
|
||||
|
||||
expect(bonobService).toHaveBeenCalledWith(
|
||||
serviceDetails.name,
|
||||
serviceDetails.sid,
|
||||
bonobUrl
|
||||
);
|
||||
expect(sonos).toHaveBeenCalledWith(sonosDiscovery);
|
||||
expect(fakeSonos.register).toHaveBeenCalledWith(service);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -274,7 +274,7 @@ describe("sonos", () => {
|
||||
|
||||
describe("when is disabled", () => {
|
||||
it("should return a disabled client", async () => {
|
||||
const disabled = sonos(false);
|
||||
const disabled = sonos({ auto: false });
|
||||
|
||||
expect(disabled).toEqual(SONOS_DISABLED);
|
||||
expect(await disabled.devices()).toEqual([]);
|
||||
@@ -310,7 +310,7 @@ describe("sonos", () => {
|
||||
);
|
||||
sonosManager.InitializeWithDiscovery.mockResolvedValue(true);
|
||||
|
||||
const actualDevices = await sonos(true, undefined).devices();
|
||||
const actualDevices = await sonos({ auto: true }).devices();
|
||||
|
||||
expect(SonosManager).toHaveBeenCalledTimes(1);
|
||||
expect(sonosManager.InitializeWithDiscovery).toHaveBeenCalledWith(10);
|
||||
@@ -331,7 +331,7 @@ describe("sonos", () => {
|
||||
);
|
||||
sonosManager.InitializeWithDiscovery.mockResolvedValue(true);
|
||||
|
||||
const actualDevices = await sonos(true, "").devices();
|
||||
const actualDevices = await sonos({ auto: true, seedHost: "" }).devices();
|
||||
|
||||
expect(SonosManager).toHaveBeenCalledTimes(1);
|
||||
expect(sonosManager.InitializeWithDiscovery).toHaveBeenCalledWith(10);
|
||||
@@ -354,7 +354,7 @@ describe("sonos", () => {
|
||||
);
|
||||
sonosManager.InitializeFromDevice.mockResolvedValue(true);
|
||||
|
||||
const actualDevices = await sonos(true, seedHost).devices();
|
||||
const actualDevices = await sonos({ auto: true, seedHost }).devices();
|
||||
|
||||
expect(SonosManager).toHaveBeenCalledTimes(1);
|
||||
expect(sonosManager.InitializeFromDevice).toHaveBeenCalledWith(
|
||||
@@ -377,7 +377,7 @@ describe("sonos", () => {
|
||||
);
|
||||
sonosManager.InitializeWithDiscovery.mockResolvedValue(true);
|
||||
|
||||
const actualDevices = await sonos(true, undefined).devices();
|
||||
const actualDevices = await sonos({ auto: true, seedHost: undefined }).devices();
|
||||
|
||||
expect(actualDevices).toEqual([
|
||||
{
|
||||
@@ -408,7 +408,7 @@ describe("sonos", () => {
|
||||
);
|
||||
sonosManager.InitializeWithDiscovery.mockResolvedValue(false);
|
||||
|
||||
expect(await sonos(true, "").devices()).toEqual([]);
|
||||
expect(await sonos({ auto: true, seedHost: "" }).devices()).toEqual([]);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user