MockWebApi.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. let MockWebApi
  2. const express = require('express')
  3. const bodyParser = require('body-parser')
  4. const { expressify } = require('@overleaf/promise-utils')
  5. const app = express()
  6. const MAX_REQUEST_SIZE = 2 * (2 * 1024 * 1024 + 64 * 1024)
  7. module.exports = MockWebApi = {
  8. docs: {},
  9. clearDocs() {
  10. return (this.docs = {})
  11. },
  12. insertDoc(projectId, docId, doc) {
  13. if (doc.version == null) {
  14. doc.version = 0
  15. }
  16. if (doc.lines == null) {
  17. doc.lines = []
  18. }
  19. doc.pathname = '/a/b/c.tex'
  20. return (this.docs[`${projectId}:${docId}`] = doc)
  21. },
  22. async setDocument(
  23. projectId,
  24. docId,
  25. lines,
  26. version,
  27. ranges,
  28. lastUpdatedAt,
  29. lastUpdatedBy
  30. ) {
  31. const doc =
  32. this.docs[`${projectId}:${docId}`] ||
  33. (this.docs[`${projectId}:${docId}`] = {})
  34. doc.lines = lines
  35. doc.version = version
  36. doc.ranges = ranges
  37. doc.pathname = '/a/b/c.tex'
  38. doc.lastUpdatedAt = lastUpdatedAt
  39. doc.lastUpdatedBy = lastUpdatedBy
  40. },
  41. async getDocument(projectId, docId) {
  42. return this.docs[`${projectId}:${docId}`]
  43. },
  44. run() {
  45. app.get(
  46. '/project/:project_id/doc/:doc_id',
  47. expressify(async (req, res, next) => {
  48. try {
  49. const doc = await this.getDocument(
  50. req.params.project_id,
  51. req.params.doc_id
  52. )
  53. if (doc != null) {
  54. return res.send(JSON.stringify(doc))
  55. } else {
  56. return res.sendStatus(404)
  57. }
  58. } catch (error) {
  59. return res.sendStatus(500)
  60. }
  61. })
  62. )
  63. app.post(
  64. '/project/:project_id/doc/:doc_id',
  65. bodyParser.json({ limit: MAX_REQUEST_SIZE }),
  66. expressify(async (req, res, next) => {
  67. try {
  68. await MockWebApi.setDocument(
  69. req.params.project_id,
  70. req.params.doc_id,
  71. req.body.lines,
  72. req.body.version,
  73. req.body.ranges,
  74. req.body.lastUpdatedAt,
  75. req.body.lastUpdatedBy
  76. )
  77. return res.json({ rev: '123' })
  78. } catch (error) {
  79. return res.sendStatus(500)
  80. }
  81. })
  82. )
  83. return app
  84. .listen(3000, error => {
  85. if (error != null) {
  86. throw error
  87. }
  88. })
  89. .on('error', error => {
  90. console.error('error starting MockWebApi:', error.message)
  91. return process.exit(1)
  92. })
  93. },
  94. }
  95. MockWebApi.run()