Files
edx-platform/xmodule/js/spec/video/video_quality_control_spec.js
2022-06-20 18:20:06 +05:00

123 lines
4.2 KiB
JavaScript

(function(undefined) {
describe('VideoQualityControl', function() {
var state, qualityControl, videoPlayer, player;
afterEach(function() {
$('source').remove();
if (state.storage) {
state.storage.clear();
}
state.videoPlayer.destroy();
});
describe('constructor, YouTube mode', function() {
beforeEach(function() {
state = jasmine.initializePlayerYouTube();
qualityControl = state.videoQualityControl;
videoPlayer = state.videoPlayer;
player = videoPlayer.player;
// Define empty methods in YouTube stub
player.quality = 'large';
player.setPlaybackQuality.and.callFake(function(quality) {
player.quality = quality;
});
});
it('contains the quality control and is initially hidden',
function() {
expect(qualityControl.el).toHaveClass(
'quality-control is-hidden'
);
});
it('add ARIA attributes to quality control', function() {
expect(qualityControl.el).toHaveAttrs({
'aria-disabled': 'false'
});
});
it('bind the quality control', function() {
expect(qualityControl.el).toHandleWith('click',
qualityControl.toggleQuality
);
expect(state.el).toHandle('play');
});
it('calls fetchAvailableQualities only once', function() {
expect(player.getAvailableQualityLevels.calls.count())
.toEqual(0);
videoPlayer.onPlay();
videoPlayer.onPlay();
expect(player.getAvailableQualityLevels.calls.count())
.toEqual(1);
});
it('initializes with a quality equal to large', function() {
videoPlayer.onPlay();
expect(player.setPlaybackQuality).toHaveBeenCalledWith('large');
});
it('shows the quality control on play if HD is available',
function() {
videoPlayer.onPlay();
expect(qualityControl.el).not.toHaveClass('is-hidden');
});
it('leaves quality control hidden on play if HD is not available',
function() {
player.getAvailableQualityLevels.and.returnValue(
['large', 'medium', 'small']
);
videoPlayer.onPlay();
expect(qualityControl.el).toHaveClass('is-hidden');
});
it('switch to HD if it is available', function() {
videoPlayer.onPlay();
qualityControl.quality = 'large';
qualityControl.el.click();
expect(player.setPlaybackQuality)
.toHaveBeenCalledWith('highres');
qualityControl.quality = 'highres';
qualityControl.el.click();
expect(player.setPlaybackQuality).toHaveBeenCalledWith('large');
});
it('quality control is active if HD is available',
function() {
player.getAvailableQualityLevels.and.returnValue(
['highres', 'hd1080', 'hd720']
);
qualityControl.quality = 'highres';
videoPlayer.onPlay();
expect(qualityControl.el).toHaveClass('active');
});
it('can destroy itself', function() {
state.videoQualityControl.destroy();
expect(state.videoQualityControl).toBeUndefined();
expect($('.quality-control')).not.toExist();
});
});
describe('constructor, HTML5 mode', function() {
it('does not contain the quality control', function() {
state = jasmine.initializePlayer();
expect(state.el.find('.quality-control').length).toBe(0);
});
});
});
}).call(this);