Merge pull request #89 from jorilallo/jori/document.update

Fixed document.update API
This commit is contained in:
Jori Lallo 2017-06-29 19:00:45 -07:00 committed by GitHub
commit 6ac22bf61d
5 changed files with 82 additions and 34 deletions

View File

@ -3,7 +3,7 @@
exports[`#auth.login should login with email 1`] = `
Object {
"avatarUrl": "http://example.com/avatar.png",
"id": "86fde1d4-0050-428f-9f0b-0bf77f8bdf61",
"id": "46fde1d4-0050-428f-9f0b-0bf77f4bdf61",
"name": "User 1",
"username": "user1",
}
@ -12,7 +12,7 @@ Object {
exports[`#auth.login should login with username 1`] = `
Object {
"avatarUrl": "http://example.com/avatar.png",
"id": "86fde1d4-0050-428f-9f0b-0bf77f8bdf61",
"id": "46fde1d4-0050-428f-9f0b-0bf77f4bdf61",
"name": "User 1",
"username": "user1",
}

View File

@ -13,7 +13,7 @@ exports[`#user.info should return known user 1`] = `
Object {
"data": Object {
"avatarUrl": "http://example.com/avatar.png",
"id": "86fde1d4-0050-428f-9f0b-0bf77f8bdf61",
"id": "46fde1d4-0050-428f-9f0b-0bf77f4bdf61",
"name": "User 1",
"username": "user1",
},

View File

@ -156,3 +156,60 @@ describe('#documents.unstar', async () => {
expect(body).toMatchSnapshot();
});
});
describe('#documents.update', async () => {
it('should update document details in the root', async () => {
const { user, document } = await seed();
const res = await server.post('/api/documents.update', {
body: {
token: user.getJwtToken(),
id: document.id,
title: 'Updated title',
text: 'Updated text',
},
});
const body = await res.json();
expect(res.status).toEqual(200);
expect(body.data.title).toBe('Updated title');
expect(body.data.text).toBe('Updated text');
expect(body.data.collection.documents[1].title).toBe('Updated title');
});
it('should update document details for children', async () => {
const { user, document, collection } = await seed();
collection.documentStructure = [
{
id: 'af1da94b-9591-4bab-897c-11774b804b77',
url: '/d/some-beef-RSZwQDsfpc',
title: 'some beef',
children: [
{
id: 'ab1da94b-9591-4bab-897c-11774b804b66',
url: '/d/another-doc-RSZwQDsfpc',
title: 'Another doc',
children: [],
},
{ ...document.toJSON(), children: [] },
],
},
];
await collection.save();
const res = await server.post('/api/documents.update', {
body: {
token: user.getJwtToken(),
id: document.id,
title: 'Updated title',
},
});
const body = await res.json();
expect(res.status).toEqual(200);
expect(body.data.title).toBe('Updated title');
expect(body.data.collection.documents[0].children[1].title).toBe(
'Updated title'
);
});
});

View File

@ -119,35 +119,25 @@ const Collection = sequelize.define(
return this;
},
async updateDocument(document) {
async updateDocument(updatedDocument) {
if (!this.documentStructure) return;
const { id } = updatedDocument;
const updateChildren = (children, document) => {
const id = document.id;
if (_.find(children, { id })) {
children = children.map(childDocument => {
if (childDocument.id === id) {
childDocument = {
...document.toJSON(),
children: childDocument.children,
};
}
return childDocument;
});
} else {
children = children.map(childDocument => {
return updateChildren(childDocument.children, id);
});
}
return children;
const updateChildren = documents => {
return documents.map(document => {
if (document.id === id) {
document = {
...updatedDocument.toJSON(),
children: document.children,
};
} else {
document.children = updateChildren(document.children);
}
return document;
});
};
this.documentStructure = updateChildren(
this.documentStructure,
document
);
this.documentStructure = updateChildren(this.documentStructure);
await this.save();
return this;
},

View File

@ -23,7 +23,7 @@ const seed = async () => {
});
const user = await User.create({
id: '86fde1d4-0050-428f-9f0b-0bf77f8bdf61',
id: '46fde1d4-0050-428f-9f0b-0bf77f4bdf61',
email: 'user1@example.com',
username: 'user1',
name: 'User 1',
@ -36,8 +36,8 @@ const seed = async () => {
},
});
const collection = await Collection.create({
id: '86fde1d4-0050-428f-9f0b-0bf77f8bdf61',
let collection = await Collection.create({
id: '26fde1d4-0050-428f-9f0b-0bf77f8bdf62',
name: 'Collection',
urlId: 'collection',
teamId: team.id,
@ -45,16 +45,17 @@ const seed = async () => {
type: 'atlas',
});
const document = await Document.create({
let document = await Document.create({
parentDocumentId: null,
atlasId: collection.id,
teamId: collection.teamId,
userId: collection.creatorId,
lastModifiedById: collection.creatorId,
createdById: collection.creatorId,
title: 'Introduction',
text: '# Introduction\n\nLets get started...',
title: 'Second document',
text: '# Much guidance',
});
collection = await collection.addDocumentToStructure(document);
return {
user,