Skip to content

Commit 09a7d72

Browse files
committed
Improved what initial states are offered when the IRTF chair or RG personnel manage adoption of a document. Fixes ietf-tools#2319. Commit ready for merge.
- Legacy-Id: 14055
1 parent 8a4d5aa commit 09a7d72

2 files changed

Lines changed: 61 additions & 10 deletions

File tree

ietf/doc/tests_draft.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010

1111
import debug # pyflakes:ignore
1212

13+
from ietf.doc.factories import DocumentFactory
1314
from ietf.doc.models import ( Document, DocAlias, DocReminder, DocumentAuthor, DocEvent,
1415
ConsensusDocEvent, LastCallDocEvent, RelatedDocument, State, TelechatDocEvent,
1516
WriteupDocEvent, BallotDocEvent, DocRelationshipName)
1617
from ietf.doc.utils import get_tags_for_stream_id
1718
from ietf.name.models import StreamName, IntendedStdLevelName, DocTagName
19+
from ietf.group.factories import GroupFactory
1820
from ietf.group.models import Group
21+
from ietf.person.factories import PersonFactory
1922
from ietf.person.models import Person, Email
2023
from ietf.meeting.models import Meeting, MeetingTypeName
2124
from ietf.iesg.models import TelechatDate
@@ -1197,6 +1200,48 @@ def test_adopt_document(self):
11971200

11981201
self.assertFalse(mars.list_email in draft.notify)
11991202

1203+
def test_right_state_choices_offered(self):
1204+
draft = DocumentFactory()
1205+
wg = GroupFactory(type_id='wg',state_id='active')
1206+
rg = GroupFactory(type_id='rg',state_id='active')
1207+
person = PersonFactory(user__username='person')
1208+
1209+
self.client.login(username='person',password='person+password')
1210+
url = urlreverse('ietf.doc.views_draft.adopt_draft', kwargs=dict(name=draft.name))
1211+
1212+
person.role_set.create(name_id='chair',group=wg,email=person.email())
1213+
r = self.client.get(url)
1214+
q = PyQuery(r.content)
1215+
self.assertTrue('(IETF)' in q('#id_newstate option').text())
1216+
self.assertFalse('(IRTF)' in q('#id_newstate option').text())
1217+
1218+
person.role_set.create(name_id='chair',group=Group.objects.get(acronym='irtf'),email=person.email())
1219+
r = self.client.get(url)
1220+
q = PyQuery(r.content)
1221+
self.assertTrue('(IETF)' in q('#id_newstate option').text())
1222+
self.assertTrue('(IRTF)' in q('#id_newstate option').text())
1223+
1224+
person.role_set.filter(group__acronym='irtf').delete()
1225+
person.role_set.create(name_id='chair',group=rg,email=person.email())
1226+
r = self.client.get(url)
1227+
q = PyQuery(r.content)
1228+
self.assertTrue('(IETF)' in q('#id_newstate option').text())
1229+
self.assertTrue('(IRTF)' in q('#id_newstate option').text())
1230+
1231+
person.role_set.filter(group=wg).delete()
1232+
r = self.client.get(url)
1233+
q = PyQuery(r.content)
1234+
self.assertFalse('(IETF)' in q('#id_newstate option').text())
1235+
self.assertTrue('(IRTF)' in q('#id_newstate option').text())
1236+
1237+
person.role_set.all().delete()
1238+
person.role_set.create(name_id='secr',group=Group.objects.get(acronym='secretariat'),email=person.email())
1239+
r = self.client.get(url)
1240+
q = PyQuery(r.content)
1241+
self.assertTrue('(IETF)' in q('#id_newstate option').text())
1242+
self.assertTrue('(IRTF)' in q('#id_newstate option').text())
1243+
1244+
12001245
class ChangeStreamStateTests(TestCase):
12011246
def test_set_tags(self):
12021247
draft = make_test_data()

ietf/doc/views_draft.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import datetime
44

55
from django import forms
6+
from django.db.models import Q
67
from django.http import HttpResponseRedirect, HttpResponseForbidden, Http404
78
from django.shortcuts import render, get_object_or_404, redirect
89
from django.template.loader import render_to_string
@@ -1213,17 +1214,22 @@ def __init__(self, *args, **kwargs):
12131214

12141215
super(AdoptDraftForm, self).__init__(*args, **kwargs)
12151216

1217+
state_types = set()
12161218
if has_role(user, "Secretariat"):
1217-
state_choices = State.objects.filter(type__in=['draft-stream-ietf','draft-stream-irtf'], used=True).exclude(slug__in=settings.GROUP_STATES_WITH_EXTRA_PROCESSING)
1218-
elif has_role(user, "IRTF Chair"):
1219-
#The IRTF chair can adopt a draft into any RG
1220-
group_ids = list(Group.objects.filter(type="rg", state="active").values_list('id', flat=True))
1221-
group_ids.extend(list(Group.objects.filter(type="wg", state="active", role__person__user=user, role__name__in=("chair", "delegate", "secr")).values_list('id', flat=True)))
1222-
self.fields["group"].queryset = self.fields["group"].queryset.filter(id__in=group_ids).distinct()
1223-
state_choices = State.objects.filter(type='draft-stream-irtf', used=True).exclude(slug__in=settings.GROUP_STATES_WITH_EXTRA_PROCESSING)
1224-
else:
1225-
self.fields["group"].queryset = self.fields["group"].queryset.filter(role__person__user=user, role__name__in=("chair", "delegate", "secr")).distinct()
1226-
state_choices = State.objects.filter(type='draft-stream-ietf', used=True).exclude(slug__in=settings.GROUP_STATES_WITH_EXTRA_PROCESSING)
1219+
state_types.update(['draft-stream-ietf','draft-stream-irtf'])
1220+
else:
1221+
if has_role(user, "IRTF Chair") or Group.objects.filter(type="rg", state="active", role__person__user=user, role__name__in=("chair", "delegate", "secr")).exists():
1222+
state_types.add('draft-stream-irtf')
1223+
if Group.objects.filter(type="wg", state="active", role__person__user=user, role__name__in=("chair", "delegate", "secr")).exists():
1224+
state_types.add('draft-stream-ietf')
1225+
state_choices = State.objects.filter(type__in=state_types, used=True).exclude(slug__in=settings.GROUP_STATES_WITH_EXTRA_PROCESSING)
1226+
1227+
if not has_role(user, "Secretariat"):
1228+
if has_role(user, "IRTF Chair"):
1229+
group_queryset = self.fields["group"].queryset.filter(Q(role__person__user=user, role__name__in=("chair", "delegate", "secr"))|Q(type="rg", state="active")).distinct()
1230+
else:
1231+
group_queryset = self.fields["group"].queryset.filter(role__person__user=user, role__name__in=("chair", "delegate", "secr")).distinct()
1232+
self.fields["group"].queryset = group_queryset
12271233

12281234
self.fields['group'].choices = [(g.pk, '%s - %s' % (g.acronym, g.name)) for g in self.fields["group"].queryset]
12291235
self.fields['newstate'].choices = [('','-- Pick a state --')]

0 commit comments

Comments
 (0)