overleaf/services/document-updater/test/acceptance/js/helpers/MockDocstoreApi.js
Jakob Ackermann a98fefd24b Merge pull request #20129 from overleaf/jpa-handle-partial-deletion
[misc] improve handling of document deletion

GitOrigin-RevId: bd6b225b91ab38365e9ff272c50ece995e767bf2
2024-08-27 08:04:53 +00:00

111 lines
2.5 KiB
JavaScript

const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const MAX_REQUEST_SIZE = 2 * (2 * 1024 * 1024 + 64 * 1024)
const MockDocstoreApi = {
docs: {},
clearDocs() {
this.docs = {}
},
getDoc(projectId, docId) {
return this.docs[`${projectId}:${docId}`]
},
insertDoc(projectId, docId, doc) {
if (doc.version == null) {
doc.version = 0
}
if (doc.lines == null) {
doc.lines = []
}
this.docs[`${projectId}:${docId}`] = doc
},
patchDocument(projectId, docId, meta, callback) {
Object.assign(this.docs[`${projectId}:${docId}`], meta)
callback(null)
},
peekDocument(projectId, docId, callback) {
callback(null, this.docs[`${projectId}:${docId}`])
},
getAllDeletedDocs(projectId, callback) {
callback(
null,
Object.entries(this.docs)
.filter(([key, doc]) => key.startsWith(projectId) && doc.deleted)
.map(([key, doc]) => {
return {
_id: key.split(':')[1],
name: doc.name,
deletedAt: doc.deletedAt,
}
})
)
},
run() {
app.get('/project/:project_id/doc-deleted', (req, res, next) => {
this.getAllDeletedDocs(req.params.project_id, (error, docs) => {
if (error) {
res.sendStatus(500)
} else {
res.json(docs)
}
})
})
app.get('/project/:project_id/doc/:doc_id/peek', (req, res, next) => {
this.peekDocument(
req.params.project_id,
req.params.doc_id,
(error, doc) => {
if (error) {
res.sendStatus(500)
} else if (doc) {
res.json(doc)
} else {
res.sendStatus(404)
}
}
)
})
app.patch(
'/project/:project_id/doc/:doc_id',
bodyParser.json({ limit: MAX_REQUEST_SIZE }),
(req, res, next) => {
MockDocstoreApi.patchDocument(
req.params.project_id,
req.params.doc_id,
req.body,
error => {
if (error) {
res.sendStatus(500)
} else {
res.sendStatus(204)
}
}
)
}
)
app
.listen(3016, error => {
if (error) {
throw error
}
})
.on('error', error => {
console.error('error starting MockDocstoreApi:', error.message)
process.exit(1)
})
},
}
MockDocstoreApi.run()
module.exports = MockDocstoreApi