Improved what initial states are offered when the IRTF chair or RG personnel manage adoption of a document. Fixes #2319. Commit ready for merge.
- Legacy-Id: 14055
This commit is contained in:
parent
8a4d5aa8ba
commit
09a7d720a1
|
@ -10,12 +10,15 @@ from django.conf import settings
|
|||
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
from ietf.doc.factories import DocumentFactory
|
||||
from ietf.doc.models import ( Document, DocAlias, DocReminder, DocumentAuthor, DocEvent,
|
||||
ConsensusDocEvent, LastCallDocEvent, RelatedDocument, State, TelechatDocEvent,
|
||||
WriteupDocEvent, BallotDocEvent, DocRelationshipName)
|
||||
from ietf.doc.utils import get_tags_for_stream_id
|
||||
from ietf.name.models import StreamName, IntendedStdLevelName, DocTagName
|
||||
from ietf.group.factories import GroupFactory
|
||||
from ietf.group.models import Group
|
||||
from ietf.person.factories import PersonFactory
|
||||
from ietf.person.models import Person, Email
|
||||
from ietf.meeting.models import Meeting, MeetingTypeName
|
||||
from ietf.iesg.models import TelechatDate
|
||||
|
@ -1197,6 +1200,48 @@ class AdoptDraftTests(TestCase):
|
|||
|
||||
self.assertFalse(mars.list_email in draft.notify)
|
||||
|
||||
def test_right_state_choices_offered(self):
|
||||
draft = DocumentFactory()
|
||||
wg = GroupFactory(type_id='wg',state_id='active')
|
||||
rg = GroupFactory(type_id='rg',state_id='active')
|
||||
person = PersonFactory(user__username='person')
|
||||
|
||||
self.client.login(username='person',password='person+password')
|
||||
url = urlreverse('ietf.doc.views_draft.adopt_draft', kwargs=dict(name=draft.name))
|
||||
|
||||
person.role_set.create(name_id='chair',group=wg,email=person.email())
|
||||
r = self.client.get(url)
|
||||
q = PyQuery(r.content)
|
||||
self.assertTrue('(IETF)' in q('#id_newstate option').text())
|
||||
self.assertFalse('(IRTF)' in q('#id_newstate option').text())
|
||||
|
||||
person.role_set.create(name_id='chair',group=Group.objects.get(acronym='irtf'),email=person.email())
|
||||
r = self.client.get(url)
|
||||
q = PyQuery(r.content)
|
||||
self.assertTrue('(IETF)' in q('#id_newstate option').text())
|
||||
self.assertTrue('(IRTF)' in q('#id_newstate option').text())
|
||||
|
||||
person.role_set.filter(group__acronym='irtf').delete()
|
||||
person.role_set.create(name_id='chair',group=rg,email=person.email())
|
||||
r = self.client.get(url)
|
||||
q = PyQuery(r.content)
|
||||
self.assertTrue('(IETF)' in q('#id_newstate option').text())
|
||||
self.assertTrue('(IRTF)' in q('#id_newstate option').text())
|
||||
|
||||
person.role_set.filter(group=wg).delete()
|
||||
r = self.client.get(url)
|
||||
q = PyQuery(r.content)
|
||||
self.assertFalse('(IETF)' in q('#id_newstate option').text())
|
||||
self.assertTrue('(IRTF)' in q('#id_newstate option').text())
|
||||
|
||||
person.role_set.all().delete()
|
||||
person.role_set.create(name_id='secr',group=Group.objects.get(acronym='secretariat'),email=person.email())
|
||||
r = self.client.get(url)
|
||||
q = PyQuery(r.content)
|
||||
self.assertTrue('(IETF)' in q('#id_newstate option').text())
|
||||
self.assertTrue('(IRTF)' in q('#id_newstate option').text())
|
||||
|
||||
|
||||
class ChangeStreamStateTests(TestCase):
|
||||
def test_set_tags(self):
|
||||
draft = make_test_data()
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
import datetime
|
||||
|
||||
from django import forms
|
||||
from django.db.models import Q
|
||||
from django.http import HttpResponseRedirect, HttpResponseForbidden, Http404
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.template.loader import render_to_string
|
||||
|
@ -1213,17 +1214,22 @@ class AdoptDraftForm(forms.Form):
|
|||
|
||||
super(AdoptDraftForm, self).__init__(*args, **kwargs)
|
||||
|
||||
state_types = set()
|
||||
if has_role(user, "Secretariat"):
|
||||
state_choices = State.objects.filter(type__in=['draft-stream-ietf','draft-stream-irtf'], used=True).exclude(slug__in=settings.GROUP_STATES_WITH_EXTRA_PROCESSING)
|
||||
elif has_role(user, "IRTF Chair"):
|
||||
#The IRTF chair can adopt a draft into any RG
|
||||
group_ids = list(Group.objects.filter(type="rg", state="active").values_list('id', flat=True))
|
||||
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)))
|
||||
self.fields["group"].queryset = self.fields["group"].queryset.filter(id__in=group_ids).distinct()
|
||||
state_choices = State.objects.filter(type='draft-stream-irtf', used=True).exclude(slug__in=settings.GROUP_STATES_WITH_EXTRA_PROCESSING)
|
||||
else:
|
||||
self.fields["group"].queryset = self.fields["group"].queryset.filter(role__person__user=user, role__name__in=("chair", "delegate", "secr")).distinct()
|
||||
state_choices = State.objects.filter(type='draft-stream-ietf', used=True).exclude(slug__in=settings.GROUP_STATES_WITH_EXTRA_PROCESSING)
|
||||
state_types.update(['draft-stream-ietf','draft-stream-irtf'])
|
||||
else:
|
||||
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():
|
||||
state_types.add('draft-stream-irtf')
|
||||
if Group.objects.filter(type="wg", state="active", role__person__user=user, role__name__in=("chair", "delegate", "secr")).exists():
|
||||
state_types.add('draft-stream-ietf')
|
||||
state_choices = State.objects.filter(type__in=state_types, used=True).exclude(slug__in=settings.GROUP_STATES_WITH_EXTRA_PROCESSING)
|
||||
|
||||
if not has_role(user, "Secretariat"):
|
||||
if has_role(user, "IRTF Chair"):
|
||||
group_queryset = self.fields["group"].queryset.filter(Q(role__person__user=user, role__name__in=("chair", "delegate", "secr"))|Q(type="rg", state="active")).distinct()
|
||||
else:
|
||||
group_queryset = self.fields["group"].queryset.filter(role__person__user=user, role__name__in=("chair", "delegate", "secr")).distinct()
|
||||
self.fields["group"].queryset = group_queryset
|
||||
|
||||
self.fields['group'].choices = [(g.pk, '%s - %s' % (g.acronym, g.name)) for g in self.fields["group"].queryset]
|
||||
self.fields['newstate'].choices = [('','-- Pick a state --')]
|
||||
|
|
Loading…
Reference in a new issue