mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
Refactor member service; Remove logic in functions that were never used
This commit is contained in:
@@ -8,30 +8,59 @@ describe('memberServices', function() {
|
|||||||
members = Members;
|
members = Members;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
afterEach(function() {
|
||||||
|
$httpBackend.verifyNoOutstandingExpectation();
|
||||||
|
$httpBackend.verifyNoOutstandingRequest();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it('has no members at the beginning', function() {
|
it('has no members at the beginning', function() {
|
||||||
expect(members.members).to.be.an('object');
|
expect(members.members).to.be.an('object');
|
||||||
expect(members.members).to.eql({});
|
expect(members.members).to.eql({});
|
||||||
expect(members.selectedMember).to.be.undefined;
|
expect(members.selectedMember).to.be.undefined;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('populates members', function(){
|
describe('addToMembersList', function() {
|
||||||
var uid = 'abc';
|
it('adds member to members object', function() {
|
||||||
members.populate({
|
var member = { _id: 'user_id' };
|
||||||
members: [{ _id: uid }]
|
members.addToMembersList(member);
|
||||||
});
|
expect(members.members).to.eql({
|
||||||
expect(members.members).to.eql({
|
user_id: { _id: 'user_id' }
|
||||||
abc: { _id: uid }
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('selects a member', function(){
|
describe('selectMember', function() {
|
||||||
var uid = 'abc';
|
it('fetches member if not already in cache', function() {
|
||||||
$httpBackend.expectGET('/api/v2/members/' + uid).respond({ _id: uid });
|
var uid = 'abc';
|
||||||
members.selectMember(uid, function(){});
|
$httpBackend.expectGET('/api/v2/members/' + uid).respond({ _id: uid });
|
||||||
$httpBackend.flush();
|
members.selectMember(uid, function(){});
|
||||||
|
$httpBackend.flush();
|
||||||
|
|
||||||
expect(members.selectedMember._id).to.eql(uid);
|
expect(members.selectedMember._id).to.eql(uid);
|
||||||
expect(members.members).to.have.property(uid);
|
expect(members.members).to.have.property(uid);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fetches member if member data in cache is incomplete', function() {
|
||||||
|
var uid = 'abc';
|
||||||
|
members.members = {
|
||||||
|
abc: { _id: 'abc', items: {} }
|
||||||
|
}
|
||||||
|
$httpBackend.expectGET('/api/v2/members/' + uid).respond({ _id: uid });
|
||||||
|
members.selectMember(uid, function(){});
|
||||||
|
$httpBackend.flush();
|
||||||
|
|
||||||
|
expect(members.selectedMember._id).to.eql(uid);
|
||||||
|
expect(members.members).to.have.property(uid);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('gets member from cache if member has a weapons object', function() {
|
||||||
|
var uid = 'abc';
|
||||||
|
members.members[uid] = { _id: uid, items: { weapon: {} } };
|
||||||
|
members.selectMember(uid, function(){
|
||||||
|
expect(members.selectedMember._id).to.eql(uid);
|
||||||
|
expect(members.members).to.have.property(uid);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,87 +1,60 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
(function(){
|
||||||
|
angular
|
||||||
|
.module('habitrpg')
|
||||||
|
.factory('Members', membersFactory);
|
||||||
|
|
||||||
/**
|
membersFactory.$inject = [
|
||||||
* Services that persists and retrieves user from localStorage.
|
'$rootScope',
|
||||||
*/
|
'Shared',
|
||||||
|
'ApiUrl',
|
||||||
|
'$resource'
|
||||||
|
];
|
||||||
|
|
||||||
angular.module('habitrpg').factory('Members',
|
function membersFactory($rootScope, Shared, ApiUrl, $resource) {
|
||||||
['$rootScope', 'Shared', 'ApiUrl', '$resource',
|
var members = {};
|
||||||
function($rootScope, Shared, ApiUrl, $resource) {
|
var fetchMember = $resource(ApiUrl.get() + '/api/v2/members/:uid', { uid: '@_id' }).get;
|
||||||
var members = {};
|
|
||||||
var Member = $resource(ApiUrl.get() + '/api/v2/members/:uid', {uid:'@_id'});
|
|
||||||
var memberServices = {
|
|
||||||
|
|
||||||
Member: Member,
|
function selectMember(uid, cb) {
|
||||||
|
|
||||||
members: members,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows us to lazy-load party / group / public members throughout the application.
|
|
||||||
* @param obj - either a group or an individual member. If it's a group, we lazy-load all of its members.
|
|
||||||
*/
|
|
||||||
populate: function(obj){
|
|
||||||
|
|
||||||
function populateGroup(group){
|
|
||||||
_.each(group.members, function(member){
|
|
||||||
// meaning `populate('members')` wasn't run on the server, so we're getting the "in-database" form of
|
|
||||||
// the members array, which is just a list of IDs - not the populated objects
|
|
||||||
if (_.isString(member)) return;
|
|
||||||
|
|
||||||
// lazy-load
|
|
||||||
members[member._id] = member;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Array of groups
|
|
||||||
if (_.isArray(obj)) {
|
|
||||||
if (obj[0] && obj[0].members) {
|
|
||||||
_.each(obj, function(group){
|
|
||||||
populateGroup(group);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Individual Group
|
|
||||||
} else if (obj.members)
|
|
||||||
populateGroup(obj);
|
|
||||||
|
|
||||||
// individual Member
|
|
||||||
if (obj._id) {
|
|
||||||
members[obj._id] = obj;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
selectedMember: undefined,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Once users are populated, we fetch them throughout the application (eg, modals). This
|
|
||||||
* either gets them or fetches if not available
|
|
||||||
* @param uid
|
|
||||||
*/
|
|
||||||
selectMember: function(uid, cb) {
|
|
||||||
var self = this;
|
var self = this;
|
||||||
// Fetch from cache if we can. For guild members, only their uname will have been fetched on initial load,
|
var memberIsReady = _checkIfMemberIsReady(members[uid]);
|
||||||
// check if they have full fields (eg, check profile.items and an item inside
|
|
||||||
// because sometimes profile.items exists but it's empty like when user is fetched for party
|
if (memberIsReady) {
|
||||||
// and then for guild)
|
_prepareMember(self, members[uid], cb);
|
||||||
// and if not, fetch them
|
|
||||||
if (members[uid] && members[uid].items && members[uid].items.weapon) {
|
|
||||||
Shared.wrap(members[uid],false);
|
|
||||||
self.selectedMember = members[uid];
|
|
||||||
cb();
|
|
||||||
} else {
|
} else {
|
||||||
Member.get({uid: uid}, function(member){
|
fetchMember({ uid: uid }, function(member) {
|
||||||
self.populate(member); // lazy load for later
|
addToMembersList(member); // lazy load for later
|
||||||
Shared.wrap(member,false);
|
_prepareMember(self, member, cb);
|
||||||
self.selectedMember = members[member._id];
|
|
||||||
cb();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addToMembersList(member){
|
||||||
|
if (member._id) {
|
||||||
|
members[member._id] = member;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function _checkIfMemberIsReady(member) {
|
||||||
|
return member && member.items && member.items.weapon;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _prepareMember(self, member, cb) {
|
||||||
|
Shared.wrap(member, false);
|
||||||
|
self.selectedMember = members[member._id];
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
|
||||||
|
$rootScope.$on('userUpdated', function(event, user){
|
||||||
|
populate(user);
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
members: members,
|
||||||
|
addToMembersList: addToMembersList,
|
||||||
|
selectedMember: undefined,
|
||||||
|
selectMember: selectMember
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}());
|
||||||
$rootScope.$on('userUpdated', function(event, user){
|
|
||||||
memberServices.populate(user);
|
|
||||||
})
|
|
||||||
|
|
||||||
return memberServices;
|
|
||||||
}]);
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
/**
|
'use strict';
|
||||||
* Created by Sabe on 7/7/2015.
|
|
||||||
*/
|
|
||||||
(function(){
|
(function(){
|
||||||
angular
|
angular
|
||||||
.module('habitrpg')
|
.module('habitrpg')
|
||||||
|
|||||||
Reference in New Issue
Block a user