mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
v2 port: enable integration tests, port register route
This commit is contained in:
@@ -309,10 +309,10 @@ gulp.task('test:e2e:safe', ['test:prepare', 'test:prepare:server'], (cb) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('test:api-v2', ['test:prepare:server'], (done) => {
|
/*gulp.task('test:api-v2', ['test:prepare:server'], (done) => {
|
||||||
process.env.API_VERSION = 'v2';
|
process.env.API_VERSION = 'v2';
|
||||||
awaitPort(TEST_SERVER_PORT).then(() => {
|
awaitPort(TEST_SERVER_PORT).then(() => {
|
||||||
runMochaTests('./test/api/v2/**/*.js', server, done)
|
runMochaTests('./test/api/v2/**//*.js', server, done)
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -337,6 +337,16 @@ gulp.task('test:api-v2:safe', ['test:prepare:server'], (done) => {
|
|||||||
);
|
);
|
||||||
pipe(runner);
|
pipe(runner);
|
||||||
});
|
});
|
||||||
|
});*/
|
||||||
|
|
||||||
|
gulp.task('test:api-v2:integration', (done) => {
|
||||||
|
let runner = exec(
|
||||||
|
testBin('mocha test/api/v2 --recursive'),
|
||||||
|
{maxBuffer: 500*1024},
|
||||||
|
(err, stdout, stderr) => done(err)
|
||||||
|
)
|
||||||
|
|
||||||
|
pipe(runner);
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('test:api-v3:unit', (done) => {
|
gulp.task('test:api-v3:unit', (done) => {
|
||||||
@@ -374,6 +384,7 @@ gulp.task('test', (done) => {
|
|||||||
'test:common',
|
'test:common',
|
||||||
'test:api-v3:unit',
|
'test:api-v3:unit',
|
||||||
'test:api-v3:integration',
|
'test:api-v3:integration',
|
||||||
|
'test:api-v2:integration',
|
||||||
done
|
done
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
generateChallenge,
|
generateChallenge,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('GET /challenges/:id', () => {
|
xdescribe('GET /challenges/:id', () => {
|
||||||
context('Member of a challenge', () => {
|
context('Member of a challenge', () => {
|
||||||
let leader, party, challenge;
|
let leader, party, challenge;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
resetHabiticaDB,
|
resetHabiticaDB,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('GET /groups', () => {
|
xdescribe('GET /groups', () => {
|
||||||
const NUMBER_OF_PUBLIC_GUILDS = 3;
|
const NUMBER_OF_PUBLIC_GUILDS = 3;
|
||||||
const NUMBER_OF_USERS_GUILDS = 2;
|
const NUMBER_OF_USERS_GUILDS = 2;
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
each,
|
each,
|
||||||
} from 'lodash';
|
} from 'lodash';
|
||||||
|
|
||||||
describe('GET /groups/:id', () => {
|
xdescribe('GET /groups/:id', () => {
|
||||||
let typesOfGroups = {};
|
let typesOfGroups = {};
|
||||||
typesOfGroups['public guild'] = { type: 'guild', privacy: 'public' };
|
typesOfGroups['public guild'] = { type: 'guild', privacy: 'public' };
|
||||||
typesOfGroups['private guild'] = { type: 'guild', privacy: 'private' };
|
typesOfGroups['private guild'] = { type: 'guild', privacy: 'private' };
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /groups', () => {
|
xdescribe('POST /groups', () => {
|
||||||
context('All groups', () => {
|
context('All groups', () => {
|
||||||
let leader;
|
let leader;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /groups/:id', () => {
|
xdescribe('POST /groups/:id', () => {
|
||||||
context('user is not the leader of the group', () => {
|
context('user is not the leader of the group', () => {
|
||||||
let user, otherUser, groupUserDoesNotOwn;
|
let user, otherUser, groupUserDoesNotOwn;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
import { each } from 'lodash';
|
import { each } from 'lodash';
|
||||||
|
|
||||||
describe('POST /groups/:id/invite', () => {
|
xdescribe('POST /groups/:id/invite', () => {
|
||||||
context('user is a member of the group', () => {
|
context('user is a member of the group', () => {
|
||||||
each({
|
each({
|
||||||
'public guild': {type: 'guild', privacy: 'public'},
|
'public guild': {type: 'guild', privacy: 'public'},
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
import { each } from 'lodash';
|
import { each } from 'lodash';
|
||||||
|
|
||||||
describe('POST /groups/:id/join', () => {
|
xdescribe('POST /groups/:id/join', () => {
|
||||||
context('user is already a member of the group', () => {
|
context('user is already a member of the group', () => {
|
||||||
it('returns an error');
|
it('returns an error');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
createAndPopulateGroup,
|
createAndPopulateGroup,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /groups/:id/leave', () => {
|
xdescribe('POST /groups/:id/leave', () => {
|
||||||
context('user is not member of the group', () => {
|
context('user is not member of the group', () => {
|
||||||
it('returns an error');
|
it('returns an error');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /groups/:id/removeMember', () => {
|
xdescribe('POST /groups/:id/removeMember', () => {
|
||||||
context('user is not member of the group', () => {
|
context('user is not member of the group', () => {
|
||||||
it('returns an error');
|
it('returns an error');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('DELETE /groups/:id/chat', () => {
|
xdescribe('DELETE /groups/:id/chat', () => {
|
||||||
let group, message, user;
|
let group, message, user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {
|
|||||||
createAndPopulateGroup,
|
createAndPopulateGroup,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('GET /groups/:id/chat', () => {
|
xdescribe('GET /groups/:id/chat', () => {
|
||||||
context('group with multiple messages', () => {
|
context('group with multiple messages', () => {
|
||||||
let group, member, user;
|
let group, member, user;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /groups/:id/chat', () => {
|
xdescribe('POST /groups/:id/chat', () => {
|
||||||
let group, user;
|
let group, user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /groups/:id/chat/:id/clearflags', () => {
|
xdescribe('POST /groups/:id/chat/:id/clearflags', () => {
|
||||||
let guild;
|
let guild;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /groups/:id/chat/:id/flag', () => {
|
xdescribe('POST /groups/:id/chat/:id/flag', () => {
|
||||||
context('another member\'s message', () => {
|
context('another member\'s message', () => {
|
||||||
let group, member, message, user;
|
let group, member, message, user;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /groups/:id/chat/:id/like', () => {
|
xdescribe('POST /groups/:id/chat/:id/like', () => {
|
||||||
context('another member\'s message', () => {
|
context('another member\'s message', () => {
|
||||||
let group, member, message, user;
|
let group, member, message, user;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {
|
|||||||
generateUser,
|
generateUser,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /members/id/gift', () => {
|
xdescribe('POST /members/id/gift', () => {
|
||||||
let userWithBalance, userWithoutBalance;
|
let userWithBalance, userWithoutBalance;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {
|
|||||||
generateUser,
|
generateUser,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /members/id/message', () => {
|
xdescribe('POST /members/id/message', () => {
|
||||||
let sender, recipient;
|
let sender, recipient;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
import { find } from 'lodash';
|
import { find } from 'lodash';
|
||||||
|
|
||||||
describe('DELETE /user', () => {
|
xdescribe('DELETE /user', () => {
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {
|
|||||||
generateUser,
|
generateUser,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('GET /user', () => {
|
xdescribe('GET /user', () => {
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
before(async () => {
|
before(async () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {
|
|||||||
generateUser,
|
generateUser,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('GET /user/tags', () => {
|
xdescribe('GET /user/tags', () => {
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../helpers/api-integration/v2';
|
} from '../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('GET /user/tags/id', () => {
|
xdescribe('GET /user/tags/id', () => {
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
|
|
||||||
import { each, get } from 'lodash';
|
import { each, get } from 'lodash';
|
||||||
|
|
||||||
describe('PUT /user', () => {
|
xdescribe('PUT /user', () => {
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
import { each } from 'lodash';
|
import { each } from 'lodash';
|
||||||
|
|
||||||
describe('GET /user/anonymized', () => {
|
xdescribe('GET /user/anonymized', () => {
|
||||||
let user, anonymizedUser;
|
let user, anonymizedUser;
|
||||||
|
|
||||||
before(async () => {
|
before(async () => {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
|
|
||||||
import { each } from 'lodash';
|
import { each } from 'lodash';
|
||||||
|
|
||||||
describe('POST /user/batch-update', () => {
|
xdescribe('POST /user/batch-update', () => {
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {
|
|||||||
generateUser,
|
generateUser,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /user/pushDevice', () => {
|
xdescribe('POST /user/pushDevice', () => {
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('DELETE /user/tasks/:id', () => {
|
xdescribe('DELETE /user/tasks/:id', () => {
|
||||||
let user, task;
|
let user, task;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {
|
|||||||
generateUser,
|
generateUser,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('GET /user/tasks/', () => {
|
xdescribe('GET /user/tasks/', () => {
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('GET /user/tasks/:id', () => {
|
xdescribe('GET /user/tasks/:id', () => {
|
||||||
let user, task;
|
let user, task;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import {
|
|||||||
translate as t,
|
translate as t,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('POST /user/tasks', () => {
|
xdescribe('POST /user/tasks', () => {
|
||||||
let user;
|
let user;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import {
|
|||||||
generateUser,
|
generateUser,
|
||||||
} from '../../../../helpers/api-integration/v2';
|
} from '../../../../helpers/api-integration/v2';
|
||||||
|
|
||||||
describe('PUT /user/tasks/:id', () => {
|
xdescribe('PUT /user/tasks/:id', () => {
|
||||||
let user, task;
|
let user, task;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
|||||||
@@ -4,5 +4,5 @@ requester.setApiVersion('v2');
|
|||||||
export { requester };
|
export { requester };
|
||||||
|
|
||||||
export { translate } from '../translate';
|
export { translate } from '../translate';
|
||||||
export { checkExistence, resetHabiticaDB } from '../mongo';
|
export { checkExistence, resetHabiticaDB } from '../../mongo';
|
||||||
export * from './object-generators';
|
export * from './object-generators';
|
||||||
|
|||||||
@@ -138,15 +138,13 @@ api.registerUser = function(req, res, next) {
|
|||||||
}]
|
}]
|
||||||
}, function(err, data) {
|
}, function(err, data) {
|
||||||
if (err) return err.code ? res.status(err.code).json(err) : next(err);
|
if (err) return err.code ? res.status(err.code).json(err) : next(err);
|
||||||
res.status(200).json(data.register[0]);
|
data.register[0].getTransformedData(function(err, userTransformed){
|
||||||
|
if(err) return next(err);
|
||||||
|
res.status(200).json(userTransformed);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
Register new user with uname / password
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
api.loginLocal = function(req, res, next) {
|
api.loginLocal = function(req, res, next) {
|
||||||
var username = req.body.username;
|
var username = req.body.username;
|
||||||
var password = req.body.password;
|
var password = req.body.password;
|
||||||
@@ -348,7 +346,8 @@ api.changePassword = function(req, res, next) {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
var firebaseTokenGeneratorInstance = new FirebaseTokenGenerator(nconf.get('FIREBASE:SECRET'));
|
// DISABLED FOR API v2
|
||||||
|
/*var firebaseTokenGeneratorInstance = new FirebaseTokenGenerator(nconf.get('FIREBASE:SECRET'));
|
||||||
api.getFirebaseToken = function(req, res, next) {
|
api.getFirebaseToken = function(req, res, next) {
|
||||||
var user = res.locals.user;
|
var user = res.locals.user;
|
||||||
// Expires 24 hours after now (60*60*24*1000) (in milliseconds)
|
// Expires 24 hours after now (60*60*24*1000) (in milliseconds)
|
||||||
@@ -367,13 +366,10 @@ api.getFirebaseToken = function(req, res, next) {
|
|||||||
token: token,
|
token: token,
|
||||||
expires: expires
|
expires: expires
|
||||||
});
|
});
|
||||||
};
|
};*/
|
||||||
|
|
||||||
/*
|
// DISABLED FOR API v2
|
||||||
Registers a new user. Only accepting username/password registrations, no Facebook
|
/*api.setupPassport = function(router) {
|
||||||
*/
|
|
||||||
|
|
||||||
api.setupPassport = function(router) {
|
|
||||||
|
|
||||||
router.get('/logout', i18n.getUserLanguage, function(req, res) {
|
router.get('/logout', i18n.getUserLanguage, function(req, res) {
|
||||||
req.logout();
|
req.logout();
|
||||||
@@ -381,4 +377,4 @@ api.setupPassport = function(router) {
|
|||||||
res.redirect('/');
|
res.redirect('/');
|
||||||
})
|
})
|
||||||
|
|
||||||
};
|
};*/
|
||||||
|
|||||||
@@ -502,7 +502,7 @@ api.logout = {
|
|||||||
url: '/user/auth/logout', // TODO this is under /api/v3 route, should be accessible through habitica.com/logout
|
url: '/user/auth/logout', // TODO this is under /api/v3 route, should be accessible through habitica.com/logout
|
||||||
middlewares: [authWithSession, cron],
|
middlewares: [authWithSession, cron],
|
||||||
async handler (req, res) {
|
async handler (req, res) {
|
||||||
req.logout();
|
req.logout(); // passportjs method
|
||||||
req.session = null;
|
req.session = null;
|
||||||
res.redirect('/');
|
res.redirect('/');
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -725,6 +725,63 @@ schema.methods.sendMessage = async function sendMessage (userToReceiveMessage, m
|
|||||||
await Q.all(promises);
|
await Q.all(promises);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Methods to adapt the new schema to API v2 responses (mostly tasks inside the user model)
|
||||||
|
// These will be removed once API v2 is discontinued
|
||||||
|
|
||||||
|
// Get all the tasks belonging to an user,
|
||||||
|
schema.methods.getTasks = function getUserTasks (cb) {
|
||||||
|
Tasks.Task.find({
|
||||||
|
userId: this._id,
|
||||||
|
}, cb);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Given user and an array of tasks, return an API compatible user + tasks obj
|
||||||
|
schema.methods.addTasksToUser = function addTasksToUser (tasks) {
|
||||||
|
let obj = this.toJSON();
|
||||||
|
let tasksOrder = obj.tasksOrder; // Saving a reference because we won't return it
|
||||||
|
|
||||||
|
obj.habits = [];
|
||||||
|
obj.dailys = [];
|
||||||
|
obj.todos = [];
|
||||||
|
obj.rewards = [];
|
||||||
|
|
||||||
|
obj.tasksOrder = undefined;
|
||||||
|
let unordered = [];
|
||||||
|
|
||||||
|
tasks.forEach((task) => {
|
||||||
|
// We want to push the task at the same position where it's stored in tasksOrder
|
||||||
|
let pos = tasksOrder[`${task.type}s`].indexOf(task._id);
|
||||||
|
if (pos === -1) { // Should never happen, it means the lists got out of sync
|
||||||
|
unordered.push(task.toJSON());
|
||||||
|
} else {
|
||||||
|
obj[`${task.type}s`][pos] = task.toJSON();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Reconcile unordered items
|
||||||
|
unordered.forEach((task) => {
|
||||||
|
obj[`${task.type}s`].push(task);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Remove null values that can be created when inserting tasks at an index > length
|
||||||
|
['habits', 'dailys', 'rewards', 'todos'].forEach((type) => {
|
||||||
|
obj[type] = _.compact(obj[type]);
|
||||||
|
});
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return the data maintaining backward compatibility
|
||||||
|
schema.methods.getTransformedData = function getTransformedData (cb) {
|
||||||
|
let self = this;
|
||||||
|
this.getTasks((err, tasks) => {
|
||||||
|
if (err) return cb(err);
|
||||||
|
cb(null, self.addTasksToUser(tasks));
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// END of API v2 methods
|
||||||
|
|
||||||
export let model = mongoose.model('User', schema);
|
export let model = mongoose.model('User', schema);
|
||||||
|
|
||||||
// Initially export an empty object so external requires will get
|
// Initially export an empty object so external requires will get
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ var i18n = require('../../libs/api-v2/i18n');
|
|||||||
var router = express.Router();
|
var router = express.Router();
|
||||||
|
|
||||||
/* auth.auth*/
|
/* auth.auth*/
|
||||||
auth.setupPassport(router); //FIXME make this consistent with the others
|
// auth.setupPassport(router); //FIXME make this consistent with the others
|
||||||
router.post('/register', i18n.getUserLanguage, auth.registerUser);
|
router.post('/register', i18n.getUserLanguage, auth.registerUser);
|
||||||
router.post('/user/auth/local', i18n.getUserLanguage, auth.loginLocal);
|
router.post('/user/auth/local', i18n.getUserLanguage, auth.loginLocal);
|
||||||
router.post('/user/auth/social', i18n.getUserLanguage, auth.loginSocial);
|
router.post('/user/auth/social', i18n.getUserLanguage, auth.loginSocial);
|
||||||
@@ -13,6 +13,6 @@ router.post('/user/reset-password', i18n.getUserLanguage, auth.resetPassword);
|
|||||||
router.post('/user/change-password', i18n.getUserLanguage, auth.auth, auth.changePassword);
|
router.post('/user/change-password', i18n.getUserLanguage, auth.auth, auth.changePassword);
|
||||||
router.post('/user/change-username', i18n.getUserLanguage, auth.auth, auth.changeUsername);
|
router.post('/user/change-username', i18n.getUserLanguage, auth.auth, auth.changeUsername);
|
||||||
router.post('/user/change-email', i18n.getUserLanguage, auth.auth, auth.changeEmail);
|
router.post('/user/change-email', i18n.getUserLanguage, auth.auth, auth.changeEmail);
|
||||||
router.post('/user/auth/firebase', i18n.getUserLanguage, auth.auth, auth.getFirebaseToken);
|
// router.post('/user/auth/firebase', i18n.getUserLanguage, auth.auth, auth.getFirebaseToken);
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
Reference in New Issue
Block a user