Files
habitica/test/spec/controllers/partyCtrlSpec.js
2015-08-22 12:19:37 -05:00

214 lines
6.3 KiB
JavaScript

'use strict';
describe("Party Controller", function() {
var scope, ctrl, user, User, groups, rootScope, $controller;
beforeEach(function() {
user = specHelper.newUser(),
user._id = "unique-user-id";
User = {
user: user,
sync: sandbox.spy
}
module(function($provide) {
$provide.value('User', User);
});
inject(function(_$rootScope_, _$controller_, Groups){
rootScope = _$rootScope_;
scope = _$rootScope_.$new();
$controller = _$controller_;
groups = Groups;
// Load RootCtrl to ensure shared behaviors are loaded
$controller('RootCtrl', {$scope: scope, User: User});
ctrl = $controller('PartyCtrl', {$scope: scope, User: User});
});
});
describe('questAccept', function() {
it('calls Groups.questAccept', function() {
var party = {};
var groupSpy = sandbox.stub(groups, "questAccept", function(){return true;});
scope.questAccept(party);
groupSpy.should.have.been.calledOnce;
});
});
describe('questReject', function() {
it('calls Groups.questReject', function() {
var party = {};
var groupSpy = sandbox.stub(groups, "questReject", function(){return true;});
scope.questReject(party);
groupSpy.should.have.been.calledOnce;
});
});
describe('questCancel', function() {
var party, cancelSpy, windowSpy;
beforeEach(function() {
party = {};
cancelSpy = sandbox.stub(groups, "questCancel", function(){return true;});
});
afterEach(function() {
windowSpy.restore();
cancelSpy.restore();
});
it('calls Groups.questCancel when alert box is confirmed', function() {
windowSpy = sandbox.stub(window, "confirm", function(){return true});
scope.questCancel(party);
windowSpy.should.have.been.calledOnce;
windowSpy.should.have.been.calledWith(window.env.t('sureCancel'));
cancelSpy.should.have.been.calledOnce;
});
it('does not call Groups.questCancel when alert box is confirmed', function() {
windowSpy = sandbox.stub(window, "confirm", function(){return false});
scope.questCancel(party);
windowSpy.should.have.been.calledOnce;
cancelSpy.should.not.have.been.calledOnce;
});
});
describe('questAbort', function() {
var party, abortSpy, windowSpy;
beforeEach(function() {
party = {};
abortSpy = sandbox.stub(groups, "questAbort", function(){return true;});
});
afterEach(function() {
windowSpy.restore();
abortSpy.restore();
});
it('calls Groups.questAbort when two alert boxes are confirmed', function() {
windowSpy = sandbox.stub(window, "confirm", function(){return true});
scope.questAbort(party);
windowSpy.should.have.been.calledTwice;
windowSpy.should.have.been.calledWith(window.env.t('sureAbort'));
windowSpy.should.have.been.calledWith(window.env.t('doubleSureAbort'));
abortSpy.should.have.been.calledOnce;
});
it('does not call Groups.questAbort when first alert box is not confirmed', function() {
windowSpy = sandbox.stub(window, "confirm", function(){return false});
scope.questAbort(party);
windowSpy.should.have.been.calledOnce;
windowSpy.should.have.been.calledWith(window.env.t('sureAbort'));
windowSpy.should.not.have.been.calledWith(window.env.t('doubleSureAbort'));
abortSpy.should.not.have.been.calledOnce;
});
it('does not call Groups.questAbort when first alert box is confirmed but second one is not', function() {
// Hack to confirm first window, but not second
var shouldReturn = false;
windowSpy = sandbox.stub(window, "confirm", function(){
shouldReturn = !shouldReturn;
return shouldReturn;
});
scope.questAbort(party);
windowSpy.should.have.been.calledTwice;
windowSpy.should.have.been.calledWith(window.env.t('sureAbort'));
windowSpy.should.have.been.calledWith(window.env.t('doubleSureAbort'));
abortSpy.should.not.have.been.calledOnce;
});
});
describe('clickStartQuest', function() {
beforeEach(function() {
sandbox.stub(rootScope, 'openModal');
sandbox.stub(rootScope.$state, 'go');
});
it('opens quest modal if user has a quest', function() {
user.items.quests = {
whale: 1
};
scope.clickStartQuest();
expect(rootScope.$state.go).to.not.be.called;
expect(rootScope.openModal).to.be.calledOnce;
expect(rootScope.openModal).to.be.calledWith(
'ownedQuests',
{ controller: 'InventoryCtrl' }
);
});
it('does not open modal if user has no quests', function() {
user.items.quests = { };
scope.clickStartQuest();
expect(rootScope.openModal).to.not.be.called;
expect(rootScope.$state.go).to.be.calledOnce;
expect(rootScope.$state.go).to.be.calledWith('options.inventory.quests');
});
it('does not open modal if user had quests previously, but does not now', function() {
user.items.quests = {
whale: 0,
atom1: 0
};
scope.clickStartQuest();
expect(rootScope.openModal).to.not.be.called;
expect(rootScope.$state.go).to.be.calledOnce;
expect(rootScope.$state.go).to.be.calledWith('options.inventory.quests');
});
});
describe('#leaveOldPartyAndJoinNewParty', function() {
beforeEach(function() {
sandbox.stub(scope, 'join');
sandbox.stub(groups.Group, 'leave').yields();
sandbox.stub(groups, 'party').returns({
_id: 'old-party'
});
sandbox.stub(window, 'confirm').returns(true);
});
it('does nothing if user declines confirmation', function() {
window.confirm.returns(false);
scope.leaveOldPartyAndJoinNewParty('some-id', 'some-name');
expect(groups.Group.leave).to.not.be.called;
})
it('leaves user\'s current party', function() {
scope.leaveOldPartyAndJoinNewParty('some-id', 'some-name');
expect(groups.Group.leave).to.be.calledOnce;
expect(groups.Group.leave).to.be.calledWith({
gid: 'old-party',
keep: false
});
});
it('joins the new party', function() {
scope.leaveOldPartyAndJoinNewParty('some-id', 'some-name');
expect(scope.join).to.be.calledOnce;
expect(scope.join).to.be.calledWith({
id: 'some-id',
name: 'some-name'
});
});
});
});