diff --git a/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee index 9de0935783..44b6bd9ec2 100644 --- a/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee +++ b/services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee @@ -30,7 +30,14 @@ module.exports = CollaboratorsHandler = return callback(error) if error? return callback null, members.map (m) -> m.id - USER_PROJECTION: { _id: 1, email: 1 } + USER_PROJECTION: { + _id: 1, + email: 1, + features: 1, + first_name: 1, + last_name: 1, + signUpDate: 1 + } getMembersWithPrivilegeLevels: (project_id, callback = (error, members) ->) -> CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members = []) -> return callback(error) if error? diff --git a/services/web/test/acceptance/coffee/ProjectFeaturesTests.coffee b/services/web/test/acceptance/coffee/ProjectFeaturesTests.coffee new file mode 100644 index 0000000000..78bc349c60 --- /dev/null +++ b/services/web/test/acceptance/coffee/ProjectFeaturesTests.coffee @@ -0,0 +1,57 @@ +expect = require("chai").expect +async = require("async") +User = require "./helpers/User" +request = require "./helpers/request" +settings = require "settings-sharelatex" + +joinProject = (user_id, project_id, callback) -> + request.post { + url: "/project/#{project_id}/join" + qs: {user_id} + auth: + user: settings.apis.web.user + pass: settings.apis.web.pass + sendImmediately: true + json: true + jar: false + }, callback + +describe "ProjectFeatures", -> + + before (done) -> + @timeout(90000) + @owner = new User() + async.series [ + (cb) => @owner.login cb + ], done + + describe "with private project", -> + before (done) -> + @owner.createProject "private-project", (error, project_id) => + return done(error) if error? + @project_id = project_id + done() + + describe "with an upgraded account", -> + before (done) -> + @owner.upgradeFeatures done + + it "should have premium features", (done) -> + joinProject @owner._id, @project_id, (error, response, body) -> + expect(body.project.features.compileGroup).to.equal "priority" + expect(body.project.features.versioning).to.equal true + expect(body.project.features.templates).to.equal true + expect(body.project.features.dropbox).to.equal true + done() + + describe "with an basic account", -> + before (done) -> + @owner.downgradeFeatures done + + it "should have basic features", (done) -> + joinProject @owner._id, @project_id, (error, response, body) -> + expect(body.project.features.compileGroup).to.equal "standard" + expect(body.project.features.versioning).to.equal false + expect(body.project.features.templates).to.equal false + expect(body.project.features.dropbox).to.equal false + done() diff --git a/services/web/test/acceptance/coffee/helpers/User.coffee b/services/web/test/acceptance/coffee/helpers/User.coffee index da03cb9917..6177837bea 100644 --- a/services/web/test/acceptance/coffee/helpers/User.coffee +++ b/services/web/test/acceptance/coffee/helpers/User.coffee @@ -51,6 +51,34 @@ class User ensure_admin: (callback = (error) ->) -> db.users.update {_id: ObjectId(@id)}, { $set: { isAdmin: true }}, callback + upgradeFeatures: (callback = (error) -> ) -> + features = { + collaborators: -1 # Infinite + versioning: true + dropbox:true + compileTimeout: 60 + compileGroup:"priority" + templates: true + references: true + trackChanges: true + trackChangesVisible: true + } + db.users.update {_id: ObjectId(@id)}, { $set: { features: features }}, callback + + downgradeFeatures: (callback = (error) -> ) -> + features = { + collaborators: 1 + versioning: false + dropbox:false + compileTimeout: 60 + compileGroup:"standard" + templates: false + references: false + trackChanges: false + trackChangesVisible: false + } + db.users.update {_id: ObjectId(@id)}, { $set: { features: features }}, callback + createProject: (name, callback = (error, project_id) ->) -> @request.post { url: "/project/new",