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