@tvkitchen/countertop
Version:
The entry point for developers who want to set up a TV Kitchen.
188 lines (182 loc) • 7.62 kB
JavaScript
"use strict";
var _assert = _interopRequireDefault(require("assert"));
var _CountertopStream = _interopRequireDefault(require("../CountertopStream"));
var _CountertopStation = _interopRequireDefault(require("../CountertopStation"));
var _jest = require("../../tools/utils/jest");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
describe('CountertopStream #unit', () => {
describe('constructor', () => {
it('Should not require tributaries for all inputs', () => {
const Appliance = (0, _jest.generateMockAppliance)({
inputTypes: ['bar'],
outputTypes: []
});
const station = new _CountertopStation.default(Appliance);
const stream = new _CountertopStream.default(station);
expect(stream.mouth).toBe(station);
expect(stream.source).toBe(null);
});
it('Should throw an error when passed irrelevant tributaries', () => {
const ApplianceA = (0, _jest.generateMockAppliance)({
inputTypes: [],
outputTypes: ['foo']
});
const ApplianceB = (0, _jest.generateMockAppliance)({
inputTypes: ['bar'],
outputTypes: ['baz']
});
const stationA = new _CountertopStation.default(ApplianceA);
const stationB = new _CountertopStation.default(ApplianceB);
const streamA = new _CountertopStream.default(stationA);
expect(() => new _CountertopStream.default(stationB, new Map([['foo', streamA]]))).toThrow(_assert.default.AssertionError);
});
});
describe('getSource', () => {
it('Should return the core station if it is a source station', () => {
const Appliance = (0, _jest.generateMockAppliance)({
inputTypes: [],
outputTypes: []
});
const station = new _CountertopStation.default(Appliance);
const stream = new _CountertopStream.default(station);
expect(stream.getSource()).toBe(station);
});
it('Should return the source station', () => {
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 streamB = new _CountertopStream.default(stationB, new Map([['foo', streamA]]));
expect(streamB.getSource()).toBe(stationA);
});
});
describe('getMouth', () => {
it('Should return the core station', () => {
const Appliance = (0, _jest.generateMockAppliance)({
inputTypes: [],
outputTypes: []
});
const station = new _CountertopStation.default(Appliance);
const stream = new _CountertopStream.default(station);
expect(stream.getMouth()).toBe(station);
});
});
describe('getTributaryMap', () => {
it('Should return a tributary map', () => {
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 streamB = new _CountertopStream.default(stationB, new Map([['foo', streamA]]));
const tributaryMap = streamB.getTributaryMap();
expect(tributaryMap.get('foo')).toBe(streamA);
});
});
describe('getTributaryArray', () => {
it('Should return a tributary map', () => {
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 streamB = new _CountertopStream.default(stationB, new Map([['foo', streamA]]));
const tributaryArray = streamB.getTributaryArray();
expect(tributaryArray).toContain(streamA);
});
});
describe('getLength', () => {
it('Should have length 1 if it is a source stream', () => {
const Appliance = (0, _jest.generateMockAppliance)({
inputTypes: [],
outputTypes: []
});
const station = new _CountertopStation.default(Appliance);
const stream = new _CountertopStream.default(station);
expect(stream.getLength()).toBe(1);
});
it('Should have the correct length', () => {
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 streamB = new _CountertopStream.default(stationB, new Map([['foo', streamA]]));
expect(streamB.getLength()).toBe(2);
});
});
describe('includesStation', () => {
it('Should return true if a station is in the stream', () => {
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 streamB = new _CountertopStream.default(stationB, new Map([['foo', streamA]]));
expect(streamB.includesStation(stationA)).toBe(true);
expect(streamB.includesStation(stationB)).toBe(true);
});
it('Should return false if a station is not in the stream', () => {
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);
expect(streamA.includesStation(stationB)).toBe(false);
});
});
describe('getOutputTypes', () => {
it('Should return the output types of the mouth station', () => {
const ApplianceA = (0, _jest.generateMockAppliance)({
inputTypes: [],
outputTypes: ['foo']
});
const ApplianceB = (0, _jest.generateMockAppliance)({
inputTypes: ['foo'],
outputTypes: ['bar', 'baz']
});
const stationA = new _CountertopStation.default(ApplianceA);
const stationB = new _CountertopStation.default(ApplianceB);
const streamA = new _CountertopStream.default(stationA);
const streamB = new _CountertopStream.default(stationB, new Map([['foo', streamA]]));
expect(streamB.getOutputTypes(stationA)).toEqual(['bar', 'baz']);
});
});
});