module("Discourse.Post");

var buildPost = function(args) {
  return Discourse.Post.create(_.merge({
    id: 1,
    can_delete: true,
    version: 1
  }, args || {}));
};

test('defaults', function() {
  var post = Discourse.Post.create({id: 1});
  blank(post.get('deleted_at'), "it has no deleted_at by default");
  blank(post.get('deleted_by'), "there is no deleted_by by default");
});

test('new_user', function() {
  var post = Discourse.Post.create({trust_level: 0});
  ok(post.get('new_user'), "post is from a new user");

  post.set('trust_level', 1);
  ok(!post.get('new_user'), "post is no longer from a new user");
});

test('firstPost', function() {
  var post = Discourse.Post.create({post_number: 1});
  ok(post.get('firstPost'), "it's the first post");

  post.set('post_number', 10);
  ok(!post.get('firstPost'), "post is no longer the first post");
});

test('updateFromPost', function() {
  var post = Discourse.Post.create({
    post_number: 1,
    raw: 'hello world'
  });

  post.updateFromPost(Discourse.Post.create({
    raw: 'different raw',
    wat: function() { return 123; }
  }));

  equal(post.get('raw'), "different raw", "raw field updated");
});

test('hasHistory', function() {
  var post = Discourse.Post.create({id: 1});
  ok(!post.get('hasHistory'), 'posts without versions have no history');
  post.set('version', 1);
  ok(!post.get('hasHistory'), 'posts with one version have no history');
  post.set('version', 2);
  ok(post.get('hasHistory'), 'posts with more than one version have a history');
});


test('destroy by staff', function() {
  var user = Discourse.User.create({username: 'staff', staff: true});
  var post = buildPost({user: user});

  this.stub(Discourse, 'ajax').returns(new Em.Deferred());
  post.destroy(user);

  present(post.get('deleted_at'), "it has a `deleted_at` field.");
  equal(post.get('deleted_by'), user, "it has the user in the `deleted_by` field");
  ok(Discourse.ajax.calledOnce, "it made an AJAX call");

  post.recover();
  blank(post.get('deleted_at'), "it clears `deleted_at` when recovering");
  blank(post.get('deleted_by'), "it clears `deleted_by` when recovering");

});

test('destroy by non-staff', function() {
  var originalCooked = "this is the original cooked value";
  var user = Discourse.User.create({username: 'evil trout'});
  var post = buildPost({user: user, cooked: originalCooked});

  this.stub(Discourse, 'ajax');
  post.destroy(user);

  ok(!post.get('can_delete'), "the post can't be deleted again in this session");
  ok(post.get('cooked') !== originalCooked, "the cooked content changed");
  equal(post.get('version'), 2, "the version number increased");
  ok(Discourse.ajax.calledOnce, "it made an AJAX call");
});

