Sorting services by name

This commit is contained in:
simojenki
2021-01-30 12:53:04 +11:00
parent ab432fa8ce
commit 494e36092d
2 changed files with 19 additions and 14 deletions

View File

@@ -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[]) =>
sortBy(
uniq( uniq(
devices.flatMap((d) => d.services), devices.flatMap((d) => d.services),
false, false,
(s) => s.id (s) => s.id
),
"name"
); );
export const asDevice = (sonosDevice: SonosDevice): Promise<Device> => export const asDevice = (sonosDevice: SonosDevice): Promise<Device> =>

View File

@@ -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])
}); });
}); });