2019-05-29 05:21:06 -04:00
|
|
|
let MockProjectHistoryApi
|
|
|
|
const _ = require('lodash')
|
|
|
|
const express = require('express')
|
|
|
|
const bodyParser = require('body-parser')
|
|
|
|
const app = express()
|
2020-09-23 04:49:26 -04:00
|
|
|
const { ObjectId } = require('mongodb')
|
2019-05-29 05:21:06 -04:00
|
|
|
|
|
|
|
module.exports = MockProjectHistoryApi = {
|
|
|
|
docs: {},
|
|
|
|
|
|
|
|
oldFiles: {},
|
|
|
|
|
|
|
|
projectVersions: {},
|
|
|
|
|
|
|
|
labels: {},
|
|
|
|
|
|
|
|
projectSnapshots: {},
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
addOldFile(projectId, version, pathname, content) {
|
|
|
|
this.oldFiles[`${projectId}:${version}:${pathname}`] = content
|
2019-05-29 05:21:06 -04:00
|
|
|
},
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
addProjectSnapshot(projectId, version, snapshot) {
|
|
|
|
this.projectSnapshots[`${projectId}:${version}`] = snapshot
|
2019-05-29 05:21:06 -04:00
|
|
|
},
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
setProjectVersion(projectId, version) {
|
|
|
|
this.projectVersions[projectId] = { version }
|
2019-05-29 05:21:06 -04:00
|
|
|
},
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
setProjectVersionInfo(projectId, versionInfo) {
|
|
|
|
this.projectVersions[projectId] = versionInfo
|
2019-05-29 05:21:06 -04:00
|
|
|
},
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
addLabel(projectId, label) {
|
2019-05-29 05:21:06 -04:00
|
|
|
if (label.id == null) {
|
|
|
|
label.id = new ObjectId().toString()
|
|
|
|
}
|
2020-03-04 04:38:40 -05:00
|
|
|
if (this.labels[projectId] == null) {
|
|
|
|
this.labels[projectId] = {}
|
2019-05-29 05:21:06 -04:00
|
|
|
}
|
2020-03-04 04:38:40 -05:00
|
|
|
this.labels[projectId][label.id] = label
|
2019-05-29 05:21:06 -04:00
|
|
|
},
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
deleteLabel(projectId, labelId) {
|
|
|
|
delete this.labels[projectId][labelId]
|
2019-05-29 05:21:06 -04:00
|
|
|
},
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
getLabels(projectId) {
|
|
|
|
if (this.labels[projectId] == null) {
|
2019-05-29 05:21:06 -04:00
|
|
|
return null
|
|
|
|
}
|
2020-03-04 04:38:40 -05:00
|
|
|
return _.values(this.labels[projectId])
|
2019-05-29 05:21:06 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
reset() {
|
|
|
|
this.oldFiles = {}
|
2019-10-01 07:30:10 -04:00
|
|
|
this.projectHistoryId = 1
|
2019-05-29 05:21:06 -04:00
|
|
|
this.projectVersions = {}
|
2020-03-04 04:38:40 -05:00
|
|
|
this.labels = {}
|
2019-05-29 05:21:06 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
run() {
|
2019-10-01 07:30:10 -04:00
|
|
|
this.reset()
|
|
|
|
|
2019-05-29 05:21:06 -04:00
|
|
|
app.post('/project', (req, res, next) => {
|
2020-03-04 04:38:40 -05:00
|
|
|
res.json({ project: { id: this.projectHistoryId++ } })
|
|
|
|
})
|
|
|
|
|
|
|
|
app.delete('/project/:projectId', (req, res, next) => {
|
|
|
|
res.sendStatus(204)
|
2019-05-29 05:21:06 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
app.get(
|
2020-03-04 04:38:40 -05:00
|
|
|
'/project/:projectId/version/:version/:pathname',
|
2019-05-29 05:21:06 -04:00
|
|
|
(req, res, next) => {
|
2020-03-04 04:38:40 -05:00
|
|
|
const { projectId, version, pathname } = req.params
|
|
|
|
const key = `${projectId}:${version}:${pathname}`
|
2019-05-29 05:21:06 -04:00
|
|
|
if (this.oldFiles[key] != null) {
|
2020-03-04 04:38:40 -05:00
|
|
|
res.send(this.oldFiles[key])
|
2019-05-29 05:21:06 -04:00
|
|
|
} else {
|
2020-05-06 06:02:16 -04:00
|
|
|
res.sendStatus(404)
|
2019-05-29 05:21:06 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
app.get('/project/:projectId/version/:version', (req, res, next) => {
|
|
|
|
const { projectId, version } = req.params
|
|
|
|
const key = `${projectId}:${version}`
|
2019-05-29 05:21:06 -04:00
|
|
|
if (this.projectSnapshots[key] != null) {
|
2020-03-04 04:38:40 -05:00
|
|
|
res.json(this.projectSnapshots[key])
|
2019-05-29 05:21:06 -04:00
|
|
|
} else {
|
2020-03-04 04:38:40 -05:00
|
|
|
res.sendStatus(404)
|
2019-05-29 05:21:06 -04:00
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
app.get('/project/:projectId/version', (req, res, next) => {
|
|
|
|
const { projectId } = req.params
|
|
|
|
if (this.projectVersions[projectId] != null) {
|
|
|
|
res.json(this.projectVersions[projectId])
|
2019-05-29 05:21:06 -04:00
|
|
|
} else {
|
2020-05-06 06:02:16 -04:00
|
|
|
res.sendStatus(404)
|
2019-05-29 05:21:06 -04:00
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
app.get('/project/:projectId/labels', (req, res, next) => {
|
|
|
|
const { projectId } = req.params
|
|
|
|
const labels = this.getLabels(projectId)
|
2019-05-29 05:21:06 -04:00
|
|
|
if (labels != null) {
|
2020-03-04 04:38:40 -05:00
|
|
|
res.json(labels)
|
2019-05-29 05:21:06 -04:00
|
|
|
} else {
|
2020-05-06 06:02:16 -04:00
|
|
|
res.sendStatus(404)
|
2019-05-29 05:21:06 -04:00
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
app.post(
|
2020-03-04 04:38:40 -05:00
|
|
|
'/project/:projectId/user/:user_id/labels',
|
2019-05-29 05:21:06 -04:00
|
|
|
bodyParser.json(),
|
|
|
|
(req, res, next) => {
|
2020-03-04 04:38:40 -05:00
|
|
|
const { projectId } = req.params
|
2019-05-29 05:21:06 -04:00
|
|
|
const { comment, version } = req.body
|
2020-03-04 04:38:40 -05:00
|
|
|
const labelId = new ObjectId().toString()
|
|
|
|
this.addLabel(projectId, { id: labelId, comment, version })
|
|
|
|
res.json({ label_id: labelId, comment, version })
|
2019-05-29 05:21:06 -04:00
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
app.delete(
|
2020-03-04 04:38:40 -05:00
|
|
|
'/project/:projectId/user/:user_id/labels/:labelId',
|
2019-05-29 05:21:06 -04:00
|
|
|
(req, res, next) => {
|
2020-03-04 04:38:40 -05:00
|
|
|
const { projectId, labelId } = req.params
|
2019-05-29 05:21:06 -04:00
|
|
|
const label =
|
2020-03-04 04:38:40 -05:00
|
|
|
this.labels[projectId] != null
|
|
|
|
? this.labels[projectId][labelId]
|
2019-05-29 05:21:06 -04:00
|
|
|
: undefined
|
|
|
|
if (label != null) {
|
2020-03-04 04:38:40 -05:00
|
|
|
this.deleteLabel(projectId, labelId)
|
2020-05-06 06:02:16 -04:00
|
|
|
res.sendStatus(204)
|
2019-05-29 05:21:06 -04:00
|
|
|
} else {
|
2020-05-06 06:02:16 -04:00
|
|
|
res.sendStatus(404)
|
2019-05-29 05:21:06 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
app.post('/project/:projectId/flush', (req, res, next) => {
|
|
|
|
res.sendStatus(200)
|
2019-05-29 05:21:06 -04:00
|
|
|
})
|
|
|
|
|
2020-03-04 04:38:40 -05:00
|
|
|
app
|
2019-08-07 10:04:04 -04:00
|
|
|
.listen(3054, error => {
|
2019-05-29 05:21:06 -04:00
|
|
|
if (error != null) {
|
|
|
|
throw error
|
|
|
|
}
|
|
|
|
})
|
2019-08-07 10:04:04 -04:00
|
|
|
.on('error', error => {
|
2019-05-29 05:21:06 -04:00
|
|
|
console.error('error starting MockProjectHistoryApi:', error.message)
|
2020-03-04 04:38:40 -05:00
|
|
|
process.exit(1)
|
2019-05-29 05:21:06 -04:00
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
MockProjectHistoryApi.run()
|