UNPKG

@tvkitchen/countertop

Version:

The entry point for developers who want to set up a TV Kitchen.

160 lines (140 loc) 6.14 kB
"use strict"; var _CountertopTopology = _interopRequireDefault(require("../CountertopTopology")); var _CountertopStation = _interopRequireDefault(require("../CountertopStation")); var _CountertopStream = _interopRequireDefault(require("../CountertopStream")); var _jest = require("../../tools/utils/jest"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('CountertopTopology #unit', () => { describe('constructor', () => { it('Should generate no streams if provided no stations', () => { const topology = new _CountertopTopology.default(); expect(topology.streams).toEqual([]); }); }); describe('extendStreamsByStation', () => { it('Should extend streams correctly', () => { const ApplianceA = (0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] }); const ApplianceB = (0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar'] }); const stationA = new _CountertopStation.default(ApplianceA); const stationB = new _CountertopStation.default(ApplianceB); const streamA = new _CountertopStream.default(stationA); const streams = _CountertopTopology.default.extendStreamsByStation([streamA], stationB); expect(streams.length).toBe(1); }); it('Should extend streams even if a station does not have inputs', () => { const ApplianceA = (0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] }); const ApplianceB = (0, _jest.generateMockAppliance)({ inputTypes: ['baz'], outputTypes: ['bar'] }); const stationA = new _CountertopStation.default(ApplianceA); const stationB = new _CountertopStation.default(ApplianceB); const streamA = new _CountertopStream.default(stationA); const streams = _CountertopTopology.default.extendStreamsByStation([streamA], stationB); expect(streams.length).toBe(1); }); }); describe('generateStreams', () => { it('Should generate the correct streams', () => { const ApplianceA = (0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] }); const ApplianceB = (0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar'] }); const stationA = new _CountertopStation.default(ApplianceA); const stationB = new _CountertopStation.default(ApplianceB); const stations = [stationA, stationB]; const streams = _CountertopTopology.default.generateStreams(stations); expect((0, _jest.normalizeStreams)(streams, stations)).toMatchSnapshot(); }); it('Should not generate streams for stations with no inputs', () => { const ApplianceA = (0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] }); const ApplianceB = (0, _jest.generateMockAppliance)({ inputTypes: ['baz'], outputTypes: ['bar'] }); const stationA = new _CountertopStation.default(ApplianceA); const stationB = new _CountertopStation.default(ApplianceB); const stations = [stationA, stationB]; const streams = _CountertopTopology.default.generateStreams(stations); expect((0, _jest.normalizeStreams)(streams, stations)).toMatchSnapshot(); }); it('Should not generate redundant partial streams for stations with multiple inputs', () => { const ApplianceA = (0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] }); const ApplianceB = (0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar'] }); const ApplianceC = (0, _jest.generateMockAppliance)({ inputTypes: ['foo', 'bar'], outputTypes: ['baz'] }); const stationA = new _CountertopStation.default(ApplianceA); const stationB = new _CountertopStation.default(ApplianceB); const stationC = new _CountertopStation.default(ApplianceC); const stations = [stationA, stationB, stationC]; const streams = _CountertopTopology.default.generateStreams(stations); expect((0, _jest.normalizeStreams)(streams, stations)).toMatchSnapshot(); }); it('Should maintain complete toplogies after redundant partial streams are removed', () => { const ApplianceA = (0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] }); const ApplianceB = (0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar'] }); const ApplianceC = (0, _jest.generateMockAppliance)({ inputTypes: ['foo', 'bar'], outputTypes: ['baz'] }); const ApplianceD = (0, _jest.generateMockAppliance)({ inputTypes: ['baz'], outputTypes: ['bop'] }); const stationA = new _CountertopStation.default(ApplianceA); const stationB = new _CountertopStation.default(ApplianceB); const stationC = new _CountertopStation.default(ApplianceC); const stationD = new _CountertopStation.default(ApplianceD); const stations = [stationA, stationB, stationC, stationD]; const streams = _CountertopTopology.default.generateStreams(stations); expect((0, _jest.normalizeStreams)(streams, stations)).toMatchSnapshot(); }); }); describe('generateSourceStreams', () => { it('Should generate streams for any source stations', () => { const ApplianceA = (0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] }); const ApplianceB = (0, _jest.generateMockAppliance)({ inputTypes: ['baz'], outputTypes: ['bar'] }); const stationA = new _CountertopStation.default(ApplianceA); const stationB = new _CountertopStation.default(ApplianceB); const stations = [stationA, stationB]; const streams = _CountertopTopology.default.generateSourceStreams(stations); expect((0, _jest.normalizeStreams)(streams, stations)).toMatchSnapshot(); }); }); });