mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
Sorting services by name
This commit is contained in:
13
src/sonos.ts
13
src/sonos.ts
@@ -1,6 +1,6 @@
|
|||||||
import { SonosManager, SonosDevice } from "@svrooij/sonos";
|
import { SonosManager, SonosDevice } from "@svrooij/sonos";
|
||||||
// import { MusicService } from "@svrooij/sonos/lib/services";
|
// import { MusicService } from "@svrooij/sonos/lib/services";
|
||||||
import { uniq } from "underscore";
|
import { sortBy, uniq } from "underscore";
|
||||||
import logger from "./logger";
|
import logger from "./logger";
|
||||||
|
|
||||||
export type Device = {
|
export type Device = {
|
||||||
@@ -25,10 +25,13 @@ export const SONOS_DISABLED: Sonos = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const servicesFrom = (devices: Device[]) =>
|
export const servicesFrom = (devices: Device[]) =>
|
||||||
uniq(
|
sortBy(
|
||||||
devices.flatMap((d) => d.services),
|
uniq(
|
||||||
false,
|
devices.flatMap((d) => d.services),
|
||||||
(s) => s.id
|
false,
|
||||||
|
(s) => s.id
|
||||||
|
),
|
||||||
|
"name"
|
||||||
);
|
);
|
||||||
|
|
||||||
export const asDevice = (sonosDevice: SonosDevice): Promise<Device> =>
|
export const asDevice = (sonosDevice: SonosDevice): Promise<Device> =>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import { SonosManager, SonosDevice } from "@svrooij/sonos";
|
import { SonosManager, SonosDevice } from "@svrooij/sonos";
|
||||||
import { MusicServicesService } from "@svrooij/sonos/lib/services";
|
import { MusicServicesService } from "@svrooij/sonos/lib/services";
|
||||||
|
import { shuffle } from 'underscore';
|
||||||
|
|
||||||
jest.mock("@svrooij/sonos");
|
jest.mock("@svrooij/sonos");
|
||||||
|
|
||||||
import { AMAZON_MUSIC, APPLE_MUSIC, AUDIBLE } from "./music_services";
|
import { AMAZON_MUSIC, APPLE_MUSIC, AUDIBLE } from "./music_services";
|
||||||
@@ -62,19 +64,19 @@ describe("sonos", () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
describe("servicesFrom", () => {
|
describe("servicesFrom", () => {
|
||||||
it("should only return uniq services", () => {
|
it("should only return uniq services, sorted by name", () => {
|
||||||
const service1 = { id: 1, name: "service1" };
|
const service1 = { id: 1, name: "D" };
|
||||||
const service2 = { id: 2, name: "service2" };
|
const service2 = { id: 2, name: "B" };
|
||||||
const service3 = { id: 3, name: "service3" };
|
const service3 = { id: 3, name: "C" };
|
||||||
const service4 = { id: 4, name: "service4" };
|
const service4 = { id: 4, name: "A" };
|
||||||
|
|
||||||
const d1 = someDevice({ services: [service1, service2] });
|
const d1 = someDevice({ services: shuffle([service1, service2]) });
|
||||||
const d2 = someDevice({ services: [service1, service2, service3] });
|
const d2 = someDevice({ services: shuffle([service1, service2, service3]) });
|
||||||
const d3 = someDevice({ services: [service4] });
|
const d3 = someDevice({ services: shuffle([service4]) });
|
||||||
|
|
||||||
const devices: Device[] = [d1, d2, d3];
|
const devices: Device[] = [d1, d2, d3];
|
||||||
|
|
||||||
expect(servicesFrom(devices)).toEqual([service1, service2, service3, service4])
|
expect(servicesFrom(devices)).toEqual([service4, service2, service3, service1])
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user