overleaf/services/web/test/acceptance/coffee/helpers/User.coffee

140 lines
4 KiB
CoffeeScript
Raw Normal View History

request = require("./request")
settings = require("settings-sharelatex")
2016-03-21 17:03:31 +00:00
{db, ObjectId} = require("../../../../app/js/infrastructure/mongojs")
count = 0
class User
constructor: (options = {}) ->
@email = "acceptance-test-#{count}@example.com"
@password = "acceptance-test-#{count}-password"
count++
@jar = request.jar()
@request = request.defaults({
jar: @jar
})
2016-07-28 15:00:18 +00:00
login: (callback = (error) ->) ->
@getCsrfToken (error) =>
return callback(error) if error?
@request.post {
url: "/register" # Register will log in, but also ensure user exists
json:
email: @email
password: @password
}, (error, response, body) =>
return callback(error) if error?
db.users.findOne {email: @email}, (error, user) =>
return callback(error) if error?
@id = user?._id?.toString()
2016-07-05 09:24:24 +00:00
@_id = user?._id?.toString()
2016-07-29 08:52:55 +00:00
@first_name = user?.first_name
@referal_id = user?.referal_id
callback()
2016-07-05 09:24:24 +00:00
logout: (callback = (error) ->) ->
@getCsrfToken (error) =>
return callback(error) if error?
@request.get {
url: "/logout"
2016-07-05 09:24:24 +00:00
json:
email: @email
password: @password
}, (error, response, body) =>
return callback(error) if error?
db.users.findOne {email: @email}, (error, user) =>
return callback(error) if error?
@id = user?._id?.toString()
@_id = user?._id?.toString()
callback()
2016-03-21 17:03:31 +00:00
ensure_admin: (callback = (error) ->) ->
db.users.update {_id: ObjectId(@id)}, { $set: { isAdmin: true }}, callback
2016-07-05 09:24:24 +00:00
createProject: (name, callback = (error, project_id) ->) ->
@request.post {
url: "/project/new",
json:
projectName: name
}, (error, response, body) ->
return callback(error) if error?
if !body?.project_id?
console.error "SOMETHING WENT WRONG CREATING PROJECT", response.statusCode, response.headers["location"], body
2016-08-01 08:06:02 +00:00
callback(null, body.project_id)
2016-07-28 15:00:18 +00:00
deleteProject: (project_id, callback=(error)) ->
@request.delete {
url: "/project/#{project_id}"
}, (error, response, body) ->
return callback(error) if error?
callback(null)
2016-07-29 10:04:07 +00:00
openProject: (project_id, callback=(error)) ->
@request.get {
url: "/project/#{project_id}"
}, (error, response, body) ->
return callback(error) if error?
if response.statusCode != 200
err = new Error("Non-success response when opening project: #{response.statusCode}")
return callback(err)
2016-07-29 10:04:07 +00:00
callback(null)
addUserToProject: (project_id, email, privileges, callback = (error, user) ->) ->
@request.post {
url: "/project/#{project_id}/users",
json: {email, privileges}
}, (error, response, body) ->
return callback(error) if error?
callback(null, body.user)
2016-07-28 15:00:18 +00:00
makePublic: (project_id, level, callback = (error) ->) ->
@request.post {
url: "/project/#{project_id}/settings/admin",
json:
publicAccessLevel: level
}, (error, response, body) ->
return callback(error) if error?
callback(null)
getCsrfToken: (callback = (error) ->) ->
@request.get {
url: "/register"
}, (err, response, body) =>
return callback(error) if error?
csrfMatches = body.match("window.csrfToken = \"(.*?)\";")
if !csrfMatches?
return callback(new Error("no csrf token found"))
@request = @request.defaults({
headers:
"x-csrf-token": csrfMatches[1]
})
callback()
changePassword: (callback = (error) ->) ->
@getCsrfToken (error) =>
return callback(error) if error?
@request.post {
url: "/user/password/update"
json:
currentPassword: @password
newPassword1: @password
newPassword2: @password
}, (error, response, body) =>
return callback(error) if error?
db.users.findOne {email: @email}, (error, user) =>
return callback(error) if error?
callback()
getUserSettingsPage: (callback = (error, statusCode) ->) ->
@getCsrfToken (error) =>
return callback(error) if error?
@request.get {
url: "/user/settings"
}, (error, response, body) =>
return callback(error) if error?
callback(null, response.statusCode)
module.exports = User