playable
Version:
Video player based on HTML5Video
217 lines • 12.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
require("jsdom-global/register");
var chai_1 = require("chai");
var sinon = (0, tslib_1.__importStar)(require("sinon"));
var testkit_1 = (0, tslib_1.__importDefault)(require("../../../testkit"));
var constants_1 = require("../../../constants");
describe('LiveIndicator', function () {
var testkit;
var engine;
var eventEmitter;
var liveIndicator;
beforeEach(function () {
testkit = (0, testkit_1.default)();
engine = testkit.getModule('engine');
eventEmitter = testkit.getModule('eventEmitter');
liveIndicator = testkit.getModule('liveIndicator');
});
describe('constructor', function () {
it('should create instance ', function () {
(0, chai_1.expect)(liveIndicator).to.exist;
(0, chai_1.expect)(liveIndicator.view).to.exist;
});
});
describe('instance', function () {
it('should have method for showing/hiding liveIndicator', function () {
var viewToggleSpy = sinon.spy(liveIndicator.view, 'toggle');
(0, chai_1.expect)(liveIndicator.isHidden, 'hidden by default').to.be.true;
liveIndicator.show();
(0, chai_1.expect)(viewToggleSpy.calledWith(true)).to.be.true;
(0, chai_1.expect)(liveIndicator.isHidden, 'hidden after method show called').to.be
.false;
liveIndicator.hide();
(0, chai_1.expect)(viewToggleSpy.lastCall.calledWith(false)).to.be.true;
(0, chai_1.expect)(liveIndicator.isHidden, 'hidden after method hide called').to.be
.true;
viewToggleSpy.restore();
});
it('should have method for getting view node', function () {
(0, chai_1.expect)(liveIndicator.getElement()).to.equal(liveIndicator.view.getElement());
});
it('should try to sync with live on click', function () {
var engineSyncWithLiveSpy = sinon.stub(engine, 'syncWithLive');
var liveIndicatorViewNode = liveIndicator.view.getElement();
liveIndicatorViewNode.dispatchEvent(new Event('click'));
(0, chai_1.expect)(engineSyncWithLiveSpy.called).to.be.true;
engineSyncWithLiveSpy.restore();
});
});
describe('on live state change', function () {
it('should reset on `LiveState.NONE`', function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var viewToggleSpy, viewToggleActiveSpy, viewToggleEndedSpy;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
viewToggleSpy = sinon.spy(liveIndicator.view, 'toggle');
viewToggleActiveSpy = sinon.spy(liveIndicator.view, 'toggleActive');
viewToggleEndedSpy = sinon.spy(liveIndicator.view, 'toggleEnded');
liveIndicator.show();
(0, chai_1.expect)(liveIndicator.isHidden, 'hidden before `LiveState.NONE`').to.be
.false;
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.NONE,
})];
case 1:
_a.sent();
(0, chai_1.expect)(liveIndicator.isHidden, 'isHidden').to.be.true;
(0, chai_1.expect)(viewToggleSpy.calledWith(false), 'view.toggle called with `false`')
.to.be.true;
(0, chai_1.expect)(viewToggleActiveSpy.calledWith(false), 'view.toggleActive called with `false`').to.be.true;
(0, chai_1.expect)(viewToggleEndedSpy.calledWith(false), 'view.toggleEnded called with `false`').to.be.true;
viewToggleSpy.restore();
viewToggleActiveSpy.restore();
viewToggleEndedSpy.restore();
return [2 /*return*/];
}
});
});
});
describe('for dynamic content', function () {
beforeEach(function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.NONE,
})];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
});
it('should show on `LiveState.INITIAL`', function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var viewToggleSpy;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
viewToggleSpy = sinon.spy(liveIndicator.view, 'toggle');
(0, chai_1.expect)(liveIndicator.isHidden, 'hidden before `LiveState.INITIAL`').to
.be.true;
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.INITIAL,
})];
case 1:
_a.sent();
(0, chai_1.expect)(liveIndicator.isHidden).to.be.false;
(0, chai_1.expect)(viewToggleSpy.calledWith(true)).to.be.true;
viewToggleSpy.restore();
return [2 /*return*/];
}
});
});
});
it('should activate on `LiveState.SYNC`', function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var viewToggleActiveSpy;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
viewToggleActiveSpy = sinon.spy(liveIndicator.view, 'toggleActive');
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.INITIAL,
})];
case 1:
_a.sent();
(0, chai_1.expect)(liveIndicator.isHidden, 'hidden before `LiveState.SYNC`').to.be
.false;
(0, chai_1.expect)(liveIndicator.isActive, 'active before `LiveState.SYNC`').to.be
.false;
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.SYNC,
})];
case 2:
_a.sent();
(0, chai_1.expect)(liveIndicator.isActive).to.be.true;
(0, chai_1.expect)(viewToggleActiveSpy.calledWith(true)).to.be.true;
viewToggleActiveSpy.restore();
return [2 /*return*/];
}
});
});
});
it('should deactivate on `LiveState.NOT_SYNC`', function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var viewToggleActiveSpy;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
viewToggleActiveSpy = sinon.spy(liveIndicator.view, 'toggleActive');
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.INITIAL,
})];
case 1:
_a.sent();
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.SYNC,
})];
case 2:
_a.sent();
(0, chai_1.expect)(liveIndicator.isActive, 'active before out of sync').to.be.true;
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.NOT_SYNC,
})];
case 3:
_a.sent();
(0, chai_1.expect)(liveIndicator.isActive).to.be.false;
(0, chai_1.expect)(viewToggleActiveSpy.lastCall.calledWith(false)).to.be.true;
viewToggleActiveSpy.restore();
return [2 /*return*/];
}
});
});
});
it('should react to `LiveState.ENDED`', function () {
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
var viewToggleActiveSpy, viewToggleEndedSpy;
return (0, tslib_1.__generator)(this, function (_a) {
switch (_a.label) {
case 0:
viewToggleActiveSpy = sinon.spy(liveIndicator.view, 'toggleActive');
viewToggleEndedSpy = sinon.spy(liveIndicator.view, 'toggleEnded');
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.INITIAL,
})];
case 1:
_a.sent();
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.SYNC,
})];
case 2:
_a.sent();
(0, chai_1.expect)(liveIndicator.isActive, 'active before `LiveState.ENDED`').to.be
.true;
return [4 /*yield*/, eventEmitter.emitAsync(constants_1.VideoEvent.LIVE_STATE_CHANGED, {
nextState: constants_1.LiveState.ENDED,
})];
case 3:
_a.sent();
(0, chai_1.expect)(liveIndicator.isActive, 'isActive').to.be.false;
(0, chai_1.expect)(viewToggleActiveSpy.lastCall.calledWith(false), 'view.toggleActive called with `false`').to.be.true;
(0, chai_1.expect)(viewToggleEndedSpy.lastCall.calledWith(true), 'view.toggleEnded called with `true`').to.be.true;
viewToggleActiveSpy.restore();
viewToggleEndedSpy.restore();
return [2 /*return*/];
}
});
});
});
});
});
});
//# sourceMappingURL=live-indicator.spec.js.map