diff --git a/app/menus/DocumentMenu.js b/app/menus/DocumentMenu.js index a9095558..51b6d217 100644 --- a/app/menus/DocumentMenu.js +++ b/app/menus/DocumentMenu.js @@ -190,9 +190,19 @@ class DocumentMenu extends React.Component { Move… ) : ( - - Delete… - + + {canShareDocuments && ( + + Share link… + + )} + + Delete… + + )}
diff --git a/server/api/documents.js b/server/api/documents.js index e5dc986f..10c99ec5 100644 --- a/server/api/documents.js +++ b/server/api/documents.js @@ -17,6 +17,7 @@ import { View, Revision, Backlink, + User, } from '../models'; import { InvalidRequestError } from '../errors'; import events from '../events'; @@ -286,7 +287,12 @@ router.post('documents.info', auth({ required: false }), async ctx => { }, include: [ { - model: Document, + // unscoping here allows us to return unpublished documents + model: Document.unscoped(), + include: [ + { model: User, as: 'createdBy', paranoid: false }, + { model: User, as: 'updatedBy', paranoid: false }, + ], required: true, as: 'document', }, diff --git a/server/api/documents.test.js b/server/api/documents.test.js index 13a17079..76f6f9cf 100644 --- a/server/api/documents.test.js +++ b/server/api/documents.test.js @@ -133,6 +133,28 @@ describe('#documents.info', async () => { expect(body.data.updatedBy.id).toEqual(user.id); }); + it('should return draft document from shareId with token', async () => { + const { user, document } = await seed(); + document.publishedAt = null; + await document.save(); + + const share = await buildShare({ + documentId: document.id, + teamId: document.teamId, + userId: user.id, + }); + + const res = await server.post('/api/documents.info', { + body: { token: user.getJwtToken(), shareId: share.id }, + }); + const body = await res.json(); + + expect(res.status).toEqual(200); + expect(body.data.id).toEqual(document.id); + expect(body.data.createdBy.id).toEqual(user.id); + expect(body.data.updatedBy.id).toEqual(user.id); + }); + it('should return document from shareId in collection not a member of', async () => { const { user, document, collection } = await seed(); const share = await buildShare({