@tvkitchen/countertop
Version:
The entry point for developers who want to set up a TV Kitchen.
240 lines (235 loc) • 11 kB
JavaScript
"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();
});
});
});