From 1c444c726cee199f69b5331dbace5465a31b1803 Mon Sep 17 00:00:00 2001 From: leigh-mil Date: Tue, 23 Oct 2018 16:54:51 -0400 Subject: [PATCH] When new member is added, an invite is sent to the new member --- atst/routes/workspaces.py | 23 +++++++++++++++++++++++ templates/emails/invitation.txt | 12 ++++++++++++ tests/routes/test_workspaces.py | 5 +++++ 3 files changed, 40 insertions(+) create mode 100644 templates/emails/invitation.txt diff --git a/atst/routes/workspaces.py b/atst/routes/workspaces.py index 5e295b70..f12a81ce 100644 --- a/atst/routes/workspaces.py +++ b/atst/routes/workspaces.py @@ -24,6 +24,8 @@ from atst.forms.workspace import WorkspaceForm from atst.forms.data import ENVIRONMENT_ROLES, ENV_ROLE_MODAL_DESCRIPTION from atst.domain.authz import Authorization from atst.models.permissions import Permissions +from atst.domain.invitations import Invitations +from atst.queue import queue bp = Blueprint("workspaces", __name__) @@ -218,6 +220,17 @@ def new_member(workspace_id): ) +def send_invite_email(owner_name, invite_id, new_member_email): + body = render_template( + "emails/invitation.txt", owner=owner_name, invite_id=invite_id + ) + queue.send_mail( + [new_member_email], + "{} has invited you to a JEDI Cloud Workspace".format(owner_name), + body, + ) + + @bp.route("/workspaces//members/new", methods=["POST"]) def create_member(workspace_id): workspace = Workspaces.get(g.current_user, workspace_id) @@ -226,6 +239,11 @@ def create_member(workspace_id): if form.validate(): try: new_member = Workspaces.create_member(g.current_user, workspace, form.data) + invite = Invitations.create(workspace, new_member.user) + send_invite_email( + g.current_user.full_name, invite.id, new_member.user.email + ) + return redirect( url_for( "workspaces.workspace_members", @@ -318,3 +336,8 @@ def update_member(workspace_id, member_id): workspace=workspace, member=member, ) + + +@bp.route("/workspaces/invitation/", methods=["GET"]) +def accept_invitation(invite_id): + pass diff --git a/templates/emails/invitation.txt b/templates/emails/invitation.txt new file mode 100644 index 00000000..789da574 --- /dev/null +++ b/templates/emails/invitation.txt @@ -0,0 +1,12 @@ +Join this JEDI Cloud Workspace +{{ owner }} has invited you to join a JEDI Cloud Workspace. Login now to view or use your JEDI Cloud resources. + +{{ url_for("workspaces.accept_invitation", invite_id=invite_id, _external=True) }} + +What is JEDI Cloud? +JEDI Cloud is a DoD enterprise-wide solution for commercial cloud services. + +What is a JEDI Cloud Workspace? +A JEDI Cloud Workspace is where you may access and manage the cloud resources associated with your projects and environments. + +JEDI Cloud is managed by the Cloud Computing Program Office. Learn more at jedi.cloud. diff --git a/tests/routes/test_workspaces.py b/tests/routes/test_workspaces.py index f345f462..75fe0662 100644 --- a/tests/routes/test_workspaces.py +++ b/tests/routes/test_workspaces.py @@ -7,6 +7,7 @@ from atst.domain.projects import Projects from atst.domain.environments import Environments from atst.domain.environment_roles import EnvironmentRoles from atst.models.workspace_user import WorkspaceUser +from atst.queue import queue def test_user_with_permission_has_budget_report_link(client, user_session): @@ -181,6 +182,8 @@ def test_create_member(client, user_session): workspace = WorkspaceFactory.create() Workspaces._create_workspace_role(owner, workspace, "admin") user_session(owner) + queue_length = len(queue.get_queue()) + response = client.post( url_for("workspaces.create_member", workspace_id=workspace.id), data={ @@ -195,6 +198,8 @@ def test_create_member(client, user_session): assert response.status_code == 200 assert user.has_workspaces + assert user.invitations + assert len(queue.get_queue()) == queue_length + 1 def test_permissions_for_view_member(client, user_session):