it("must wait until the tech is ready to resume the player", function () {
          var clock = sinon.useFakeTimers();
          snapshot.playing = true;
          snapshot.currentTime = 10;
          playerUtils.isReadyToResume.returns(false);
          player.currentTime.returns(0);
          player.play.reset();
          playerUtils.restorePlayerSnapshot(player, snapshot);
          player.trigger('canplay');
          sinon.assert.notCalled(player.play);
          sinon.assert.notCalled(player.currentTime);
          clock.tick(1000);
          playerUtils.isReadyToResume.returns(false);
          clock.tick(1100);

          sinon.assert.calledWithExactly(player.currentTime, snapshot.currentTime);
          player.trigger('seeked');
          sinon.assert.called(player.play);

          clock.restore();
        });
        it("must resume the video if the tech is ready to resume", function () {
          snapshot.playing = true;
          snapshot.currentTime = 10;
          playerUtils.isReadyToResume.returns(true);
          player.currentTime.returns(0);
          player.play.reset();
          player.currentTime.reset();
          playerUtils.restorePlayerSnapshot(player, snapshot);
          sinon.assert.notCalled(player.play);
          player.trigger('canplay');

          sinon.assert.calledWithExactly(player.currentTime, snapshot.currentTime);
          player.trigger('seeked');
          sinon.assert.called(player.play);
        });
        it("must try to resume the video event the video el does not triggers the 'canplay' evt", function(){
          var clock = sinon.useFakeTimers();
          snapshot.playing = true;
          snapshot.currentTime = 10;
          playerUtils.isReadyToResume.returns(true);
          player.currentTime.returns(0);
          player.play.reset();
          player.currentTime.reset();
          playerUtils.restorePlayerSnapshot(player, snapshot);
          sinon.assert.notCalled(player.play);
          clock.tick(1000);

          sinon.assert.calledWithExactly(player.currentTime, snapshot.currentTime);
          player.trigger('seeked');
          sinon.assert.called(player.play);
          clock.restore();
        });
        it("must log a warning if the resume action throws an exception after waiting for the tech to be ready", function () {
          var clock = sinon.useFakeTimers();
          sinon.stub(videojs.log, 'warn');
          snapshot.playing = true;
          snapshot.currentTime = 0;
          playerUtils.isReadyToResume.returns(false);
          player.currentTime.returns(0);
          player.play.reset();
          playerUtils.restorePlayerSnapshot(player, snapshot);
          player.trigger('canplay');
          sinon.assert.notCalled(player.play);
          sinon.assert.notCalled(player.currentTime);
          player.play.throws();
          clock.tick(2000);

          sinon.assert.calledWith(videojs.log.warn, 'Failed to resume the content after an advertisement');
          clock.restore();
        });
 afterEach(function () {
   player.play.restore();
   playerUtils.isReadyToResume.restore();
   player.currentTime.restore();
 });