mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-29 15:43:12 +00:00
153 lines
6.1 KiB
CoffeeScript
153 lines
6.1 KiB
CoffeeScript
SandboxedModule = require('sandboxed-module')
|
|
assert = require('assert')
|
|
require('chai').should()
|
|
modulePath = require('path').join __dirname, '../../../../app/js/Features/ThirdPartyDataStore/TpdsUpdateSender.js'
|
|
sinon = require('sinon')
|
|
ath = require('path')
|
|
project_id = "project_id_here"
|
|
user_id = "user_id_here"
|
|
read_only_ref_1 = "read_only_ref_1_id_here"
|
|
collaberator_ref_1 = "collaberator_ref_1_here"
|
|
project_name = "project_name_here"
|
|
|
|
thirdPartyDataStoreApiUrl = "http://third-party-json-store.herokuapp.com"
|
|
httpUsername = "user"
|
|
httpPass = "pass"
|
|
siteUrl = "http://www.localhost:3000"
|
|
httpAuthSiteUrl = "http://#{httpUsername}:#{httpPass}@www.localhost:3000"
|
|
filestoreUrl = "filestore.sharelatex.com"
|
|
|
|
describe 'TpdsUpdateSender', ->
|
|
beforeEach ->
|
|
@requestQueuer = (queue, meth, opts, callback)->
|
|
project = {owner_ref:user_id}
|
|
member_ids = [collaberator_ref_1, read_only_ref_1, user_id]
|
|
@CollaboratorsHandler =
|
|
getInvitedMemberIds: sinon.stub().yields(null, member_ids)
|
|
@ProjectGetter = getProject: sinon.stub().callsArgWith(2, null, project)
|
|
@docstoreUrl = "docstore.sharelatex.env"
|
|
@request = sinon.stub().returns(pipe:->)
|
|
@settings =
|
|
siteUrl:siteUrl
|
|
httpAuthSiteUrl:httpAuthSiteUrl,
|
|
apis:
|
|
thirdPartyDataStore: {url: thirdPartyDataStoreApiUrl}
|
|
filestore:
|
|
url: filestoreUrl
|
|
docstore:
|
|
pubUrl: @docstoreUrl
|
|
@updateSender = SandboxedModule.require modulePath, requires:
|
|
"settings-sharelatex": @settings
|
|
"logger-sharelatex":{log:->}
|
|
'../Project/ProjectGetter': @ProjectGetter
|
|
'request':@request
|
|
'../Collaborators/CollaboratorsHandler': @CollaboratorsHandler
|
|
"metrics-sharelatex":
|
|
inc:->
|
|
|
|
describe "_enqueue", ->
|
|
|
|
it "should not call request if there is no tpdsworker url", (done)->
|
|
@updateSender._enqueue null, null, null, (err)=>
|
|
@request.called.should.equal false
|
|
done()
|
|
|
|
it "should post the message to the tpdsworker", (done)->
|
|
@settings.apis.tpdsworker = url:"www.tpdsworker.env"
|
|
group = "myproject"
|
|
method = "somemethod"
|
|
job = "do something"
|
|
@request.callsArgWith(1)
|
|
@updateSender._enqueue group, method, job, (err)=>
|
|
args = @request.args[0][0]
|
|
args.json.group.should.equal group
|
|
args.json.job.should.equal job
|
|
args.json.method.should.equal method
|
|
args.uri.should.equal "www.tpdsworker.env/enqueue/web_to_tpds_http_requests"
|
|
done()
|
|
|
|
|
|
|
|
describe 'sending updates', ->
|
|
|
|
it 'queues a post the file with user and file id', (done)->
|
|
file_id = '4545345'
|
|
path = '/some/path/here.jpg'
|
|
@updateSender._enqueue = (uid, method, job, callback)->
|
|
uid.should.equal project_id
|
|
job.method.should.equal "post"
|
|
job.streamOrigin.should.equal "#{filestoreUrl}/project/#{project_id}/file/#{file_id}"
|
|
expectedUrl = "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/entity/#{encodeURIComponent(project_name)}#{encodeURIComponent(path)}"
|
|
job.uri.should.equal expectedUrl
|
|
job.headers.sl_all_user_ids.should.eql(JSON.stringify([collaberator_ref_1, read_only_ref_1, user_id]))
|
|
done()
|
|
@updateSender.addFile {project_id:project_id, file_id:file_id, path:path, project_name:project_name}, ->
|
|
|
|
it 'post doc with stream origin of docstore', (done)->
|
|
doc_id = "4545345"
|
|
path = "/some/path/here.tex"
|
|
lines = ["line1", "line2", "line3"]
|
|
|
|
@updateSender._enqueue = (uid, method, job, callback)=>
|
|
uid.should.equal project_id
|
|
job.method.should.equal "post"
|
|
expectedUrl = "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/entity/#{encodeURIComponent(project_name)}#{encodeURIComponent(path)}"
|
|
job.uri.should.equal expectedUrl
|
|
job.streamOrigin.should.equal "#{@docstoreUrl}/project/#{project_id}/doc/#{doc_id}/raw"
|
|
job.headers.sl_all_user_ids.should.eql(JSON.stringify([collaberator_ref_1, read_only_ref_1, user_id]))
|
|
done()
|
|
@updateSender.addDoc {project_id:project_id, doc_id:doc_id, path:path, docLines:lines,project_name:project_name}
|
|
|
|
it 'deleting entity', (done)->
|
|
path = "/path/here/t.tex"
|
|
@updateSender._enqueue = (uid, method, job, callback)->
|
|
uid.should.equal project_id
|
|
job.method.should.equal "DELETE"
|
|
expectedUrl = "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/entity/#{encodeURIComponent(project_name)}#{encodeURIComponent(path)}"
|
|
job.headers.sl_all_user_ids.should.eql(JSON.stringify([collaberator_ref_1, read_only_ref_1, user_id]))
|
|
job.uri.should.equal expectedUrl
|
|
done()
|
|
@updateSender.deleteEntity {project_id:project_id, path:path, project_name:project_name}
|
|
|
|
it 'moving entity', (done)->
|
|
startPath = "staring/here/file.tex"
|
|
endPath = "ending/here/file.tex"
|
|
@updateSender._enqueue = (uid, method, job, callback)->
|
|
uid.should.equal project_id
|
|
job.method.should.equal "put"
|
|
job.uri.should.equal "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/entity"
|
|
job.json.startPath.should.equal "/#{project_name}/#{startPath}"
|
|
job.json.endPath.should.equal "/#{project_name}/#{endPath}"
|
|
job.headers.sl_all_user_ids.should.eql(JSON.stringify([collaberator_ref_1, read_only_ref_1, user_id]))
|
|
done()
|
|
@updateSender.moveEntity {project_id:project_id, startPath:startPath, endPath:endPath, project_name:project_name}
|
|
|
|
it 'should be able to rename a project using the move entity func', (done)->
|
|
oldProjectName = "/oldProjectName/"
|
|
newProjectName = "/newProjectName/"
|
|
@updateSender._enqueue = (uid, method, job, callback)->
|
|
uid.should.equal project_id
|
|
job.method.should.equal "put"
|
|
job.uri.should.equal "#{thirdPartyDataStoreApiUrl}/user/#{user_id}/entity"
|
|
job.json.startPath.should.equal oldProjectName
|
|
job.json.endPath.should.equal newProjectName
|
|
job.headers.sl_all_user_ids.should.eql(JSON.stringify([collaberator_ref_1, read_only_ref_1, user_id]))
|
|
done()
|
|
@updateSender.moveEntity {project_id:project_id, project_name:oldProjectName, newProjectName:newProjectName}
|
|
|
|
it "pollDropboxForUser", (done) ->
|
|
@updateSender._enqueue = sinon.stub().callsArg(3)
|
|
@updateSender.pollDropboxForUser user_id, (error) =>
|
|
@updateSender._enqueue
|
|
.calledWith(
|
|
"poll-dropbox:#{user_id}",
|
|
"standardHttpRequest",
|
|
{
|
|
method: "POST"
|
|
uri: "#{thirdPartyDataStoreApiUrl}/user/poll"
|
|
json:
|
|
user_ids: [user_id]
|
|
}
|
|
)
|
|
.should.equal true
|
|
done()
|