diff --git a/services/web/test/acceptance/coffee/ProjectInviteTests.coffee b/services/web/test/acceptance/coffee/ProjectInviteTests.coffee
index f7512f5a57..1a2603299e 100644
--- a/services/web/test/acceptance/coffee/ProjectInviteTests.coffee
+++ b/services/web/test/acceptance/coffee/ProjectInviteTests.coffee
@@ -18,13 +18,15 @@ createInvite = (projectId, sendingUser, email, callback=(err, invite)->) ->
return callback(err) if err
callback(err, body.invite)
-followInviteLink = (user, link, callback=(err, response, body)->) ->
+
+# Actions
+tryFollowInviteLink = (user, link, callback=(err, response, body)->) ->
user.request.get {
uri: link
baseUrl: null
}, callback
-acceptInvite = (user, invite, callback=(err, response, body)->) ->
+tryAcceptInvite = (user, invite, callback=(err, response, body)->) ->
user.request.post {
uri: "/project/#{invite.projectId}/invite/#{invite._id}/accept"
json:
@@ -32,6 +34,44 @@ acceptInvite = (user, invite, callback=(err, response, body)->) ->
}, callback
+# Expectations
+expectProjectAccess = (user, projectId, callback=()->) ->
+ # should have access to project
+ user.openProject projectId, (err) =>
+ expect(err).to.be.oneOf [null, undefined]
+ callback()
+
+expectNoProjectAccess = (user, projectId, callback=()->) ->
+ # should not have access to project page
+ user.openProject projectId, (err) =>
+ expect(err).to.be.instanceof Error
+ callback()
+
+expectInvitePage = (user, link, callback=()->) ->
+ # view invite
+ tryFollowInviteLink user, link, (err, response, body) ->
+ expect(err).to.be.oneOf [null, undefined]
+ expect(response.statusCode).to.equal 200
+ expect(body).to.match new RegExp("
Project Invite - .*")
+ callback()
+
+expectInvalidInvitePage = (user, link, callback=()->) ->
+ # view invalid invite
+ tryFollowInviteLink user, link, (err, response, body) ->
+ expect(err).to.be.oneOf [null, undefined]
+ expect(response.statusCode).to.equal 200
+ expect(body).to.match new RegExp("Invalid Invite - .*")
+ callback()
+
+expectAcceptInviteAndRedirect = (user, invite, callback=()->) ->
+ # should accept the invite and redirect to project
+ tryAcceptInvite user, invite, (err, response, body) =>
+ expect(err).to.be.oneOf [null, undefined]
+ expect(response.statusCode).to.equal 302
+ expect(response.headers.location).to.equal "/project/#{invite.projectId}"
+ callback()
+
+
describe "ProjectInviteTests", ->
before (done) ->
@timeout(20000)
@@ -83,68 +123,32 @@ describe "ProjectInviteTests", ->
it 'should not grant access if the user does not accept the invite', (done) ->
Async.series(
[
- # go to the invite page
(cb) =>
- followInviteLink @user, @link, (err, response, body) =>
- expect(err).to.be.oneOf [null, undefined]
- expect(response.statusCode).to.equal 200
- expect(body).to.match new RegExp("Project Invite - .*")
- cb()
-
- # forbid access to the project page
+ expectInvitePage @user, @link, cb
(cb) =>
- @user.openProject @invite.projectId, (err) =>
- expect(err).to.be.instanceof Error
- cb()
-
+ expectNoProjectAccess @user, @invite.projectId, cb
], done
)
it 'should render the invalid-invite page if the token is invalid', (done) ->
Async.series(
[
- # go to the invite page with an invalid token
(cb) =>
link = @link.replace(@invite.token, 'not_a_real_token')
- followInviteLink @user, link, (err, response, body) =>
- expect(err).to.be.oneOf [null, undefined]
- expect(response.statusCode).to.equal 200
- expect(body).to.match new RegExp("Invalid Invite - .*")
- cb()
-
- # forbid access to the project page
+ expectInvalidInvitePage @user, link, cb
(cb) =>
- @user.openProject @invite.projectId, (err) =>
- expect(err).to.be.instanceof Error
- cb()
-
+ expectNoProjectAccess @user, @invite.projectId, cb
], done
)
it 'should allow the user to accept the invite and access the project', (done) ->
Async.series(
[
- # go to the invite page
(cb) =>
- followInviteLink @user, @link, (err, response, body) =>
- expect(err).to.be.oneOf [null, undefined]
- expect(response.statusCode).to.equal 200
- expect(body).to.match new RegExp("Project Invite - .*")
- cb()
-
- # accept the invite
+ expectInvitePage @user, @link, cb
(cb) =>
- acceptInvite @user, @invite, (err, response, body) =>
- expect(err).to.be.oneOf [null, undefined]
- expect(response.statusCode).to.equal 302
- expect(response.headers.location).to.equal "/project/#{@invite.projectId}"
- cb()
-
- # access the project page
+ expectAcceptInviteAndRedirect @user, @invite, cb
(cb) =>
- @user.openProject @invite.projectId, (err) =>
- expect(err).to.be.oneOf [null, undefined]
- cb()
-
+ expectProjectAccess @user, @invite.projectId, cb
], done
)