Fix initial board creation

We cannot rely on the automatic userId setting of the collection hooks.
If a user is created during invitation, the userId field will contain
the id of the inviting user.

This fix this, by mocking the CollectionHooks.getUserId function and
returning the userId of the new user for all new documents after
creating the user.
This commit is contained in:
Alexander Sulfrian 2016-03-29 18:36:16 +02:00
parent b9883a8e24
commit ae2c1fb77f
2 changed files with 20 additions and 13 deletions

View file

@ -74,6 +74,7 @@
"Avatars": true,
"BlazeComponent": false,
"BlazeLayout": false,
"CollectionHooks": false,
"DocHead": false,
"ESSearchResults": false,
"FastRender": false,

View file

@ -388,25 +388,31 @@ if (Meteor.isServer) {
incrementBoards(_.difference(newIds, oldIds), +1);
});
const fakeUserId = new Meteor.EnvironmentVariable();
const getUserId = CollectionHooks.getUserId;
CollectionHooks.getUserId = () => {
return fakeUserId.get() || getUserId();
};
// XXX i18n
Users.after.insert((userId, doc) => {
const ExampleBoard = {
title: 'Welcome Board',
userId: doc._id,
permission: 'private',
const fakeUser = {
extendAutoValueContext: {
userId: doc._id,
},
};
// Insert the Welcome Board
Boards.insert(ExampleBoard, (err, boardId) => {
fakeUserId.withValue(doc._id, () => {
// Insert the Welcome Board
Boards.insert({
title: 'Welcome Board',
permission: 'private',
}, fakeUser, (err, boardId) => {
['Basics', 'Advanced'].forEach((title) => {
const list = {
title,
boardId,
userId: ExampleBoard.userId,
};
['Basics', 'Advanced'].forEach((title) => {
Lists.insert({ title, boardId }, fakeUser);
});
Lists.insert(list);
});
});
});