Port one branch of delegate adding and add test for it
- Legacy-Id: 3388
This commit is contained in:
parent
c0fc54dcb3
commit
d6c01d7a48
|
@ -12,9 +12,11 @@ from ietf.ietfworkflows.utils import (get_default_workflow_for_wg, get_workflow_
|
|||
update_tags, FOLLOWUP_TAG, get_state_by_name)
|
||||
from ietf.ietfworkflows.models import AnnotationTag, State
|
||||
from ietf.idtracker.models import PersonOrOrgInfo
|
||||
from ietf.utils.mail import send_mail_text
|
||||
|
||||
from workflows.models import Transition
|
||||
|
||||
from redesign.person.models import Person
|
||||
|
||||
class RelatedWGForm(forms.Form):
|
||||
|
||||
|
@ -191,26 +193,30 @@ class AddDelegateForm(RelatedWGForm):
|
|||
def get_next_form(self):
|
||||
return self.next_form
|
||||
|
||||
def get_person(self, email):
|
||||
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct()
|
||||
if not persons:
|
||||
raise PersonOrOrgInfo.DoesNotExist
|
||||
if len(persons) > 1:
|
||||
raise PersonOrOrgInfo.MultipleObjectsReturned
|
||||
return persons[0]
|
||||
|
||||
def save(self):
|
||||
email = self.cleaned_data.get('email')
|
||||
try:
|
||||
person = self.get_person(email)
|
||||
except PersonOrOrgInfo.DoesNotExist:
|
||||
self.next_form = NotExistDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
|
||||
self.next_form.set_message('doesnotexist', 'There is no user with this email allowed to login to the system')
|
||||
return
|
||||
except PersonOrOrgInfo.MultipleObjectsReturned:
|
||||
self.next_form = MultipleDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
|
||||
self.next_form.set_message('multiple', 'There are multiple users with this email in the system')
|
||||
return
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
try:
|
||||
person = Person.objects.filter(email__address=email).distinct().get()
|
||||
except Person.DoesNotExist:
|
||||
self.next_form = NotExistDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
|
||||
self.next_form.set_message('doesnotexist', 'There is no user with this email allowed to login to the system')
|
||||
return
|
||||
except Person.MultipleObjectsReturned:
|
||||
self.next_form = MultipleDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
|
||||
self.next_form.set_message('multiple', 'There are multiple users with this email in the system')
|
||||
return
|
||||
else:
|
||||
try:
|
||||
person = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct().get()
|
||||
except PersonOrOrgInfo.DoesNotExist:
|
||||
self.next_form = NotExistDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
|
||||
self.next_form.set_message('doesnotexist', 'There is no user with this email allowed to login to the system')
|
||||
return
|
||||
except PersonOrOrgInfo.MultipleObjectsReturned:
|
||||
self.next_form = MultipleDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
|
||||
self.next_form.set_message('multiple', 'There are multiple users with this email in the system')
|
||||
return
|
||||
if self.shepherd:
|
||||
self.assign_shepherd(person)
|
||||
else:
|
||||
|
@ -282,12 +288,15 @@ class NotExistDelegateForm(MultipleDelegateForm):
|
|||
info = render_to_string('wgchairs/notexistdelegate.html', {'email_list': email_list, 'shepherd': self.shepherd})
|
||||
return info + super(NotExistDelegateForm, self).as_p()
|
||||
|
||||
def send_email(self, email, template):
|
||||
def send_email(self, to_email, template):
|
||||
if self.shepherd:
|
||||
subject = 'WG shepherd needs system credentials'
|
||||
else:
|
||||
subject = 'WG Delegate needs system credentials'
|
||||
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=self.email).distinct()
|
||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
persons = Person.objects.filter(email__address=self.email).distinct()
|
||||
else:
|
||||
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=self.email).distinct()
|
||||
body = render_to_string(template,
|
||||
{'chair': get_person_for_user(self.user),
|
||||
'delegate_email': self.email,
|
||||
|
@ -295,20 +304,8 @@ class NotExistDelegateForm(MultipleDelegateForm):
|
|||
'delegate_persons': persons,
|
||||
'wg': self.wg,
|
||||
})
|
||||
mail = EmailMessage(subject=subject,
|
||||
body=body,
|
||||
to=email,
|
||||
from_email=settings.DEFAULT_FROM_EMAIL)
|
||||
mail.send()
|
||||
|
||||
def send_email_to_delegate(self, email):
|
||||
self.send_email(email, 'wgchairs/notexistsdelegate_delegate_email.txt')
|
||||
|
||||
def send_email_to_secretariat(self, email):
|
||||
self.send_email(email, 'wgchairs/notexistsdelegate_secretariat_email.txt')
|
||||
|
||||
def send_email_to_wgchairs(self, email):
|
||||
self.send_email(email, 'wgchairs/notexistsdelegate_wgchairs_email.txt')
|
||||
send_mail_text(None, to_email, settings.DEFAULT_FROM_EMAIL, subject, body)
|
||||
|
||||
def save(self):
|
||||
self.next_form = AddDelegateForm(wg=self.wg, user=self.user)
|
||||
|
@ -316,9 +313,13 @@ class NotExistDelegateForm(MultipleDelegateForm):
|
|||
self.next_form.set_message('warning', 'Email was not sent cause tool is in DEBUG mode')
|
||||
else:
|
||||
email_list = self.get_email_list()
|
||||
self.send_email_to_delegate([email_list[0]])
|
||||
self.send_email_to_secretariat([email_list[1]])
|
||||
self.send_email_to_wgchairs(email_list[2:])
|
||||
# this is ugly...
|
||||
delegate = email_list[0]
|
||||
secretariat = email_list[1]
|
||||
wgchairs = email_list[2:]
|
||||
self.send_email(delegate, 'wgchairs/notexistsdelegate_delegate_email.txt')
|
||||
self.send_email(secretariat, 'wgchairs/notexistsdelegate_secretariat_email.txt')
|
||||
self.send_email(wgchairs, 'wgchairs/notexistsdelegate_wgchairs_email.txt')
|
||||
self.next_form.set_message('success', 'Email sent successfully')
|
||||
|
||||
|
||||
|
|
|
@ -42,8 +42,35 @@ class ManageDelegatesTestCase(django.test.TestCase):
|
|||
self.assertEquals(len(q('form input[name=delete]')), 0)
|
||||
self.assertEquals(Role.objects.filter(name="delegate", group__acronym="mars").count(), 0)
|
||||
|
||||
|
||||
|
||||
def test_add_not_existing_delegate(self):
|
||||
make_test_data()
|
||||
|
||||
url = urlreverse('manage_delegates', kwargs=dict(acronym="mars"))
|
||||
login_testing_unauthorized(self, "secretary", url)
|
||||
|
||||
# get
|
||||
r = self.client.get(url)
|
||||
self.assertEquals(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEquals(len(q('form input[name=email]')), 1)
|
||||
|
||||
# add non-existing
|
||||
r = self.client.post(url,
|
||||
dict(email="unknown@example.com",
|
||||
form_type="single"))
|
||||
self.assertEquals(r.status_code, 200)
|
||||
self.assertTrue("unknown@example.com" in r.content)
|
||||
q = PyQuery(r.content)
|
||||
self.assertEquals(len(q('form input[type=submit][value*="Send email"]')), 1)
|
||||
|
||||
# we get back a warning and offer to send email, do that
|
||||
mailbox_before = len(mail_outbox)
|
||||
r = self.client.post(url,
|
||||
dict(email="unknown@example.com",
|
||||
form_type="notexist"))
|
||||
self.assertEquals(r.status_code, 200)
|
||||
self.assertTrue("Email sent" in r.content)
|
||||
self.assertEquals(len(mail_outbox), mailbox_before + 3)
|
||||
|
||||
|
||||
if not settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from redesign.proxy_utils import TranslatingManager
|
||||
from redesign.proxy_utils import TranslatingManager, proxy_role_email
|
||||
|
||||
from models import *
|
||||
|
||||
|
@ -87,7 +87,7 @@ class Area(Group):
|
|||
|
||||
def proxied_role_emails(emails):
|
||||
for e in emails:
|
||||
e.person.email = { 1: e }
|
||||
proxy_role_email(e)
|
||||
return emails
|
||||
|
||||
class IETFWG(Group):
|
||||
|
@ -203,11 +203,12 @@ class IETFWG(Group):
|
|||
return self.groupurl_set.all().order_by("name")
|
||||
def clean_email_archive(self):
|
||||
return self.list_archive
|
||||
@property
|
||||
def wgchair_set(self):
|
||||
# gross hack ...
|
||||
class Dummy: pass
|
||||
d = Dummy()
|
||||
d.all = self.chairs()
|
||||
d.all = self.chairs
|
||||
return d
|
||||
@property
|
||||
def wgdelegate_set(self):
|
||||
|
|
Loading…
Reference in a new issue