UNPKG

@tvkitchen/countertop

Version:

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

240 lines (235 loc) 11 kB
"use strict"; var _ = require(".."); var _classes = require("../../../classes"); var _jest = require("../jest"); var _countertop = require("../countertop"); describe('countertop', () => { describe('getSourceStations', () => { it('Should extract stations that have no inputs', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar'] })); const stations = [stationA, stationB]; const sourceStations = (0, _countertop.getSourceStations)(stations); expect(sourceStations).toEqual([stationA]); }); }); describe('getLongestStreamLength', () => { it('should return the length of the longest stream', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar'] })); const streamA = new _classes.CountertopStream(stationA); const streamB = new _classes.CountertopStream(stationB, new Map([['foo', streamA]])); const streams = [streamA, streamB]; expect((0, _countertop.getLongestStreamLength)(streams)).toBe(2); }); }); describe('getCollectiveOutputTypes', () => { it('should return the output types of multiple streams', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar', 'baz'] })); const streamA = new _classes.CountertopStream(stationA); const streamB = new _classes.CountertopStream(stationB, new Map([['foo', streamA]])); const streams = [streamA, streamB]; const collectiveOutputTypes = (0, _countertop.getCollectiveOutputTypes)(streams); expect(collectiveOutputTypes.sort()).toEqual(['foo', 'bar', 'baz'].sort()); }); }); describe('getStationsThatConsumeTypes', () => { it('should return the stations that consume the specified types', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['red'], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar', 'baz'] })); const stations = [stationA, stationB]; const result = (0, _countertop.getStationsThatConsumeTypes)(stations, ['foo']); expect(result).toEqual([stationB]); }); }); describe('getStreamsThatProduceTypes', () => { it('should return the streams that produce the specified types', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar', 'baz'] })); const streamA = new _classes.CountertopStream(stationA); const streamB = new _classes.CountertopStream(stationB, new Map([['foo', streamA]])); const streamC = new _classes.CountertopStream(stationA); const streams = [streamA, streamB, streamC]; const result = (0, _countertop.getStreamsThatProduceTypes)(streams, ['foo']); expect(result.sort((0, _.by)('id'))).toEqual([streamA, streamC].sort((0, _.by)('id'))); }); }); describe('filterStreamsContainingStation', () => { it('should remove streams that contain a given station', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar', 'baz'] })); const stationC = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['bloo'] })); const streamA = new _classes.CountertopStream(stationA); const streamB = new _classes.CountertopStream(stationB, new Map([['foo', streamA]])); const streamC = new _classes.CountertopStream(stationC); const streams = [streamA, streamB, streamC]; const result = (0, _countertop.filterStreamsContainingStation)(streams, stationA); expect(result).toEqual([streamC]); }); }); describe('getStreamOutputMap', () => { it('should map streams by their output types', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar', 'baz'] })); const streamA = new _classes.CountertopStream(stationA); const streamB = new _classes.CountertopStream(stationB, new Map([['foo', streamA]])); const streams = [streamA, streamB]; const result = (0, _countertop.getStreamOutputMap)(streams); expect(result).toEqual(new Map([['foo', [streamA]], ['bar', [streamB]], ['baz', [streamB]]])); }); }); describe('getSourcesFromStreams', () => { it('should return all sources represented by streams', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar', 'baz'] })); const stationC = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const streamA = new _classes.CountertopStream(stationA); const streamB = new _classes.CountertopStream(stationB, new Map([['foo', streamA]])); const streamC = new _classes.CountertopStream(stationC); const streams = [streamB, streamC]; const result = (0, _countertop.getSourcesFromStreams)(streams); expect(result.sort((0, _.by)('id'))).toEqual([stationA, stationC].sort((0, _.by)('id'))); }); }); describe('getStreamsFromStreamMap', () => { it('should return the streams represented in a stream map', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar', 'baz'] })); const stationC = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const streamA = new _classes.CountertopStream(stationA); const streamB = new _classes.CountertopStream(stationB, new Map([['foo', streamA]])); const streamC = new _classes.CountertopStream(stationC); const streamMap = new Map([['foo', [streamA, streamC]], ['bar', [streamB]], ['baz', [streamB]]]); const result = (0, _countertop.getStreamsFromStreamMap)(streamMap); expect(result.sort((0, _.by)('id'))).toEqual([streamA, streamB, streamC].sort((0, _.by)('id'))); }); }); describe('getSourcesFromStreamMap', () => { it('should return the set of sources represented in a stream map', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar', 'baz'] })); const stationC = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const streamA = new _classes.CountertopStream(stationA); const streamB = new _classes.CountertopStream(stationB, new Map([['foo', streamA]])); const streamC = new _classes.CountertopStream(stationC); const streamMap = new Map([['foo', [streamA, streamC]], ['bar', [streamB]], ['baz', [streamB]]]); const result = (0, _countertop.getSourcesFromStreamMap)(streamMap); expect(result.sort((0, _.by)('id'))).toEqual([stationA, stationC].sort((0, _.by)('id'))); }); }); describe('generateTributaryMaps', () => { it('should not create tributary maps of streams with different sources', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo'], outputTypes: ['bar', 'baz'] })); const stationC = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationD = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo', 'bar'], outputTypes: ['baz'] })); const stations = [stationA, stationB, stationC, stationD]; const streamA = new _classes.CountertopStream(stationA); const streamB = new _classes.CountertopStream(stationB, new Map([['foo', streamA]])); const streamC = new _classes.CountertopStream(stationC); const streamMap = new Map([['foo', [streamA, streamC]], ['bar', [streamB]], ['baz', [streamB]]]); const result = (0, _countertop.generateTributaryMaps)(stationD, streamMap); expect((0, _jest.normalizeTributaryMaps)(result, stations)).toMatchSnapshot(); }); it('should return a partially populated tributary map if there are not enough outputs for all inputs', () => { const stationA = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: [], outputTypes: ['foo'] })); const stationB = new _classes.CountertopStation((0, _jest.generateMockAppliance)({ inputTypes: ['foo', 'bar'], outputTypes: ['baz'] })); const stations = [stationA, stationB]; const streamA = new _classes.CountertopStream(stationA); const streamMap = new Map([['foo', [streamA]]]); const result = (0, _countertop.generateTributaryMaps)(stationB, streamMap); expect((0, _jest.normalizeTributaryMaps)(result, stations)).toMatchSnapshot(); }); }); });