(function () {
    'use strict';
    describe('VideoPlayPauseControl', function () {
        var state, oldOTBD;

        beforeEach(function () {
            oldOTBD = window.onTouchBasedDevice;
            window.onTouchBasedDevice = jasmine
                .createSpy('onTouchBasedDevice').andReturn(null);
            state = jasmine.initializePlayer();
            spyOn(state.videoCommands, 'execute');
            spyOn(state.videoSaveStatePlugin, 'saveState');
        });

        afterEach(function () {
            $('source').remove();
            state.storage.clear();
            state.videoPlayer.destroy();
            window.onTouchBasedDevice = oldOTBD;
        });

        it('can render the control', function () {
            expect($('.video_control.play')).toExist();
        });

        it('add ARIA attributes to play control', function () {
            expect($('.video_control.play')).toHaveAttrs({
                'aria-disabled': 'false'
            });
        });

        it('can update ARIA state on play', function () {
            state.el.trigger('play');
            expect($('.video_control.pause')).toHaveAttrs({
                'aria-disabled': 'false'
            });
        });

        it('can update ARIA state on video ends', function () {
            state.el.trigger('play');
            state.el.trigger('ended');
            expect($('.video_control.play')).toHaveAttrs({
                'aria-disabled': 'false'
            });
        });

        it('can update state on pause', function () {
            state.el.trigger('pause');
            expect(state.videoSaveStatePlugin.saveState).toHaveBeenCalledWith(true);
        });

        it('can start video playing on click', function () {
            $('.video_control.play').click();
            expect(state.videoCommands.execute).toHaveBeenCalledWith('togglePlayback');
        });

        it('can destroy itself', function () {
            state.videoPlayPauseControl.destroy();
            expect(state.videoPlayPauseControl).toBeUndefined();
        });
    });
}).call(this);
