MockDocstoreApi.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. const express = require('express')
  2. const bodyParser = require('body-parser')
  3. const app = express()
  4. const MAX_REQUEST_SIZE = 2 * (2 * 1024 * 1024 + 64 * 1024)
  5. const MockDocstoreApi = {
  6. docs: {},
  7. clearDocs() {
  8. this.docs = {}
  9. },
  10. getDoc(projectId, docId) {
  11. return this.docs[`${projectId}:${docId}`]
  12. },
  13. insertDoc(projectId, docId, doc) {
  14. if (doc.version == null) {
  15. doc.version = 0
  16. }
  17. if (doc.lines == null) {
  18. doc.lines = []
  19. }
  20. this.docs[`${projectId}:${docId}`] = doc
  21. },
  22. patchDocument(projectId, docId, meta, callback) {
  23. Object.assign(this.docs[`${projectId}:${docId}`], meta)
  24. callback(null)
  25. },
  26. peekDocument(projectId, docId, callback) {
  27. callback(null, this.docs[`${projectId}:${docId}`])
  28. },
  29. getAllDeletedDocs(projectId, callback) {
  30. callback(
  31. null,
  32. Object.entries(this.docs)
  33. .filter(([key, doc]) => key.startsWith(projectId) && doc.deleted)
  34. .map(([key, doc]) => {
  35. return {
  36. _id: key.split(':')[1],
  37. name: doc.name,
  38. deletedAt: doc.deletedAt,
  39. }
  40. })
  41. )
  42. },
  43. run() {
  44. app.get('/project/:project_id/doc-deleted', (req, res, next) => {
  45. this.getAllDeletedDocs(req.params.project_id, (error, docs) => {
  46. if (error) {
  47. res.sendStatus(500)
  48. } else {
  49. res.json(docs)
  50. }
  51. })
  52. })
  53. app.get('/project/:project_id/doc/:doc_id/peek', (req, res, next) => {
  54. this.peekDocument(
  55. req.params.project_id,
  56. req.params.doc_id,
  57. (error, doc) => {
  58. if (error) {
  59. res.sendStatus(500)
  60. } else if (doc) {
  61. res.json(doc)
  62. } else {
  63. res.sendStatus(404)
  64. }
  65. }
  66. )
  67. })
  68. app.patch(
  69. '/project/:project_id/doc/:doc_id',
  70. bodyParser.json({ limit: MAX_REQUEST_SIZE }),
  71. (req, res, next) => {
  72. MockDocstoreApi.patchDocument(
  73. req.params.project_id,
  74. req.params.doc_id,
  75. req.body,
  76. error => {
  77. if (error) {
  78. res.sendStatus(500)
  79. } else {
  80. res.sendStatus(204)
  81. }
  82. }
  83. )
  84. }
  85. )
  86. app
  87. .listen(3016, error => {
  88. if (error) {
  89. throw error
  90. }
  91. })
  92. .on('error', error => {
  93. console.error('error starting MockDocstoreApi:', error.message)
  94. process.exit(1)
  95. })
  96. },
  97. }
  98. MockDocstoreApi.run()
  99. module.exports = MockDocstoreApi