get users features for compile options i.e. timeout and which compiler

This commit is contained in:
Henry Oswald 2014-10-16 16:34:21 +01:00
parent d8cc3b7b61
commit d97e42a959
2 changed files with 28 additions and 11 deletions

View file

@ -6,6 +6,7 @@ logger = require "logger-sharelatex"
request = require "request"
Settings = require "settings-sharelatex"
AuthenticationController = require "../Authentication/AuthenticationController"
UserGetter = require "../User/UserGetter"
module.exports = CompileController =
compile: (req, res, next = (error) ->) ->
@ -15,13 +16,16 @@ module.exports = CompileController =
logger.log "root doc overriden" if settingsOverride.rootDoc_id?
AuthenticationController.getLoggedInUserId req, (error, user_id) ->
return next(error) if error?
CompileManager.compile project_id, user_id, { isAutoCompile, settingsOverride }, (error, status, outputFiles) ->
return next(error) if error?
res.contentType("application/json")
res.send 200, JSON.stringify {
status: status
outputFiles: outputFiles
}
UserGetter.getUser user_id, {"features.compileGroup":1, "features.compileTimeout":1}, (err, user)->
settingsOverride.timeout = user.features.compileTimeout
settingsOverride.compiler = user.features.compileGroup
CompileManager.compile project_id, user_id, { isAutoCompile, settingsOverride }, (error, status, outputFiles) ->
return next(error) if error?
res.contentType("application/json")
res.send 200, JSON.stringify {
status: status
outputFiles: outputFiles
}
downloadPdf: (req, res, next = (error) ->)->
Metrics.inc "pdf-downloads"

View file

@ -1,6 +1,7 @@
sinon = require('sinon')
chai = require('chai')
should = chai.should()
assert = require("chai").assert
expect = chai.expect
modulePath = "../../../../app/js/Features/Compile/CompileController.js"
SandboxedModule = require('sandboxed-module')
@ -12,6 +13,8 @@ describe "CompileController", ->
@CompileManager =
compile: sinon.stub()
@ClsiManager = {}
@UserGetter =
getUser:sinon.stub()
@CompileController = SandboxedModule.require modulePath, requires:
"settings-sharelatex": @settings =
apis:
@ -22,9 +25,14 @@ describe "CompileController", ->
"logger-sharelatex": @logger = { log: sinon.stub(), error: sinon.stub() }
"../../infrastructure/Metrics": @Metrics = { inc: sinon.stub() }
"./CompileManager":@CompileManager
"../User/UserGetter":@UserGetter
"./ClsiManager": @ClsiManager
"../Authentication/AuthenticationController": @AuthenticationController = {}
@project_id = "project-id"
@user =
features:
compileGroup: "premium"
compileTimeout: 100
@next = sinon.stub()
@req = new MockRequest()
@res = new MockResponse()
@ -36,6 +44,7 @@ describe "CompileController", ->
Project_id: @project_id
@AuthenticationController.getLoggedInUserId = sinon.stub().callsArgWith(1, null, @user_id = "mock-user-id")
@CompileManager.compile = sinon.stub().callsArgWith(3, null, @status = "success", @outputFiles = ["mock-output-files"])
@UserGetter.getUser.callsArgWith(2, null, @user)
@CompileController.compile @req, @res, @next
it "should look up the user id", ->
@ -45,7 +54,7 @@ describe "CompileController", ->
it "should do the compile without the auto compile flag", ->
@CompileManager.compile
.calledWith(@project_id, @user_id, { isAutoCompile: false, settingsOverride:{} })
.calledWith(@project_id, @user_id, { isAutoCompile: false, settingsOverride:{timeout:@user.features.compileTimeout, compiler:@user.features.compileGroup} })
.should.equal true
it "should set the content-type of the response to application/json", ->
@ -60,6 +69,11 @@ describe "CompileController", ->
outputFiles: @outputFiles
})
it "should get the compile timeout from the users features",->
@UserGetter.getUser.args[0][0].should.equal @user_id
assert.deepEqual @UserGetter.getUser.args[0][1], {"features.compileGroup":1, "features.compileTimeout":1}
describe "when an auto compile", ->
beforeEach ->
@req.params =
@ -68,12 +82,11 @@ describe "CompileController", ->
auto_compile: "true"
@AuthenticationController.getLoggedInUserId = sinon.stub().callsArgWith(1, null, @user_id = "mock-user-id")
@CompileManager.compile = sinon.stub().callsArgWith(3, null, @status = "success", @outputFiles = ["mock-output-files"])
@UserGetter.getUser.callsArgWith(2, null, @user)
@CompileController.compile @req, @res, @next
it "should do the compile with the auto compile flag", ->
@CompileManager.compile
.calledWith(@project_id, @user_id, { isAutoCompile: true, settingsOverride:{} })
.should.equal true
@CompileManager.compile.calledWith(@project_id, @user_id, { isAutoCompile: true, settingsOverride:{timeout:@user.features.compileTimeout, compiler:@user.features.compileGroup} }).should.equal true
describe "downloadPdf", ->
beforeEach ->