var AnimationModule = require('../visuals/animation/index');
var PromiseAnimation = AnimationModule.PromiseAnimation;
var Animation = AnimationModule.Animation;
var Q = require('q');

describe('Promise animation', function() {
  it('Will execute the closure', function() {
    var value = 0;
    var closure = function() {
      value++;
    };

    var animation = new PromiseAnimation({
      deferred: Q.defer(),
      closure: closure
    });
    animation.play();
    expect(value).toBe(1);
  });

  it('also takes animation packs', function() {
    var value = 0;
    var animation = new PromiseAnimation({
      animation: function() { value++; }
    });
    animation.play();
    expect(value).toBe(1);
  });

  it('Will resolve a deferred', function() {
    var value = 0;
    var closure = function() {
      value++;
    };

    var animation = new PromiseAnimation({
      closure: closure
    });
    animation
    .then(function() {
      value++;
    })
    .then(function() {
      if (value !== 2) {
        console.log('second promise failed!!');
      } else {
        console.log('1 more test passed');
      }
      // TODO -- make this work (aka the tests keep running until
      // this assertion finishes
      expect(value).toBe(2);
    });

    animation.play();
    expect(value).toBe(1);
  });

  it('will make one from a normal animation', function() {
    // poor mans spy function
    var value = 0;
    var anim = new Animation({
      closure: function() { value++; }
    });

    var animPromise = PromiseAnimation.fromAnimation(anim);
    animPromise
    .then(function() {
      value++;
    }).then(function() {
      // TODO fix
      expect(value).toBe(2);
      if (value !== 2) {
        console.log('a test failed!!');
      } else {
        console.log('another test passed');
      }
    });

    animPromise.play();
    expect(value).toBe(1);
  });
});
