Merge pull request #1187 from sharelatex/ta-publisher-membership

Add Publisher Entity for UserMemberships

GitOrigin-RevId: 862b1e4fe6d33b63ddfdaef47c02809c4558f9cc
This commit is contained in:
Timothée Alby 2018-11-28 11:57:24 +02:00 committed by sharelatex
parent be6950292d
commit dffb6bc7a2
6 changed files with 82 additions and 0 deletions

View file

@ -18,6 +18,9 @@ module.exports =
requireInstitutionAccess: (req, res, next) ->
requireAccessToEntity('institution', req.params.id, req, res, next)
requirePublisherAccess: (req, res, next) ->
requireAccessToEntity('publisher', req.params.id, req, res, next)
requireGraphAccess: (req, res, next) ->
requireAccessToEntity(
req.query.resource_type, req.query.resource_id, req, res, next

View file

@ -62,3 +62,19 @@ module.exports =
pathsFor: (id) ->
addMember: "/manage/institutions/#{id}/managers"
removeMember: "/manage/institutions/#{id}/managers"
publisher:
modelName: 'Publisher'
fields:
primaryKey: 'slug'
read: ['managerIds']
write: 'managerIds'
access: 'managerIds'
name: 'name'
translations:
title: 'publisher_account'
subtitle: 'managers_management'
remove: 'remove_manager'
pathsFor: (id) ->
addMember: "/manage/publishers/#{id}/managers"
removeMember: "/manage/publishers/#{id}/managers"

View file

@ -4,6 +4,7 @@ Errors = require('../Errors/Errors')
EntityModels =
Institution: require('../../models/Institution').Institution
Subscription: require('../../models/Subscription').Subscription
Publisher: require('../../models/Publisher').Publisher
UserMembershipViewModel = require('./UserMembershipViewModel')
UserGetter = require('../User/UserGetter')
logger = require('logger-sharelatex')

View file

@ -43,3 +43,14 @@ module.exports =
webRouter.delete "/manage/institutions/:id/managers/:userId",
UserMembershipAuthorization.requireInstitutionAccess,
UserMembershipController.remove
# publisher members routes
webRouter.get "/manage/publishers/:id/managers",
UserMembershipAuthorization.requirePublisherAccess,
UserMembershipController.index
webRouter.post "/manage/publishers/:id/managers",
UserMembershipAuthorization.requirePublisherAccess,
UserMembershipController.add
webRouter.delete "/manage/publishers/:id/managers/:userId",
UserMembershipAuthorization.requirePublisherAccess,
UserMembershipController.remove

View file

@ -0,0 +1,34 @@
mongoose = require 'mongoose'
Schema = mongoose.Schema
ObjectId = Schema.ObjectId
settings = require 'settings-sharelatex'
request = require 'request'
PublisherSchema = new Schema
slug: { type: String, required: true }
managerIds: [ type:ObjectId, ref:'User' ]
# fetch publisher's (brand on v1) data from v1 API. Errors are ignored
PublisherSchema.method 'fetchV1Data', (callback = (error, publisher)->) ->
request {
baseUrl: settings.apis.v1.url
url: "/api/v2/brands/#{this.slug}"
method: 'GET'
auth:
user: settings.apis.v1.user
pass: settings.apis.v1.pass
sendImmediately: true
}, (error, response, body) =>
try parsedBody = JSON.parse(body) catch e
this.name = parsedBody?.name
this.partner = parsedBody?.partner
callback(null, this)
conn = mongoose.createConnection(settings.mongo.url, {
server: {poolSize: settings.mongo.poolSize || 10},
config: {autoIndex: false}
})
Publisher = conn.model 'Publisher', PublisherSchema
exports.Publisher = Publisher
exports.PublisherSchema = PublisherSchema

View file

@ -29,6 +29,11 @@ describe 'UserMembershipHandler', ->
v1Id: 123
managerIds: [ObjectId(), ObjectId(), ObjectId()]
update: sinon.stub().yields(null)
@publisher =
_id: 'mock-publisher-id'
slug: 'slug'
managerIds: [ObjectId(), ObjectId()]
update: sinon.stub().yields(null)
@UserMembershipViewModel =
buildAsync: sinon.stub().yields(null, { _id: 'mock-member-id'})
@ -39,12 +44,15 @@ describe 'UserMembershipHandler', ->
findOne: sinon.stub().yields(null, @institution)
@Subscription =
findOne: sinon.stub().yields(null, @subscription)
@Publisher =
findOne: sinon.stub().yields(null, @publisher)
@UserMembershipHandler = SandboxedModule.require modulePath, requires:
'./UserMembershipViewModel': @UserMembershipViewModel
'../User/UserGetter': @UserGetter
'../Errors/Errors': Errors
'../../models/Institution': Institution: @Institution
'../../models/Subscription': Subscription: @Subscription
'../../models/Publisher': Publisher: @Publisher
'logger-sharelatex':
log: ->
err: ->
@ -94,6 +102,15 @@ describe 'UserMembershipHandler', ->
expect(error).to.not.be.an.instanceof(Errors.NotFoundError)
done()
describe 'publishers', ->
it 'get publisher', (done) ->
@UserMembershipHandler.getEntity @publisher.slug, EntityConfigs.publisher, @user, (error, institution) =>
should.not.exist(error)
expectedQuery = slug: @publisher.slug, managerIds: ObjectId(@user._id)
assertCalledWith(@Publisher.findOne, expectedQuery)
expect(institution).to.equal @publisher
done()
describe 'getUsers', ->
describe 'group', ->
it 'build view model for all users', (done) ->