overleaf/services/real-time/test/unit/coffee/WebApiManagerTests.coffee
Shane Kilkelly 6765d03339 Track the isRestrictedUser flag on clients
Then, don't send new chat messages and new comments to those restricted clients.
We do this because we don't want to leak private information (email addresses
and names) to "restricted" users, those who have read-only access via a
shared token.
2019-10-04 10:30:24 +01:00

74 lines
2.4 KiB
CoffeeScript

chai = require('chai')
should = chai.should()
sinon = require("sinon")
modulePath = "../../../app/js/WebApiManager.js"
SandboxedModule = require('sandboxed-module')
{ CodedError } = require('../../../app/js/Errors')
describe 'WebApiManager', ->
beforeEach ->
@project_id = "project-id-123"
@user_id = "user-id-123"
@user = {_id: @user_id}
@callback = sinon.stub()
@WebApiManager = SandboxedModule.require modulePath, requires:
"request": @request = {}
"settings-sharelatex": @settings =
apis:
web:
url: "http://web.example.com"
user: "username"
pass: "password"
"logger-sharelatex": @logger = { log: sinon.stub(), error: sinon.stub() }
describe "joinProject", ->
describe "successfully", ->
beforeEach ->
@response = {
project: { name: "Test project" }
privilegeLevel: "owner",
isRestrictedUser: true
}
@request.post = sinon.stub().callsArgWith(1, null, {statusCode: 200}, @response)
@WebApiManager.joinProject @project_id, @user, @callback
it "should send a request to web to join the project", ->
@request.post
.calledWith({
url: "#{@settings.apis.web.url}/project/#{@project_id}/join"
qs:
user_id: @user_id
auth:
user: @settings.apis.web.user
pass: @settings.apis.web.pass
sendImmediately: true
json: true
jar: false
headers: {}
})
.should.equal true
it "should return the project, privilegeLevel, and restricted flag", ->
@callback
.calledWith(null, @response.project, @response.privilegeLevel, @response.isRestrictedUser)
.should.equal true
describe "with an error from web", ->
beforeEach ->
@request.post = sinon.stub().callsArgWith(1, null, {statusCode: 500}, null)
@WebApiManager.joinProject @project_id, @user_id, @callback
it "should call the callback with an error", ->
@callback
.calledWith(new Error("non-success code from web: 500"))
.should.equal true
describe "when the project is over its rate limit", ->
beforeEach ->
@request.post = sinon.stub().callsArgWith(1, null, {statusCode: 429}, null)
@WebApiManager.joinProject @project_id, @user_id, @callback
it "should call the callback with a TooManyRequests error code", ->
@callback
.calledWith(new CodedError("rate-limit hit when joining project", "TooManyRequests"))
.should.equal true