// eslint-disable-next-line no-shadow-restricted-names (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);