Skip to content

Commit d6c01d7

Browse files
committed
Port one branch of delegate adding and add test for it
- Legacy-Id: 3388
1 parent c0fc54d commit d6c01d7

3 files changed

Lines changed: 70 additions & 41 deletions

File tree

ietf/wgchairs/forms.py

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
update_tags, FOLLOWUP_TAG, get_state_by_name)
1313
from ietf.ietfworkflows.models import AnnotationTag, State
1414
from ietf.idtracker.models import PersonOrOrgInfo
15+
from ietf.utils.mail import send_mail_text
1516

1617
from workflows.models import Transition
1718

19+
from redesign.person.models import Person
1820

1921
class RelatedWGForm(forms.Form):
2022

@@ -191,26 +193,30 @@ def __init__(self, *args, **kwargs):
191193
def get_next_form(self):
192194
return self.next_form
193195

194-
def get_person(self, email):
195-
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct()
196-
if not persons:
197-
raise PersonOrOrgInfo.DoesNotExist
198-
if len(persons) > 1:
199-
raise PersonOrOrgInfo.MultipleObjectsReturned
200-
return persons[0]
201-
202196
def save(self):
203197
email = self.cleaned_data.get('email')
204-
try:
205-
person = self.get_person(email)
206-
except PersonOrOrgInfo.DoesNotExist:
207-
self.next_form = NotExistDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
208-
self.next_form.set_message('doesnotexist', 'There is no user with this email allowed to login to the system')
209-
return
210-
except PersonOrOrgInfo.MultipleObjectsReturned:
211-
self.next_form = MultipleDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
212-
self.next_form.set_message('multiple', 'There are multiple users with this email in the system')
213-
return
198+
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
199+
try:
200+
person = Person.objects.filter(email__address=email).distinct().get()
201+
except Person.DoesNotExist:
202+
self.next_form = NotExistDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
203+
self.next_form.set_message('doesnotexist', 'There is no user with this email allowed to login to the system')
204+
return
205+
except Person.MultipleObjectsReturned:
206+
self.next_form = MultipleDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
207+
self.next_form.set_message('multiple', 'There are multiple users with this email in the system')
208+
return
209+
else:
210+
try:
211+
person = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct().get()
212+
except PersonOrOrgInfo.DoesNotExist:
213+
self.next_form = NotExistDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
214+
self.next_form.set_message('doesnotexist', 'There is no user with this email allowed to login to the system')
215+
return
216+
except PersonOrOrgInfo.MultipleObjectsReturned:
217+
self.next_form = MultipleDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
218+
self.next_form.set_message('multiple', 'There are multiple users with this email in the system')
219+
return
214220
if self.shepherd:
215221
self.assign_shepherd(person)
216222
else:
@@ -282,43 +288,38 @@ def as_p(self):
282288
info = render_to_string('wgchairs/notexistdelegate.html', {'email_list': email_list, 'shepherd': self.shepherd})
283289
return info + super(NotExistDelegateForm, self).as_p()
284290

285-
def send_email(self, email, template):
291+
def send_email(self, to_email, template):
286292
if self.shepherd:
287293
subject = 'WG shepherd needs system credentials'
288294
else:
289295
subject = 'WG Delegate needs system credentials'
290-
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=self.email).distinct()
296+
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
297+
persons = Person.objects.filter(email__address=self.email).distinct()
298+
else:
299+
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=self.email).distinct()
291300
body = render_to_string(template,
292301
{'chair': get_person_for_user(self.user),
293302
'delegate_email': self.email,
294303
'shepherd': self.shepherd,
295304
'delegate_persons': persons,
296305
'wg': self.wg,
297306
})
298-
mail = EmailMessage(subject=subject,
299-
body=body,
300-
to=email,
301-
from_email=settings.DEFAULT_FROM_EMAIL)
302-
mail.send()
303-
304-
def send_email_to_delegate(self, email):
305-
self.send_email(email, 'wgchairs/notexistsdelegate_delegate_email.txt')
306-
307-
def send_email_to_secretariat(self, email):
308-
self.send_email(email, 'wgchairs/notexistsdelegate_secretariat_email.txt')
309307

310-
def send_email_to_wgchairs(self, email):
311-
self.send_email(email, 'wgchairs/notexistsdelegate_wgchairs_email.txt')
308+
send_mail_text(None, to_email, settings.DEFAULT_FROM_EMAIL, subject, body)
312309

313310
def save(self):
314311
self.next_form = AddDelegateForm(wg=self.wg, user=self.user)
315312
if settings.DEBUG:
316313
self.next_form.set_message('warning', 'Email was not sent cause tool is in DEBUG mode')
317314
else:
318315
email_list = self.get_email_list()
319-
self.send_email_to_delegate([email_list[0]])
320-
self.send_email_to_secretariat([email_list[1]])
321-
self.send_email_to_wgchairs(email_list[2:])
316+
# this is ugly...
317+
delegate = email_list[0]
318+
secretariat = email_list[1]
319+
wgchairs = email_list[2:]
320+
self.send_email(delegate, 'wgchairs/notexistsdelegate_delegate_email.txt')
321+
self.send_email(secretariat, 'wgchairs/notexistsdelegate_secretariat_email.txt')
322+
self.send_email(wgchairs, 'wgchairs/notexistsdelegate_wgchairs_email.txt')
322323
self.next_form.set_message('success', 'Email sent successfully')
323324

324325

ietf/wgchairs/tests.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,35 @@ def test_delete_delegate(self):
4242
self.assertEquals(len(q('form input[name=delete]')), 0)
4343
self.assertEquals(Role.objects.filter(name="delegate", group__acronym="mars").count(), 0)
4444

45-
46-
45+
def test_add_not_existing_delegate(self):
46+
make_test_data()
47+
48+
url = urlreverse('manage_delegates', kwargs=dict(acronym="mars"))
49+
login_testing_unauthorized(self, "secretary", url)
50+
51+
# get
52+
r = self.client.get(url)
53+
self.assertEquals(r.status_code, 200)
54+
q = PyQuery(r.content)
55+
self.assertEquals(len(q('form input[name=email]')), 1)
56+
57+
# add non-existing
58+
r = self.client.post(url,
59+
dict(email="unknown@example.com",
60+
form_type="single"))
61+
self.assertEquals(r.status_code, 200)
62+
self.assertTrue("unknown@example.com" in r.content)
63+
q = PyQuery(r.content)
64+
self.assertEquals(len(q('form input[type=submit][value*="Send email"]')), 1)
65+
66+
# we get back a warning and offer to send email, do that
67+
mailbox_before = len(mail_outbox)
68+
r = self.client.post(url,
69+
dict(email="unknown@example.com",
70+
form_type="notexist"))
71+
self.assertEquals(r.status_code, 200)
72+
self.assertTrue("Email sent" in r.content)
73+
self.assertEquals(len(mail_outbox), mailbox_before + 3)
4774

4875

4976
if not settings.USE_DB_REDESIGN_PROXY_CLASSES:

redesign/group/proxy.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from redesign.proxy_utils import TranslatingManager
1+
from redesign.proxy_utils import TranslatingManager, proxy_role_email
22

33
from models import *
44

@@ -87,7 +87,7 @@ class Meta:
8787

8888
def proxied_role_emails(emails):
8989
for e in emails:
90-
e.person.email = { 1: e }
90+
proxy_role_email(e)
9191
return emails
9292

9393
class IETFWG(Group):
@@ -203,11 +203,12 @@ def additional_urls(self):
203203
return self.groupurl_set.all().order_by("name")
204204
def clean_email_archive(self):
205205
return self.list_archive
206+
@property
206207
def wgchair_set(self):
207208
# gross hack ...
208209
class Dummy: pass
209210
d = Dummy()
210-
d.all = self.chairs()
211+
d.all = self.chairs
211212
return d
212213
@property
213214
def wgdelegate_set(self):

0 commit comments

Comments
 (0)