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,23 +8,30 @@ describe('memberServices', function() {
|
||||
members = Members;
|
||||
}));
|
||||
|
||||
afterEach(function() {
|
||||
$httpBackend.verifyNoOutstandingExpectation();
|
||||
$httpBackend.verifyNoOutstandingRequest();
|
||||
});
|
||||
|
||||
|
||||
it('has no members at the beginning', function() {
|
||||
expect(members.members).to.be.an('object');
|
||||
expect(members.members).to.eql({});
|
||||
expect(members.selectedMember).to.be.undefined;
|
||||
});
|
||||
|
||||
it('populates members', function(){
|
||||
var uid = 'abc';
|
||||
members.populate({
|
||||
members: [{ _id: uid }]
|
||||
});
|
||||
describe('addToMembersList', function() {
|
||||
it('adds member to members object', function() {
|
||||
var member = { _id: 'user_id' };
|
||||
members.addToMembersList(member);
|
||||
expect(members.members).to.eql({
|
||||
abc: { _id: uid }
|
||||
user_id: { _id: 'user_id' }
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('selects a member', function(){
|
||||
describe('selectMember', function() {
|
||||
it('fetches member if not already in cache', function() {
|
||||
var uid = 'abc';
|
||||
$httpBackend.expectGET('/api/v2/members/' + uid).respond({ _id: uid });
|
||||
members.selectMember(uid, function(){});
|
||||
@@ -34,4 +41,26 @@ describe('memberServices', function() {
|
||||
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';
|
||||
(function(){
|
||||
angular
|
||||
.module('habitrpg')
|
||||
.factory('Members', membersFactory);
|
||||
|
||||
/**
|
||||
* Services that persists and retrieves user from localStorage.
|
||||
*/
|
||||
membersFactory.$inject = [
|
||||
'$rootScope',
|
||||
'Shared',
|
||||
'ApiUrl',
|
||||
'$resource'
|
||||
];
|
||||
|
||||
angular.module('habitrpg').factory('Members',
|
||||
['$rootScope', 'Shared', 'ApiUrl', '$resource',
|
||||
function($rootScope, Shared, ApiUrl, $resource) {
|
||||
function membersFactory($rootScope, Shared, ApiUrl, $resource) {
|
||||
var members = {};
|
||||
var Member = $resource(ApiUrl.get() + '/api/v2/members/:uid', {uid:'@_id'});
|
||||
var memberServices = {
|
||||
var fetchMember = $resource(ApiUrl.get() + '/api/v2/members/:uid', { uid: '@_id' }).get;
|
||||
|
||||
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;
|
||||
// Fetch from cache if we can. For guild members, only their uname will have been fetched on initial load,
|
||||
// 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
|
||||
// and then for guild)
|
||||
// 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();
|
||||
var memberIsReady = _checkIfMemberIsReady(members[uid]);
|
||||
|
||||
if (memberIsReady) {
|
||||
_prepareMember(self, members[uid], cb);
|
||||
} else {
|
||||
Member.get({uid: uid}, function(member){
|
||||
self.populate(member); // lazy load for later
|
||||
Shared.wrap(member,false);
|
||||
self.selectedMember = members[member._id];
|
||||
cb();
|
||||
fetchMember({ uid: uid }, function(member) {
|
||||
addToMembersList(member); // lazy load for later
|
||||
_prepareMember(self, member, 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){
|
||||
memberServices.populate(user);
|
||||
populate(user);
|
||||
})
|
||||
|
||||
return memberServices;
|
||||
}]);
|
||||
return {
|
||||
members: members,
|
||||
addToMembersList: addToMembersList,
|
||||
selectedMember: undefined,
|
||||
selectMember: selectMember
|
||||
}
|
||||
}
|
||||
}());
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/**
|
||||
* Created by Sabe on 7/7/2015.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
(function(){
|
||||
angular
|
||||
.module('habitrpg')
|
||||
|
||||
Reference in New Issue
Block a user