Fix issue in telechat app where ballot positions for WG actions are incorrect. Fixes #1336. Commit ready for merge
- Legacy-Id: 13212
This commit is contained in:
parent
767e9f9695
commit
70ccb0b769
|
@ -19,8 +19,13 @@ TELECHAT_TAGS = ('point','ad-f-up','extpty','need-rev')
|
|||
class BallotForm(forms.Form):
|
||||
name = forms.CharField(max_length=50,widget=forms.HiddenInput)
|
||||
id = forms.IntegerField(widget=forms.HiddenInput)
|
||||
position = forms.ModelChoiceField(queryset=BallotPositionName.objects.exclude(slug='block').order_by('order'), widget=forms.RadioSelect, initial="norecord", required=True)
|
||||
position = forms.ModelChoiceField(queryset=BallotPositionName.objects.all(), widget=forms.RadioSelect, initial="norecord", required=True)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
ballot_type = kwargs.pop("ballot_type")
|
||||
super(BallotForm, self).__init__(*args, **kwargs)
|
||||
self.fields['position'].queryset = ballot_type.positions.order_by('order')
|
||||
|
||||
class ChangeStateForm(forms.Form):
|
||||
'''
|
||||
This form needs to handle documents of different types (draft, and conflrev for now).
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
import datetime
|
||||
from pyquery import PyQuery
|
||||
|
||||
from django.urls import reverse
|
||||
|
||||
from ietf.doc.models import Document, State, BallotDocEvent, BallotType
|
||||
from ietf.doc.utils import update_telechat
|
||||
from ietf.utils.test_utils import TestCase
|
||||
from ietf.iesg.models import TelechatDate
|
||||
|
||||
from ietf.person.models import Person
|
||||
from ietf.secr.telechat.views import get_next_telechat_date
|
||||
from ietf.utils.test_data import make_test_data
|
||||
|
||||
SECR_USER='secretary'
|
||||
|
||||
|
@ -30,3 +35,43 @@ class SecrTelechatTestCase(TestCase):
|
|||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_doc_detail_draft(self):
|
||||
draft = make_test_data()
|
||||
d = get_next_telechat_date()
|
||||
date = d.strftime('%Y-%m-%d')
|
||||
by=Person.objects.get(name="(System)")
|
||||
update_telechat(None, draft, by, date)
|
||||
url = reverse('ietf.secr.telechat.views.doc_detail', kwargs={'date':date, 'name':draft.name})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
q = PyQuery(response.content)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('Yes')").length,1)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('No Objection')").length,1)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('Discuss')").length,1)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('Abstain')").length,1)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('Recuse')").length,1)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('No Record')").length,1)
|
||||
|
||||
def test_doc_detail_charter(self):
|
||||
make_test_data()
|
||||
by=Person.objects.get(name="(System)")
|
||||
charter = Document.objects.filter(type='charter').first()
|
||||
charter.set_state(State.objects.get(used=True, slug="intrev", type="charter"))
|
||||
last_week = datetime.date.today()-datetime.timedelta(days=7)
|
||||
BallotDocEvent.objects.create(type='created_ballot',by=by,doc=charter, rev=charter.rev,
|
||||
ballot_type=BallotType.objects.get(doc_type=charter.type,slug='r-extrev'),
|
||||
time=last_week)
|
||||
d = get_next_telechat_date()
|
||||
date = d.strftime('%Y-%m-%d')
|
||||
update_telechat(None, charter, by, date)
|
||||
url = reverse('ietf.secr.telechat.views.doc_detail', kwargs={'date':date, 'name':charter.name})
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
q = PyQuery(response.content)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('Yes')").length,1)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('No Objection')").length,1)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('Block')").length,1)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('Abstain')").length,1)
|
||||
self.assertEqual(q("#telechat-positions-table").find("th:contains('No Record')").length,1)
|
||||
|
|
|
@ -4,8 +4,9 @@ import datetime
|
|||
from django.contrib import messages
|
||||
from django.forms.formsets import formset_factory
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.utils.functional import curry
|
||||
|
||||
from ietf.doc.models import DocEvent, Document, BallotDocEvent, BallotPositionDocEvent, WriteupDocEvent
|
||||
from ietf.doc.models import DocEvent, Document, BallotDocEvent, BallotPositionDocEvent, BallotType, WriteupDocEvent
|
||||
from ietf.doc.utils import get_document_content, add_state_change_event
|
||||
from ietf.person.models import Person
|
||||
from ietf.doc.lastcall import request_last_call
|
||||
|
@ -58,11 +59,11 @@ def get_doc_writeup(doc):
|
|||
writeup = 'This document has no writeup'
|
||||
if doc.type_id == 'draft':
|
||||
latest = doc.latest_event(WriteupDocEvent, type='changed_ballot_writeup_text')
|
||||
if latest and doc.has_rfc_editor_note():
|
||||
rfced_note = doc.latest_event(WriteupDocEvent, type="changed_rfc_editor_note_text")
|
||||
writeup = latest.text + "\n\n" + rfced_note.text
|
||||
else:
|
||||
if latest:
|
||||
writeup = latest.text
|
||||
if doc.has_rfc_editor_note():
|
||||
rfced_note = doc.latest_event(WriteupDocEvent, type="changed_rfc_editor_note_text")
|
||||
writeup = writeup + "\n\n" + rfced_note.text
|
||||
if doc.type_id == 'charter':
|
||||
latest = doc.latest_event(WriteupDocEvent, type='changed_ballot_writeup_text')
|
||||
if latest:
|
||||
|
@ -194,7 +195,14 @@ def doc_detail(request, date, name):
|
|||
initial_state = {'state':doc.get_state(state_type).pk,
|
||||
'substate':tag}
|
||||
|
||||
# need to use curry here to pass custom variable to form init
|
||||
if doc.active_ballot():
|
||||
ballot_type = doc.active_ballot().ballot_type
|
||||
else:
|
||||
ballot_type = BallotType.objects.get(doc_type='draft')
|
||||
BallotFormset = formset_factory(BallotForm, extra=0)
|
||||
BallotFormset.form = staticmethod(curry(BallotForm, ballot_type=ballot_type))
|
||||
|
||||
agenda = agenda_data(date=date)
|
||||
header = get_section_header(doc, agenda)
|
||||
|
||||
|
@ -281,6 +289,7 @@ def doc_detail(request, date, name):
|
|||
conflictdoc = None
|
||||
|
||||
return render(request, 'telechat/doc.html', {
|
||||
'ballot_type': ballot_type,
|
||||
'date': date,
|
||||
'document': doc,
|
||||
'conflictdoc': conflictdoc,
|
||||
|
|
|
@ -28,7 +28,12 @@
|
|||
<form action="" method="post">{% csrf_token %}
|
||||
{{ formset.management_form }}
|
||||
<table id="telechat-positions-table">
|
||||
<tr><th>Area Director</th><th>Yes</th><th>No Objections</th><th>Discuss</th><th>Abstain</th><th>Recuse</th><th>No Position</th></tr>
|
||||
<tr>
|
||||
<th>Area Director</th>
|
||||
{% for position in document.active_ballot.ballot_type.positions.all %}
|
||||
<th>{{ position.name }}</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% for form in formset.forms %}
|
||||
<tr{% if form.initial.position == 'norecord' or form.initial.position == None %} class="green-row"{% endif %}{% if form.initial.position == 'discuss' %} class="red-row"{% endif %}><td>{{ form.initial.name }}{{ form.name }}{{ form.id }}</td>
|
||||
{% with form.position as field %}
|
||||
|
|
Loading…
Reference in a new issue