diff --git a/lms/static/coffee/spec/helper.coffee b/lms/static/coffee/spec/helper.coffee index 9b575452c7..1bb92160ce 100644 --- a/lms/static/coffee/spec/helper.coffee +++ b/lms/static/coffee/spec/helper.coffee @@ -33,14 +33,14 @@ jasmine.stubYoutubePlayer = -> 'getCurrentTime', 'getPlayerState', 'getVolume', 'setVolume', 'loadVideoById', 'playVideo', 'pauseVideo', 'seekTo'] -jasmine.stubVideoPlayer = (context, enableParts) -> +jasmine.stubVideoPlayer = (context, enableParts, createPlayer=true) -> enableParts = [enableParts] unless $.isArray(enableParts) suite = context.suite currentPartName = suite.description while suite = suite.parentSuite enableParts.push currentPartName - for part in ['VideoCaption', 'VideoSpeedControl', 'VideoProgressSlider'] + for part in ['VideoCaption', 'VideoSpeedControl', 'VideoVolumeControl', 'VideoProgressSlider'] unless $.inArray(part, enableParts) >= 0 spyOn window, part @@ -49,7 +49,8 @@ jasmine.stubVideoPlayer = (context, enableParts) -> YT.Player = undefined context.video = new Video 'example', '.75:abc123,1.0:def456' jasmine.stubYoutubePlayer() - return new VideoPlayer context.video + if createPlayer + return new VideoPlayer context.video spyOn(window, 'onunload') diff --git a/lms/static/coffee/spec/modules/video/video_player_spec.coffee b/lms/static/coffee/spec/modules/video/video_player_spec.coffee index 05f447b8f9..ebcb2cc009 100644 --- a/lms/static/coffee/spec/modules/video/video_player_spec.coffee +++ b/lms/static/coffee/spec/modules/video/video_player_spec.coffee @@ -1,6 +1,6 @@ describe 'VideoPlayer', -> beforeEach -> - jasmine.stubVideoPlayer @ + jasmine.stubVideoPlayer @, [], false afterEach -> YT.Player = undefined @@ -11,69 +11,94 @@ describe 'VideoPlayer', -> spyOn YT, 'Player' $.fn.qtip.andCallFake -> $(this).data('qtip', true) - $('.video').append $('
') - @player = new VideoPlayer @video + $('.video').append $('') - it 'instanticate current time to zero', -> - expect(@player.currentTime).toEqual 0 + describe 'always', -> + beforeEach -> + @player = new VideoPlayer @video - it 'set the element', -> - expect(@player.element).toBe '#video_example' + it 'instanticate current time to zero', -> + expect(@player.currentTime).toEqual 0 - it 'create video control', -> - expect(window.VideoControl).toHaveBeenCalledWith @player + it 'set the element', -> + expect(@player.element).toBe '#video_example' - it 'create video caption', -> - expect(window.VideoCaption).toHaveBeenCalledWith @player, 'def456' + it 'create video control', -> + expect(window.VideoControl).toHaveBeenCalledWith @player - it 'create video speed control', -> - expect(window.VideoSpeedControl).toHaveBeenCalledWith @player, ['0.75', '1.0'] + it 'create video caption', -> + expect(window.VideoCaption).toHaveBeenCalledWith @player, 'def456' - it 'create video progress slider', -> - expect(window.VideoProgressSlider).toHaveBeenCalledWith @player + it 'create video speed control', -> + expect(window.VideoSpeedControl).toHaveBeenCalledWith @player, ['0.75', '1.0'] - it 'create Youtube player', -> - expect(YT.Player).toHaveBeenCalledWith 'example' - playerVars: - controls: 0 - wmode: 'transparent' - rel: 0 - showinfo: 0 - enablejsapi: 1 - videoId: 'def456' - events: - onReady: @player.onReady - onStateChange: @player.onStateChange + it 'create video progress slider', -> + expect(window.VideoProgressSlider).toHaveBeenCalledWith @player - it 'bind to seek event', -> - expect($(@player)).toHandleWith 'seek', @player.onSeek + it 'create Youtube player', -> + expect(YT.Player).toHaveBeenCalledWith 'example' + playerVars: + controls: 0 + wmode: 'transparent' + rel: 0 + showinfo: 0 + enablejsapi: 1 + videoId: 'def456' + events: + onReady: @player.onReady + onStateChange: @player.onStateChange - it 'bind to updatePlayTime event', -> - expect($(@player)).toHandleWith 'updatePlayTime', @player.onUpdatePlayTime + it 'bind to seek event', -> + expect($(@player)).toHandleWith 'seek', @player.onSeek - it 'bidn to speedChange event', -> - expect($(@player)).toHandleWith 'speedChange', @player.onSpeedChange + it 'bind to updatePlayTime event', -> + expect($(@player)).toHandleWith 'updatePlayTime', @player.onUpdatePlayTime - it 'bind to play event', -> - expect($(@player)).toHandleWith 'play', @player.onPlay + it 'bidn to speedChange event', -> + expect($(@player)).toHandleWith 'speedChange', @player.onSpeedChange - it 'bind to paused event', -> - expect($(@player)).toHandleWith 'pause', @player.onPause + it 'bind to play event', -> + expect($(@player)).toHandleWith 'play', @player.onPlay - it 'bind to ended event', -> - expect($(@player)).toHandleWith 'ended', @player.onPause + it 'bind to paused event', -> + expect($(@player)).toHandleWith 'pause', @player.onPause - it 'bind to key press', -> - expect($(document)).toHandleWith 'keyup', @player.bindExitFullScreen + it 'bind to ended event', -> + expect($(@player)).toHandleWith 'ended', @player.onPause - it 'bind to fullscreen switching button', -> - expect($('.add-fullscreen')).toHandleWith 'click', @player.toggleFullScreen + it 'bind to key press', -> + expect($(document)).toHandleWith 'keyup', @player.bindExitFullScreen + + it 'bind to fullscreen switching button', -> + console.debug $('.add-fullscreen') + expect($('.add-fullscreen')).toHandleWith 'click', @player.toggleFullScreen describe 'when not on a touch based device', -> + beforeEach -> + spyOn(window, 'onTouchBasedDevice').andReturn false + $('.add-fullscreen, .hide-subtitles').removeData 'qtip' + @player = new VideoPlayer @video + it 'add the tooltip to fullscreen and subtitle button', -> expect($('.add-fullscreen')).toHaveData 'qtip' expect($('.hide-subtitles')).toHaveData 'qtip' + it 'create video volume control', -> + expect(window.VideoVolumeControl).toHaveBeenCalledWith @player + + describe 'when on a touch based device', -> + beforeEach -> + spyOn(window, 'onTouchBasedDevice').andReturn true + $('.add-fullscreen, .hide-subtitles').removeData 'qtip' + @player = new VideoPlayer @video + + it 'does not add the tooltip to fullscreen and subtitle button', -> + expect($('.add-fullscreen')).not.toHaveData 'qtip' + expect($('.hide-subtitles')).not.toHaveData 'qtip' + + it 'does not create video volume control', -> + expect(window.VideoVolumeControl).not.toHaveBeenCalled() + describe 'onReady', -> beforeEach -> @video.embed() diff --git a/lms/static/coffee/src/modules/video/video_player.coffee b/lms/static/coffee/src/modules/video/video_player.coffee index cccc6873b1..0dd52a128b 100644 --- a/lms/static/coffee/src/modules/video/video_player.coffee +++ b/lms/static/coffee/src/modules/video/video_player.coffee @@ -30,7 +30,7 @@ class @VideoPlayer render: -> new VideoControl @ new VideoCaption @, @video.youtubeId('1.0') - new VideoVolumeControl @ + new VideoVolumeControl @ unless onTouchBasedDevice() new VideoSpeedControl @, @video.speeds new VideoProgressSlider @ @player = new YT.Player @video.id,