MockWebServer.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. let MockWebServer
  13. const sinon = require('sinon')
  14. const express = require('express')
  15. module.exports = MockWebServer = {
  16. projects: {},
  17. privileges: {},
  18. userMetadata: {},
  19. createMockProject(projectId, privileges, project, metadataByUser) {
  20. MockWebServer.privileges[projectId] = privileges
  21. MockWebServer.userMetadata[projectId] = metadataByUser
  22. return (MockWebServer.projects[projectId] = project)
  23. },
  24. inviteUserToProject(projectId, user, privileges) {
  25. MockWebServer.privileges[projectId][user._id] = privileges
  26. MockWebServer.userMetadata[projectId][user._id] = user
  27. },
  28. joinProject(projectId, userId, anonymousAccessToken, callback) {
  29. if (callback == null) {
  30. callback = function () {}
  31. }
  32. const project = MockWebServer.projects[projectId]
  33. const privilegeLevel =
  34. MockWebServer.privileges[projectId][userId] ||
  35. MockWebServer.privileges[projectId][anonymousAccessToken]
  36. const userMetadata = MockWebServer.userMetadata[projectId]?.[userId]
  37. return callback(null, project, privilegeLevel, userMetadata)
  38. },
  39. joinProjectRequest(req, res, next) {
  40. const { project_id: projectId } = req.params
  41. const { user_id: userId } = req.query
  42. const { 'x-sl-anonymous-access-token': anonymousAccessToken } = req.headers
  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. return res.json({
  64. project,
  65. privilegeLevel,
  66. isRestrictedUser: !!userMetadata?.isRestrictedUser,
  67. isTokenMember: !!userMetadata?.isTokenMember,
  68. isInvitedMember: !!userMetadata?.isInvitedMember,
  69. })
  70. }
  71. )
  72. }
  73. },
  74. running: false,
  75. run(callback) {
  76. if (callback == null) {
  77. callback = function () {}
  78. }
  79. if (MockWebServer.running) {
  80. return callback()
  81. }
  82. const app = express()
  83. app.post('/project/:project_id/join', MockWebServer.joinProjectRequest)
  84. return app
  85. .listen(3000, error => {
  86. MockWebServer.running = true
  87. return callback(error)
  88. })
  89. .on('error', error => {
  90. console.error('error starting MockWebServer:', error.message)
  91. return process.exit(1)
  92. })
  93. },
  94. }
  95. sinon.spy(MockWebServer, 'joinProject')