Merge pull request #3651 from overleaf/jpa-hide-deleted-at-field

[misc] joinProject: hide deletedAt field in public deletedDocs array

GitOrigin-RevId: 0ee11c2a8222304d5d1c4edafa2105b7ad43d5d8
This commit is contained in:
Jakob Ackermann 2021-02-17 10:04:38 +00:00 committed by Copybot
parent e3790b299f
commit f5965217c4
4 changed files with 97 additions and 1 deletions

View file

@ -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,

View file

@ -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()
})
})
})
})
})

View file

@ -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') {

View file

@ -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() {