Create route for accepting an invite

This commit is contained in:
leigh-mil 2018-10-25 10:15:02 -04:00 committed by dandds
parent 1c444c726c
commit 370b037d99
3 changed files with 54 additions and 2 deletions

View File

@ -3,6 +3,7 @@ from flask_wtf.csrf import CSRFError
import werkzeug.exceptions as werkzeug_exceptions
import atst.domain.exceptions as exceptions
from atst.domain.invitations import InvitationExpired
def make_error_pages(app):
@ -41,4 +42,15 @@ def make_error_pages(app):
500,
)
@app.errorhandler(InvitationExpired)
# pylint: disable=unused-variable
def expired_invitation(e):
log_error(e)
return (
render_template(
"error.html", message="The invitation you followed has expired."
),
404,
)
return app

View File

@ -340,4 +340,8 @@ def update_member(workspace_id, member_id):
@bp.route("/workspaces/invitation/<invite_id>", methods=["GET"])
def accept_invitation(invite_id):
pass
invite = Invitations.accept(invite_id)
return redirect(
url_for("workspaces.show_workspace", workspace_id=invite.workspace.id)
)

View File

@ -1,11 +1,12 @@
from flask import url_for
from tests.factories import UserFactory, WorkspaceFactory
from tests.factories import UserFactory, WorkspaceFactory, InvitationFactory
from atst.domain.workspaces import Workspaces
from atst.domain.workspace_users import WorkspaceUsers
from atst.domain.projects import Projects
from atst.domain.environments import Environments
from atst.domain.environment_roles import EnvironmentRoles
from atst.domain.invitations import Invitations
from atst.models.workspace_user import WorkspaceUser
from atst.queue import queue
@ -313,3 +314,38 @@ def test_update_member_environment_role_with_no_data(client, user_session):
)
assert response.status_code == 200
assert EnvironmentRoles.get(user.id, env1_id).role == "developer"
def test_new_member_accept_valid_invite(client, user_session):
owner = UserFactory.create()
workspace = WorkspaceFactory.create()
Workspaces._create_workspace_role(owner, workspace, "admin")
user = UserFactory.create()
member = WorkspaceUsers.add(user, workspace.id, "developer")
invite = InvitationFactory.create(user_id=member.user.id, workspace_id=workspace.id)
user_session(user)
response = client.get(url_for("workspaces.accept_invitation", invite_id=invite.id))
assert response.status_code == 302
assert (
url_for("workspaces.show_workspace", workspace_id=invite.workspace.id)
in response.headers["Location"]
)
assert invite.valid == False
def test_new_member_accept_invalid_invite(client, user_session):
owner = UserFactory.create()
workspace = WorkspaceFactory.create()
Workspaces._create_workspace_role(owner, workspace, "admin")
user = UserFactory.create()
member = WorkspaceUsers.add(user, workspace.id, "developer")
invite = InvitationFactory.create(
user_id=member.user.id, workspace_id=workspace.id, valid=False
)
user_session(user)
response = client.get(url_for("workspaces.accept_invitation", invite_id=invite.id))
assert response.status_code == 404