overleaf/services/track-changes/test/acceptance/coffee/helpers/TrackChangesClient.coffee

123 lines
4.5 KiB
CoffeeScript
Raw Normal View History

2016-03-10 10:15:57 -05:00
async = require 'async'
zlib = require 'zlib'
request = require "request"
2015-09-03 07:36:32 -04:00
Settings = require "settings-sharelatex"
rclient = require("redis-sharelatex").createClient(Settings.redis.history) # Only works locally for now
Keys = Settings.redis.history.key_schema
{db, ObjectId} = require "../../../../app/js/mongojs"
module.exports = TrackChangesClient =
flushAndGetCompressedUpdates: (project_id, doc_id, callback = (error, updates) ->) ->
2014-03-21 11:57:17 -04:00
TrackChangesClient.flushDoc project_id, doc_id, (error) ->
return callback(error) if error?
TrackChangesClient.getCompressedUpdates doc_id, callback
2014-03-21 11:57:17 -04:00
flushDoc: (project_id, doc_id, callback = (error) ->) ->
request.post {
url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/flush"
}, (error, response, body) =>
response.statusCode.should.equal 204
callback(error)
2014-03-21 11:57:17 -04:00
flushProject: (project_id, callback = (error) ->) ->
request.post {
url: "http://localhost:3015/project/#{project_id}/flush"
}, (error, response, body) =>
response.statusCode.should.equal 204
callback(error)
getCompressedUpdates: (doc_id, callback = (error, updates) ->) ->
db.docHistory
.find(doc_id: ObjectId(doc_id))
.sort("meta.end_ts": 1)
.toArray callback
getProjectMetaData: (project_id, callback = (error, updates) ->) ->
db.projectHistoryMetaData
.find {
project_id: ObjectId(project_id)
},
(error, projects) ->
callback error, projects[0]
setPreserveHistoryForProject: (project_id, callback = (error) ->) ->
db.projectHistoryMetaData.update {
project_id: ObjectId(project_id)
}, {
$set: { preserveHistory: true }
}, {
upsert: true
}, callback
pushRawUpdates: (project_id, doc_id, updates, callback = (error) ->) ->
rclient.sadd Keys.docsWithHistoryOps({project_id}), doc_id, (error) ->
return callback(error) if error?
rclient.rpush Keys.uncompressedHistoryOps({doc_id}), (JSON.stringify(u) for u in updates)..., callback
getDiff: (project_id, doc_id, from, to, callback = (error, diff) ->) ->
request.get {
url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/diff?from=#{from}&to=#{to}"
}, (error, response, body) =>
response.statusCode.should.equal 200
callback null, JSON.parse(body)
getUpdates: (project_id, options, callback = (error, body) ->) ->
request.get {
url: "http://localhost:3015/project/#{project_id}/updates?before=#{options.before}&min_count=#{options.min_count}"
}, (error, response, body) =>
response.statusCode.should.equal 200
2014-03-10 12:58:26 -04:00
callback null, JSON.parse(body)
restoreDoc: (project_id, doc_id, version, user_id, callback = (error) ->) ->
2014-03-10 12:58:26 -04:00
request.post {
url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/version/#{version}/restore"
headers:
"X-User-Id": user_id
2014-03-10 12:58:26 -04:00
}, (error, response, body) =>
response.statusCode.should.equal 204
2015-09-02 17:47:34 -04:00
callback null
2016-03-09 11:56:49 -05:00
pushDocHistory: (project_id, doc_id, callback = (error) ->) ->
2015-10-01 10:55:07 -04:00
request.post {
2016-03-09 11:56:49 -05:00
url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/push"
2015-09-02 17:47:34 -04:00
}, (error, response, body) =>
response.statusCode.should.equal 204
callback(error)
2016-03-09 11:56:49 -05:00
pullDocHistory: (project_id, doc_id, callback = (error) ->) ->
2015-10-01 10:55:07 -04:00
request.post {
2016-03-09 11:56:49 -05:00
url: "http://localhost:3015/project/#{project_id}/doc/#{doc_id}/pull"
2015-09-02 17:47:34 -04:00
}, (error, response, body) =>
response.statusCode.should.equal 204
2015-09-03 07:36:32 -04:00
callback(error)
buildS3Options: (content, key)->
return {
aws:
2016-03-09 11:56:49 -05:00
key: Settings.trackchanges.s3.key
secret: Settings.trackchanges.s3.secret
bucket: Settings.trackchanges.stores.doc_history
2015-09-03 07:36:32 -04:00
timeout: 30 * 1000
json: content
2016-03-09 11:56:49 -05:00
uri:"https://#{Settings.trackchanges.stores.doc_history}.s3.amazonaws.com/#{key}"
2015-09-03 07:36:32 -04:00
}
2016-03-10 10:15:57 -05:00
getS3Doc: (project_id, doc_id, pack_id, callback = (error, body) ->) ->
options = TrackChangesClient.buildS3Options(true, project_id+"/changes-"+doc_id+"/pack-"+pack_id)
options.encoding = null
request.get options, (err, res, body) ->
return callback(error) if error?
2016-04-06 08:29:19 -04:00
return callback(new Error("empty response from s3")) if not body?
2016-03-10 10:15:57 -05:00
zlib.gunzip body, (err, result) ->
return callback(err) if err?
callback(null, JSON.parse(result.toString()))
2015-09-03 07:36:32 -04:00
removeS3Doc: (project_id, doc_id, callback = (error, res, body) ->) ->
2016-03-10 10:15:57 -05:00
options = TrackChangesClient.buildS3Options(true, "?prefix=" + project_id + "/changes-" +doc_id)
request.get options, (error, res, body) ->
keys = body.match /[0-9a-f]{24}\/changes-[0-9a-f]{24}\/pack-[0-9a-f]{24}/g
async.eachSeries keys, (key, cb) ->
options = TrackChangesClient.buildS3Options(true, key)
request.del options, cb
, callback