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:
parent
120a142733
commit
1a689aa1fd
7 changed files with 39 additions and 15 deletions
services/web
app/coffee
Features/Project
models
test/UnitTests/coffee/Project
|
@ -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) ->
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)->
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)=>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Reference in a new issue