Port one branch of delegate adding and add test for it

- Legacy-Id: 3388
This commit is contained in:
Ole Laursen 2011-08-26 18:40:36 +00:00
parent c0fc54dcb3
commit d6c01d7a48
3 changed files with 70 additions and 41 deletions

View file

@ -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')

View file

@ -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:

View file

@ -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):