MockProjectHistoryApi.coffee 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. _ = require 'lodash'
  2. express = require 'express'
  3. bodyParser = require "body-parser"
  4. app = express()
  5. {ObjectId} = require 'mongojs'
  6. module.exports = MockProjectHistoryApi =
  7. docs: {}
  8. oldFiles: {}
  9. projectVersions: {}
  10. labels: {}
  11. addOldFile: (project_id, version, pathname, content) ->
  12. @oldFiles["#{project_id}:#{version}:#{pathname}"] = content
  13. setProjectVersion: (project_id, version) ->
  14. @projectVersions[project_id] = version
  15. addLabel: (project_id, label_id, comment, version) ->
  16. @labels[project_id] ?= {}
  17. @labels[project_id][label_id] = {label_id,comment,version}
  18. deleteLabel: (project_id, label_id) ->
  19. delete @labels[project_id][label_id]
  20. getLabels: (project_id) ->
  21. return null unless @labels[project_id]?
  22. _.values @labels[project_id]
  23. reset: () ->
  24. @oldFiles = {}
  25. @projectVersions = {}
  26. @labels = {}
  27. run: () ->
  28. app.post "/project", (req, res, next) =>
  29. res.json project: id: 1
  30. app.get "/project/:project_id/version/:version/:pathname", (req, res, next) =>
  31. {project_id, version, pathname} = req.params
  32. key = "#{project_id}:#{version}:#{pathname}"
  33. if @oldFiles[key]?
  34. res.send @oldFiles[key]
  35. else
  36. res.send 404
  37. app.get "/project/:project_id/version", (req, res, next) =>
  38. {project_id} = req.params
  39. if @projectVersions[project_id]?
  40. res.json version: @projectVersions[project_id]
  41. else
  42. res.send 404
  43. app.get "/project/:project_id/labels", (req, res, next) =>
  44. {project_id} = req.params
  45. labels = @getLabels project_id
  46. if labels?
  47. res.json labels
  48. else
  49. res.send 404
  50. app.post "/project/:project_id/user/:user_id/labels", bodyParser.json(), (req, res, next) =>
  51. {project_id} = req.params
  52. {comment, version} = req.body
  53. label_id = new ObjectId().toString()
  54. @addLabel project_id, label_id, comment, version
  55. res.json {label_id, comment, version}
  56. app.delete "/project/:project_id/user/:user_id/labels/:label_id", (req, res, next) =>
  57. {project_id, label_id} = req.params
  58. label = @labels[project_id]?[label_id]
  59. if label?
  60. @deleteLabel project_id, label_id
  61. res.send 204
  62. else
  63. res.send 404
  64. app.listen 3054, (error) ->
  65. throw error if error?
  66. .on "error", (error) ->
  67. console.error "error starting MockProjectHistoryApi:", error.message
  68. process.exit(1)
  69. MockProjectHistoryApi.run()