service class for making and sending invitations
This commit is contained in:
parent
cceb6bf868
commit
c3cd11cb9a
@ -3,13 +3,13 @@ import re
|
||||
from flask import render_template, request as http_request, g, redirect, url_for
|
||||
|
||||
from . import workspaces_bp
|
||||
from atst.routes.workspaces.invitations import send_invite_email
|
||||
from atst.domain.exceptions import AlreadyExistsError
|
||||
from atst.domain.projects import Projects
|
||||
from atst.domain.workspaces import Workspaces
|
||||
from atst.domain.workspace_roles import WorkspaceRoles, MEMBER_STATUS_CHOICES
|
||||
from atst.domain.environments import Environments
|
||||
from atst.domain.environment_roles import EnvironmentRoles
|
||||
from atst.services.invitation import Invitation as InvitationService
|
||||
from atst.forms.new_member import NewMemberForm
|
||||
from atst.forms.edit_member import EditMemberForm
|
||||
from atst.forms.data import (
|
||||
@ -19,7 +19,6 @@ from atst.forms.data import (
|
||||
)
|
||||
from atst.domain.authz import Authorization
|
||||
from atst.models.permissions import Permissions
|
||||
from atst.domain.invitations import Invitations
|
||||
|
||||
from atst.utils.flash import formatted_flash as flash
|
||||
|
||||
@ -68,13 +67,11 @@ def new_member(workspace_id):
|
||||
def create_member(workspace_id):
|
||||
workspace = Workspaces.get(g.current_user, workspace_id)
|
||||
form = NewMemberForm(http_request.form)
|
||||
user = g.current_user
|
||||
|
||||
if form.validate():
|
||||
try:
|
||||
new_member = Workspaces.create_member(user, workspace, form.data)
|
||||
invite = Invitations.create(user, new_member, form.data["email"])
|
||||
send_invite_email(g.current_user.full_name, invite.token, invite.email)
|
||||
invite_service = InvitationService(g.current_user, workspace, form.data)
|
||||
invite_service.invite()
|
||||
|
||||
flash("new_workspace_member", new_member=new_member, workspace=workspace)
|
||||
|
||||
|
45
atst/services/invitation.py
Normal file
45
atst/services/invitation.py
Normal file
@ -0,0 +1,45 @@
|
||||
# send invite to KO
|
||||
# create KO user (Workspaces.create_member)
|
||||
# needs workspace role name
|
||||
# new_member = Workspaces.create_member(user, workspace, ws_role_name)
|
||||
# invite = Invitations.create(user, new_member, form.data["email"])
|
||||
# send_invite_email(g.current_user.full_name, invite.token, invite.email)
|
||||
from flask import render_template
|
||||
|
||||
from atst.domain.workspaces import Workspaces
|
||||
from atst.domain.invitations import Invitations
|
||||
from atst.queue import queue
|
||||
|
||||
|
||||
class Invitation:
|
||||
def __init__(
|
||||
self,
|
||||
inviter,
|
||||
workspace,
|
||||
user_info,
|
||||
subject="{} has invited you to a JEDI Cloud Workspace",
|
||||
email_template="emails/invitation.txt",
|
||||
):
|
||||
self.inviter = inviter
|
||||
self.workspace = workspace
|
||||
self.user_info = user_info
|
||||
self.subject = subject
|
||||
self.email_template = email_template
|
||||
|
||||
def invite(self):
|
||||
member = self._create_member()
|
||||
email = self.user_info.get("email")
|
||||
invite = self._create_invite(member, email)
|
||||
self._send_invite_email(invite.token, email)
|
||||
|
||||
return invite
|
||||
|
||||
def _create_member(self):
|
||||
return Workspaces.create_member(self.inviter, self.workspace, self.user_info)
|
||||
|
||||
def _create_invite(self, member, email):
|
||||
return Invitations.create(self.inviter, member, email)
|
||||
|
||||
def _send_invite_email(self, token, email):
|
||||
body = render_template(self.email_template, owner=self.inviter, token=token)
|
||||
queue.send_mail([email], self.subject.format(self.inviter), body)
|
17
tests/services/test_invitation.py
Normal file
17
tests/services/test_invitation.py
Normal file
@ -0,0 +1,17 @@
|
||||
from tests.factories import UserFactory, WorkspaceFactory
|
||||
|
||||
from atst.services.invitation import Invitation
|
||||
|
||||
|
||||
def test_invite_member(queue):
|
||||
inviter = UserFactory.create()
|
||||
new_member = UserFactory.create()
|
||||
workspace = WorkspaceFactory.create(owner=inviter)
|
||||
invite_service = Invitation(
|
||||
inviter,
|
||||
workspace,
|
||||
{**new_member.to_dictionary(), "workspace_role": "developer"},
|
||||
)
|
||||
new_invitation = invite_service.invite()
|
||||
assert new_invitation == new_member.invitations[0]
|
||||
assert len(queue.get_queue()) == 1
|
Loading…
x
Reference in New Issue
Block a user