diff --git a/services/web/app/src/Features/Project/ProjectEditorHandler.js b/services/web/app/src/Features/Project/ProjectEditorHandler.js index ed23ebdb8e..4ba0f9f02a 100644 --- a/services/web/app/src/Features/Project/ProjectEditorHandler.js +++ b/services/web/app/src/Features/Project/ProjectEditorHandler.js @@ -20,6 +20,10 @@ module.exports = ProjectEditorHandler = { buildProjectModelView(project, members, invites) { let owner, ownerFeatures + project.deletedDocs.forEach(doc => { + // The frontend does not use this field. + delete doc.deletedAt + }) const result = { _id: project._id, name: project.name, diff --git a/services/web/test/acceptance/src/EditorHttpControllerTests.js b/services/web/test/acceptance/src/EditorHttpControllerTests.js new file mode 100644 index 0000000000..3270a2f178 --- /dev/null +++ b/services/web/test/acceptance/src/EditorHttpControllerTests.js @@ -0,0 +1,59 @@ +const User = require('./helpers/User') +const { expect } = require('chai') +require('./helpers/MockDocstoreApi') +require('./helpers/MockV1Api') +require('./helpers/MockProjectHistoryApi') + +describe('EditorHttpController', function() { + beforeEach('login', function(done) { + this.user = new User() + this.user.login(done) + }) + beforeEach('create project', function(done) { + this.projectName = 'wombat' + this.user.createProject(this.projectName, (error, projectId) => { + if (error) return done(error) + this.projectId = projectId + done() + }) + }) + beforeEach('create doc', function(done) { + this.user.createDocInProject( + this.projectId, + null, + 'potato.tex', + (error, docId) => { + this.docId = docId + done(error) + } + ) + }) + + describe('joinProject', function() { + it('should emit an empty deletedDocs array', function(done) { + this.user.joinProject(this.projectId, (error, details) => { + if (error) return done(error) + + expect(details.project.deletedDocs).to.deep.equal([]) + done() + }) + }) + + describe('after deleting a doc', function() { + beforeEach(function(done) { + this.user.deleteItemInProject(this.projectId, 'doc', this.docId, done) + }) + + it('should include the deleted doc in the deletedDocs array', function(done) { + this.user.joinProject(this.projectId, (error, details) => { + if (error) return done(error) + + expect(details.project.deletedDocs).to.deep.equal([ + { _id: this.docId, name: 'potato.tex' } + ]) + done() + }) + }) + }) + }) +}) diff --git a/services/web/test/acceptance/src/helpers/User.js b/services/web/test/acceptance/src/helpers/User.js index e1f7fa64ce..edc38c604a 100644 --- a/services/web/test/acceptance/src/helpers/User.js +++ b/services/web/test/acceptance/src/helpers/User.js @@ -509,6 +509,33 @@ class User { ) } + joinProject(projectId, callback) { + this.request.post( + { + url: `/project/${projectId}/join`, + qs: { user_id: this._id }, + auth: { + user: settings.apis.web.user, + pass: settings.apis.web.pass, + sendImmediately: true + }, + json: true, + jar: false + }, + (error, res, body) => { + if (error) { + return callback(error) + } + if (res.statusCode < 200 || res.statusCode >= 300) { + return callback( + new Error(`failed to join project ${projectId} ${res.statusCode}`) + ) + } + callback(null, body) + } + ) + } + addUserToProject(projectId, user, privileges, callback) { let updateOp if (privileges === 'readAndWrite') { diff --git a/services/web/test/unit/src/Project/ProjectEditorHandlerTests.js b/services/web/test/unit/src/Project/ProjectEditorHandlerTests.js index 0fecfc5995..f07de53387 100644 --- a/services/web/test/unit/src/Project/ProjectEditorHandlerTests.js +++ b/services/web/test/unit/src/Project/ProjectEditorHandlerTests.js @@ -150,7 +150,13 @@ describe('ProjectEditorHandler', function() { it('should include the deletedDocs', function() { should.exist(this.result.deletedDocs) - return this.result.deletedDocs.should.equal(this.project.deletedDocs) + this.result.deletedDocs.should.deep.equal([ + { + // omit deletedAt field + _id: this.project.deletedDocs[0]._id, + name: this.project.deletedDocs[0].name + } + ]) }) it('should gather readOnly_refs and collaberators_refs into a list of members', function() {