Task #400 - Autolink user to membership if exists

When inviting an user to a project, if the user is already registered,
link her directly to the membership.
remotes/origin/enhancement/email-actions
Anler Hp 2014-07-25 12:40:50 +02:00
parent aa117623e8
commit 3f8af102ab
7 changed files with 57 additions and 1 deletions

View File

@ -190,6 +190,8 @@ class MembershipViewSet(ModelCrudViewSet):
if not object.token:
object.token = str(uuid.uuid1())
object.user = services.find_invited_user(object, default=object.user)
super().pre_save(object)
def post_save(self, object, created=False):

View File

@ -35,3 +35,4 @@ from .members import create_members_in_bulk
from .members import get_members_from_bulk
from .invitations import send_invitation
from .invitations import find_invited_user

View File

@ -4,5 +4,23 @@ from djmail.template_mail import MagicMailBuilder
def send_invitation(invitation):
"""Send an invitation email"""
mbuilder = MagicMailBuilder()
email = mbuilder.membership_invitation(invitation.email, {"membership": invitation})
if invitation.user:
template = mbuilder.membership_notification
else:
template = mbuilder.membership_invitation
email = template(invitation.email, {"membership": invitation})
email.send()
def find_invited_user(invitation, default=None):
"""Check if the invited user is already a registered.
:param invitation: Invitation object.
:param default: Default object to return if user is not found.
:return: The user if it's found, othwerwise return `default`.
"""
try:
return type(invitation).user.get_queryset().filter(email=invitation.email).all()[0]
except IndexError:
return default

View File

@ -0,0 +1,12 @@
{% extends "emails/base.jinja" %}
{% block body %}
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
<tr>
<td>
<p>Hi,</p>
<p>you have been added to the project '{{ membership.project }}'.</p>
</td>
</tr>
</table>
{% endblock %}

View File

@ -0,0 +1,3 @@
Hi,
you have been added to the project '{{ membership.project }}'.

View File

@ -0,0 +1 @@
[Taiga] Added to the project '{{ membership.project|safe }}'

View File

@ -63,3 +63,22 @@ def test_api_resend_invitation(client, outbox):
assert response.status_code == 204
assert len(outbox) == 1
assert outbox[0].to == [invitation.email]
def test_api_invite_existing_user(client, outbox):
"Should create the invitation linked to that user"
user = f.UserFactory.create()
role = f.RoleFactory.create()
url = reverse("memberships-list")
data = {"role": role.pk, "project": role.project.pk, "email": user.email}
response = client.json.post(url, data)
assert response.status_code == 201, response.data
assert len(outbox) == 1
assert user.memberships.count() == 1
message = outbox[0]
assert message.to == [user.email]
assert "Added to the project" in message.subject