1
0
Fork 0
mirror of https://github.com/overleaf/overleaf.git synced 2025-04-08 20:50:48 +00:00

Move findAllUsersProjects from Project to ProjectGetter

This commit is contained in:
James Allen 2016-03-03 17:19:03 +00:00
parent 120a142733
commit 1a689aa1fd
7 changed files with 39 additions and 15 deletions

View file

@ -17,6 +17,7 @@ SecurityManager = require("../../managers/SecurityManager")
fs = require "fs"
InactiveProjectManager = require("../InactiveData/InactiveProjectManager")
ProjectUpdateHandler = require("./ProjectUpdateHandler")
ProjectGetter = require("./ProjectGetter")
module.exports = ProjectController =
@ -129,7 +130,7 @@ module.exports = ProjectController =
notifications: (cb)->
NotificationsHandler.getUserNotifications user_id, cb
projects: (cb)->
Project.findAllUsersProjects user_id, 'name lastUpdated publicAccesLevel archived owner_ref', cb
ProjectGetter.findAllUsersProjects user_id, 'name lastUpdated publicAccesLevel archived owner_ref', cb
hasSubscription: (cb)->
LimitationsManager.userHasSubscriptionOrIsGroupMember req.session.user, cb
user: (cb) ->

View file

@ -2,6 +2,8 @@ mongojs = require("../../infrastructure/mongojs")
db = mongojs.db
ObjectId = mongojs.ObjectId
async = require "async"
Project = require("../../models/Project").Project
CollaboratorsHandler = require "../Collaborators/CollaboratorsHandler"
module.exports = ProjectGetter =
EXCLUDE_DEPTH: 8
@ -27,6 +29,13 @@ module.exports = ProjectGetter =
else if query instanceof ObjectId
query = _id: query
db.projects.findOne query, projection, callback
findAllUsersProjects: (user_id, fields, callback = (error, ownedProjects, readAndWriteProjects, readOnlyProjects) ->) ->
Project.find {owner_ref: user_id}, fields, (error, projects) ->
return callback(error) if error?
CollaboratorsHandler.getProjectsUserIsMemberOf user_id, fields, (error, readAndWriteProjects, readOnlyProjects) ->
return callback(error) if error?
callback null, projects, readAndWriteProjects, readOnlyProjects
populateProjectWithUsers: (project, callback=(error, project) ->) ->
# eventually this should be in a UserGetter.getUser module

View file

@ -3,6 +3,7 @@ Errors = require "../../errors"
_ = require('underscore')
logger = require('logger-sharelatex')
async = require('async')
ProjectGetter = require "./ProjectGetter"
module.exports =
findElement: (options, _callback = (err, element, path, parentFolder)->)->
@ -126,7 +127,8 @@ module.exports =
async.waterfall jobs, callback
findUsersProjectByName: (user_id, projectName, callback)->
Project.findAllUsersProjects user_id, 'name archived', (err, projects, collabertions=[])->
ProjectGetter.findAllUsersProjects user_id, 'name archived', (err, projects, collabertions=[])->
return callback(error) if error?
projects = projects.concat(collabertions)
projectName = projectName.toLowerCase()
project = _.find projects, (project)->

View file

@ -60,12 +60,6 @@ ProjectSchema.statics.findPopulatedById = (project_id, callback)->
logger.log project_id:project_id, "finished findPopulatedById"
callback(null, projects[0])
ProjectSchema.statics.findAllUsersProjects = (user_id, requiredFields, callback)->
this.find {owner_ref:user_id}, requiredFields, (err, projects)=>
this.find {collaberator_refs:user_id}, requiredFields, (err, collabertions)=>
this.find {readOnly_refs:user_id}, requiredFields, (err, readOnlyProjects)=>
callback(err, projects, collabertions, readOnlyProjects)
sanitizeTypeOfElement = (elementType)->
lastChar = elementType.slice -1
if lastChar != "s"

View file

@ -36,7 +36,6 @@ describe "ProjectController", ->
@NotificationsHandler =
getUserNotifications: sinon.stub()
@ProjectModel =
findAllUsersProjects: sinon.stub()
findPopulatedById: sinon.stub()
@UserModel =
findById: sinon.stub()
@ -50,6 +49,8 @@ describe "ProjectController", ->
markAsOpened: sinon.stub()
@ReferencesSearchHandler =
indexProjectReferences: sinon.stub()
@ProjectGetter =
findAllUsersProjects: sinon.stub()
@ProjectController = SandboxedModule.require modulePath, requires:
"settings-sharelatex":@settings
"logger-sharelatex":
@ -69,6 +70,7 @@ describe "ProjectController", ->
"../InactiveData/InactiveProjectManager":@InactiveProjectManager
"./ProjectUpdateHandler":@ProjectUpdateHandler
"../ReferencesSearch/ReferencesSearchHandler": @ReferencesSearchHandler
"./ProjectGetter": @ProjectGetter
@user =
_id:"!£123213kjljkl"
@ -220,7 +222,7 @@ describe "ProjectController", ->
@LimitationsManager.userHasSubscriptionOrIsGroupMember.callsArgWith(1, null, false)
@TagsHandler.getAllTags.callsArgWith(1, null, @tags, {})
@NotificationsHandler.getUserNotifications = sinon.stub().callsArgWith(1, null, @notifications, {})
@ProjectModel.findAllUsersProjects.callsArgWith(2, null, @projects, @collabertions, @readOnly)
@ProjectGetter.findAllUsersProjects.callsArgWith(2, null, @projects, @collabertions, @readOnly)
it "should render the project/list page", (done)->
@res.render = (pageName, opts)=>

View file

@ -16,6 +16,8 @@ describe "ProjectGetter", ->
projects: {}
users: {}
ObjectId: ObjectId
"../../models/Project": Project: @Project = {}
"../Collaborators/CollaboratorsHandler": @CollaboratorsHandler = {}
describe "getProjectWithoutDocLines", ->
beforeEach ->
@ -111,4 +113,17 @@ describe "ProjectGetter", ->
it "should call the callback", ->
assert.deepEqual @callback.args[0][1], @project
describe "findAllUsersProjects", ->
beforeEach ->
@fields = {"mock": "fields"}
@Project.find = sinon.stub()
@Project.find.withArgs({owner_ref: @user_id}, @fields).yields(null, ["mock-owned-projects"])
@CollaboratorsHandler.getProjectsUserIsMemberOf = sinon.stub()
@CollaboratorsHandler.getProjectsUserIsMemberOf.withArgs(@user_id, @fields).yields(null, ["mock-rw-projects"], ["mock-ro-projects"])
@ProjectGetter.findAllUsersProjects @user_id, @fields, @callback
it "should call the callback with all the projects", ->
@callback
.calledWith(null, ["mock-owned-projects"], ["mock-rw-projects"], ["mock-ro-projects"])
.should.equal true

View file

@ -30,7 +30,7 @@ project.rootFolder[0] = rootFolder
project.rootDoc_id = rootDoc._id
describe 'project model', ->
describe 'ProjectLocator', ->
beforeEach ->
Project.getProject = (project_id, fields, callback)=>
@ -41,6 +41,7 @@ describe 'project model', ->
@locator = SandboxedModule.require modulePath, requires:
'../../models/Project':{Project:Project}
'../../models/User':{User:@User}
'./ProjectGetter': @ProjectGetter = {}
'logger-sharelatex':
log:->
err:->
@ -298,7 +299,7 @@ describe 'project model', ->
user_id = "123jojoidns"
stubbedProject = {name:"findThis"}
projects = [{name:"notThis"}, {name:"wellll"}, stubbedProject, {name:"Noooo"}]
Project.findAllUsersProjects = sinon.stub().callsArgWith(2, null, projects)
@ProjectGetter.findAllUsersProjects = sinon.stub().callsArgWith(2, null, projects)
@locator.findUsersProjectByName user_id, stubbedProject.name.toLowerCase(), (err, project)->
project.should.equal stubbedProject
done()
@ -307,7 +308,7 @@ describe 'project model', ->
user_id = "123jojoidns"
stubbedProject = {name:"findThis", _id:12331321}
projects = [{name:"notThis"}, {name:"wellll"}, {name:"findThis",archived:true}, stubbedProject, {name:"findThis",archived:true}, {name:"Noooo"}]
Project.findAllUsersProjects = sinon.stub().callsArgWith(2, null, projects)
@ProjectGetter.findAllUsersProjects = sinon.stub().callsArgWith(2, null, projects)
@locator.findUsersProjectByName user_id, stubbedProject.name.toLowerCase(), (err, project)->
project._id.should.equal stubbedProject._id
done()
@ -316,7 +317,7 @@ describe 'project model', ->
user_id = "123jojoidns"
stubbedProject = {name:"findThis"}
projects = [{name:"notThis"}, {name:"wellll"}, {name:"Noooo"}]
Project.findAllUsersProjects = sinon.stub().callsArgWith(2, null, projects, [stubbedProject])
@ProjectGetter.findAllUsersProjects = sinon.stub().callsArgWith(2, null, projects, [stubbedProject])
@locator.findUsersProjectByName user_id, stubbedProject.name.toLowerCase(), (err, project)->
project.should.equal stubbedProject
done()