linagora-rse
Version:
143 lines (115 loc) • 4.17 kB
JavaScript
'use strict';
/* global chai, sinon: false */
var expect = chai.expect;
describe('The esn.like Angular module', function() {
beforeEach(function() {
module('jadeTemplates');
module('esn.session');
module('esn.like');
module('esn.resource-link');
});
describe('The likeButton directive', function() {
var $compile, $rootScope, $scope, ResourceLinkAPIMock, sessionMock, session, LIKE_LINK_TYPE;
var userId = '1';
function compileDirective(html) {
var element = $compile(html)($scope);
$scope.$digest();
return element;
}
beforeEach(function() {
ResourceLinkAPIMock = {};
sessionMock = {
user: {
_id: userId
},
domain: {},
ready: {
then: function() {}
}
};
module(function($provide) {
$provide.value('ResourceLinkAPI', ResourceLinkAPIMock);
$provide.value('session', sessionMock);
});
inject(function(_$compile_, _$rootScope_, _LIKE_LINK_TYPE_, _session_) {
$compile = _$compile_;
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
LIKE_LINK_TYPE = _LIKE_LINK_TYPE_;
session = _session_;
});
});
describe('The like function', function() {
it('should not send request when resource is already liked', function() {
var spy = sinon.spy();
ResourceLinkAPIMock.create = spy;
$scope.message = {
_id: '123',
liked: true
};
var element = compileDirective('<like-button target-object-type="esn.message" target-id="message._id" liked="message.liked"/>');
element.isolateScope().like();
expect(spy).to.not.have.been.called;
});
it('should send request when resource is not liked', function(done) {
var messageId = '123';
$scope.message = {
_id: messageId
};
ResourceLinkAPIMock.create = function(source, target, type) {
expect(source).to.deep.equals({
objectType: 'user',
id: session.user._id
});
expect(target).to.deep.equals({
objectType: 'esn.message',
id: messageId
});
expect(type).to.deep.equals(LIKE_LINK_TYPE);
done();
};
var element = compileDirective('<like-button target-object-type="\'esn.message\'" target-id="message._id" liked="message.liked"/>');
element.isolateScope().like();
});
it('should set $scope.liked to true on call success', function() {
var messageId = '123';
$scope.message = {
_id: messageId
};
ResourceLinkAPIMock.create = function() {
return $q.when();
};
var element = compileDirective('<like-button target-object-type="\'esn.message\'" target-id="message._id" liked="message.liked"/>');
element.isolateScope().like();
$scope.$digest();
expect(element.isolateScope().liked).to.be.true;
});
it('should keep $scope.liked to false on call failure', function() {
var messageId = '123';
$scope.message = {
_id: messageId
};
ResourceLinkAPIMock.create = function() {
return $q.reject(new Error('Fail to update like'));
};
var element = compileDirective('<like-button target-object-type="\'esn.message\'" target-id="message._id" liked="message.liked"/>');
element.isolateScope().like();
$scope.$digest();
expect(element.isolateScope().liked).to.not.be.ok;
});
it('should call scope.onLiked on like success', function(done) {
var messageId = '123';
$scope.message = {
_id: messageId
};
$scope.onMessageLiked = done;
ResourceLinkAPIMock.create = function() {
return $q.when();
};
var element = compileDirective('<like-button target-object-type="\'esn.message\'" target-id="message._id" liked="message.liked" on-liked="onMessageLiked()"/>');
element.isolateScope().like();
$scope.$digest();
});
});
});
});