MockWebServer.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /* eslint-disable
  2. no-return-assign,
  3. */
  4. // TODO: This file was created by bulk-decaffeinate.
  5. // Fix any style issues and re-enable lint.
  6. /*
  7. * decaffeinate suggestions:
  8. * DS102: Remove unnecessary code created because of implicit returns
  9. * DS207: Consider shorter variations of null checks
  10. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  11. */
  12. import sinon from 'sinon'
  13. import express from 'express'
  14. import bodyParser from 'body-parser'
  15. let MockWebServer
  16. export default MockWebServer = {
  17. projects: {},
  18. privileges: {},
  19. userMetadata: {},
  20. createMockProject(projectId, privileges, project, metadataByUser) {
  21. MockWebServer.privileges[projectId] = privileges
  22. MockWebServer.userMetadata[projectId] = metadataByUser
  23. return (MockWebServer.projects[projectId] = project)
  24. },
  25. inviteUserToProject(projectId, user, privileges) {
  26. MockWebServer.privileges[projectId][user._id] = privileges
  27. MockWebServer.userMetadata[projectId][user._id] = user
  28. },
  29. joinProject(projectId, userId, anonymousAccessToken, callback) {
  30. if (callback == null) {
  31. callback = function () {}
  32. }
  33. const project = MockWebServer.projects[projectId]
  34. const privilegeLevel =
  35. MockWebServer.privileges[projectId]?.[userId] ||
  36. MockWebServer.privileges[projectId]?.[anonymousAccessToken]
  37. const userMetadata = MockWebServer.userMetadata[projectId]?.[userId]
  38. return callback(null, project, privilegeLevel, userMetadata)
  39. },
  40. joinProjectRequest(req, res, next) {
  41. const { project_id: projectId } = req.params
  42. const { anonymousAccessToken, userId } = req.body
  43. if (projectId === '404404404404404404404404') {
  44. // not-found
  45. return res.status(404).send()
  46. }
  47. if (projectId === '403403403403403403403403') {
  48. // forbidden
  49. return res.status(403).send()
  50. }
  51. if (projectId === '429429429429429429429429') {
  52. // rate-limited
  53. return res.status(429).send()
  54. } else {
  55. return MockWebServer.joinProject(
  56. projectId,
  57. userId,
  58. anonymousAccessToken,
  59. (error, project, privilegeLevel, userMetadata) => {
  60. if (error != null) {
  61. return next(error)
  62. }
  63. if (!project) {
  64. return res.sendStatus(404)
  65. }
  66. return res.json({
  67. project,
  68. privilegeLevel,
  69. isRestrictedUser: !!userMetadata?.isRestrictedUser,
  70. isTokenMember: !!userMetadata?.isTokenMember,
  71. isInvitedMember: !!userMetadata?.isInvitedMember,
  72. })
  73. }
  74. )
  75. }
  76. },
  77. running: false,
  78. run(callback) {
  79. if (callback == null) {
  80. callback = function () {}
  81. }
  82. if (MockWebServer.running) {
  83. return callback()
  84. }
  85. const app = express()
  86. app.use(bodyParser.json())
  87. app.post('/project/:project_id/join', MockWebServer.joinProjectRequest)
  88. return app
  89. .listen(3000, error => {
  90. MockWebServer.running = true
  91. return callback(error)
  92. })
  93. .on('error', error => {
  94. console.error('error starting MockWebServer:', error.message)
  95. return process.exit(1)
  96. })
  97. },
  98. }
  99. sinon.spy(MockWebServer, 'joinProject')