Skip to content

Commit 367d6b2

Browse files
committed
Port recently merged stream delegate management in ietfworkflows to new schema
- Legacy-Id: 3687
1 parent 576b2ba commit 367d6b2

5 files changed

Lines changed: 67 additions & 7 deletions

File tree

ietf/ietfworkflows/accounts.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def is_delegate_of_stream(user, stream):
4141
def is_delegate_of_streamREDESIGN(user, stream):
4242
if is_secretariat(user):
4343
return True
44-
return bool(Role.objects.filter(group__acronym=stream.slug, name="delegate", person__user=user))
44+
return user.is_authenticated() and bool(Role.objects.filter(group__acronym=stream.slug, name="delegate", person__user=user))
4545

4646

4747
def is_chair_of_stream(user, stream):
@@ -53,7 +53,7 @@ def is_chair_of_stream(user, stream):
5353
def is_chair_of_streamREDESIGN(user, stream):
5454
if is_secretariat(user):
5555
return True
56-
return bool(Role.objects.filter(group__acronym=stream.slug, name="chair", person__user=user))
56+
return user.is_authenticated() and bool(Role.objects.filter(group__acronym=stream.slug, name="chair", person__user=user))
5757

5858

5959
def is_authorized_in_draft_stream(user, draft):

ietf/ietfworkflows/forms.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
from ietf.ietfworkflows.constants import CALL_FOR_ADOPTION, IETF_STREAM
2121
from redesign.doc.utils import get_tags_for_stream_id
2222
from redesign.doc.models import save_document_in_history, DocEvent, Document
23-
from redesign.name.models import DocTagName, DocStreamName
24-
from redesign.group.models import Group, GroupStateTransitions
23+
from redesign.name.models import DocTagName, DocStreamName, RoleName
24+
from redesign.group.models import Group, GroupStateTransitions, Role
25+
from redesign.person.models import Person, Email
2526

2627
class StreamDraftForm(forms.Form):
2728

@@ -333,7 +334,10 @@ def __init__(self, *args, **kwargs):
333334
super(StreamDelegatesForm, self).__init__(*args, **kwargs)
334335

335336
def get_person(self, email):
336-
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct()
337+
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
338+
persons = Person.objects.filter(email__address=email).distinct()
339+
else:
340+
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct()
337341
if not persons:
338342
return None
339343
return persons[0]
@@ -343,8 +347,17 @@ def clean_email(self):
343347
self.person = self.get_person(email)
344348
if not self.person:
345349
raise forms.ValidationError('There is no user with this email in the system')
350+
return email
346351

347352
def save(self):
353+
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
354+
# FIXME: should save group history here
355+
Role.objects.get_or_create(person=self.person,
356+
group=Group.objects.get(acronym=self.stream.slug),
357+
name=RoleName.objects.get(slug="delegate"),
358+
email=Email.objects.get(address=self.cleaned_data.get('email')))
359+
return
360+
348361
StreamDelegate.objects.get_or_create(
349362
person=self.person,
350363
stream=self.stream)

ietf/ietfworkflows/tests.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,35 @@ def test_set_stream(self):
168168
self.assertTrue("wgchairman@ietf.org" in unicode(outbox[-1]))
169169
self.assertTrue("wgdelegate@ietf.org" in unicode(outbox[-1]))
170170

171+
def test_manage_stream_delegates(self):
172+
make_test_data()
173+
174+
url = urlreverse('stream_delegates', kwargs=dict(stream_name="IETF"))
175+
login_testing_unauthorized(self, "secretary", url)
176+
177+
# get
178+
r = self.client.get(url)
179+
self.assertEquals(r.status_code, 200)
180+
q = PyQuery(r.content)
181+
self.assertEquals(len(q('input[type=submit][value*=Add]')), 1)
182+
183+
delegate = Email.objects.get(address="plain@example.com")
184+
185+
# add delegate
186+
r = self.client.post(url,
187+
dict(email=delegate.address))
188+
self.assertEquals(r.status_code, 200)
189+
190+
self.assertEquals(Role.objects.filter(group__acronym="ietf", name="delegate", person__email=delegate).count(), 1)
191+
192+
# remove delegate again
193+
r = self.client.post(url,
194+
dict(remove_delegate=[delegate.person.pk],
195+
delete="1"))
196+
self.assertEquals(r.status_code, 200)
197+
198+
self.assertEquals(Role.objects.filter(group__acronym="ietf", name="delegate", person__email=delegate).count(), 0)
199+
171200
if not settings.USE_DB_REDESIGN_PROXY_CLASSES:
172201
# the above tests only work with the new schema
173202
del EditStreamInfoTestCase

ietf/ietfworkflows/views.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,12 @@ def stream_delegates(request, stream_name):
122122
if request.method == 'POST':
123123
if request.POST.get('delete', False):
124124
pk_list = request.POST.getlist('remove_delegate')
125-
StreamDelegate.objects.filter(stream=stream, person__pk__in=pk_list).delete()
125+
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
126+
# FIXME: should save group history here
127+
from redesign.group.models import Role
128+
Role.objects.filter(person__in=pk_list, group__acronym=stream.slug, name="delegate").delete()
129+
else:
130+
StreamDelegate.objects.filter(stream=stream, person__pk__in=pk_list).delete()
126131
else:
127132
form = StreamDelegatesForm(request.POST, stream=stream)
128133
if form.is_valid():

ietf/utils/test_data.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,25 @@ def make_test_data():
1717
state_id="active",
1818
type_id="ietf",
1919
parent=None)
20+
ietf = Group.objects.create(
21+
name="IETF",
22+
acronym="ietf",
23+
state_id="active",
24+
type_id="ietf",
25+
parent=None)
26+
for x in ["irtf", "iab", "ise"]:
27+
Group.objects.create(
28+
name=x.upper(),
29+
acronym=x,
30+
state_id="active",
31+
type_id="ietf",
32+
parent=None)
2033
area = Group.objects.create(
2134
name="Far Future",
2235
acronym="farfut",
2336
state_id="active",
2437
type_id="area",
25-
parent=None)
38+
parent=ietf)
2639
group = Group.objects.create(
2740
name="Martian Special Interest Group",
2841
acronym="mars",

0 commit comments

Comments
 (0)