Skip to content

Commit f705790

Browse files
committed
View for adding comments, use login helper in tests
- Legacy-Id: 2273
1 parent 8c4c064 commit f705790

5 files changed

Lines changed: 80 additions & 32 deletions

File tree

branch/iesg-tracker/ietf/idrfc/tests.py

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141

4242
from ietf.idrfc.models import *
4343
from ietf.idtracker.models import *
44-
from ietf.utils.test_utils import SimpleUrlTestCase, RealDatabaseTest
44+
from ietf.utils.test_utils import SimpleUrlTestCase, RealDatabaseTest, login_testing_unauthorized
4545
from ietf.utils.test_runner import mail_outbox
4646

4747
class IdRfcUrlTestCase(SimpleUrlTestCase):
@@ -53,19 +53,12 @@ class ChangeStateTestCase(django.test.TestCase):
5353

5454
def test_change_state(self):
5555
draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6")
56+
url = urlreverse('doc_change_state', kwargs=dict(name=draft.filename))
57+
login_testing_unauthorized(self, "klm", url)
5658

5759
state = draft.idinternal.cur_state
5860
substate = draft.idinternal.cur_sub_state
5961
next_states = IDNextState.objects.filter(cur_state=draft.idinternal.cur_state)
60-
url = urlreverse('doc_change_state', kwargs=dict(name=draft.filename))
61-
62-
# unauthorized get
63-
r = self.client.get(url)
64-
self.assertEquals(r.status_code, 302)
65-
self.assertTrue("/accounts/login" in r['Location'])
66-
67-
68-
self.client.login(remote_user="klm")
6962

7063
# normal get
7164
r = self.client.get(url)
@@ -143,16 +136,8 @@ class EditInfoTestCase(django.test.TestCase):
143136

144137
def test_edit_info(self):
145138
draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6")
146-
147139
url = urlreverse('doc_edit_info', kwargs=dict(name=draft.filename))
148-
149-
# unauthorized get
150-
r = self.client.get(url)
151-
self.assertEquals(r.status_code, 302)
152-
self.assertTrue("/accounts/login" in r['Location'])
153-
154-
155-
self.client.login(remote_user="klm")
140+
login_testing_unauthorized(self, "klm", url)
156141

157142
# normal get
158143
r = self.client.get(url)
@@ -209,17 +194,10 @@ def test_request_resurrect(self):
209194
self.assertEquals(draft.status.status, "Expired")
210195
self.assertTrue(not draft.idinternal.resurrect_requested_by)
211196

212-
213197
url = urlreverse('doc_request_resurrect', kwargs=dict(name=draft.filename))
214-
215-
# unauthorized get
216-
r = self.client.get(url)
217-
self.assertEquals(r.status_code, 302)
218-
self.assertTrue("/accounts/login" in r['Location'])
219-
220-
221198
login_as = "rhousley"
222-
self.client.login(remote_user=login_as)
199+
200+
login_testing_unauthorized(self, login_as, url)
223201

224202
# normal get
225203
r = self.client.get(url)
@@ -241,6 +219,32 @@ def test_request_resurrect(self):
241219
self.assertTrue(len(mail_outbox) == 1)
242220
self.assertTrue("Resurrection" in mail_outbox[0]['Subject'])
243221

222+
class AddCommentTestCase(django.test.TestCase):
223+
fixtures = ['base', 'draft']
224+
225+
def test_add_comment(self):
226+
draft = InternetDraft.objects.get(filename="draft-ietf-mip6-cn-ipsec")
227+
url = urlreverse('doc_add_comment', kwargs=dict(name=draft.filename))
228+
login_testing_unauthorized(self, "klm", url)
229+
230+
# normal get
231+
r = self.client.get(url)
232+
self.assertEquals(r.status_code, 200)
233+
q = PyQuery(r.content)
234+
self.assertEquals(len(q('form textarea[name=comment]')), 1)
235+
236+
# request resurrect
237+
comments_before = draft.idinternal.comments().count()
238+
239+
r = self.client.post(url, dict(comment="This is a test."))
240+
self.assertEquals(r.status_code, 302)
241+
242+
self.assertEquals(draft.idinternal.comments().count(), comments_before + 1)
243+
self.assertTrue("This is a test." in draft.idinternal.comments()[0].comment_text)
244+
self.assertTrue(len(mail_outbox) == 1)
245+
self.assertTrue("updated" in mail_outbox[0]['Subject'])
246+
self.assertTrue(draft.filename in mail_outbox[0]['Subject'])
247+
244248

245249
TEST_RFC_INDEX = '''<?xml version="1.0" encoding="UTF-8"?>
246250
<rfc-index xmlns="http://www.rfc-editor.org/rfc-index"

branch/iesg-tracker/ietf/idrfc/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,5 @@
4545
url(r'^(?P<name>[^/]+)/edit/state/$', views_edit.change_state, {}, name='doc_change_state'),
4646
url(r'^(?P<name>[^/]+)/edit/info/$', views_edit.edit_info, {}, name='doc_edit_info'),
4747
url(r'^(?P<name>[^/]+)/edit/resurrect/$', views_edit.request_resurrect, {}, name='doc_request_resurrect'),
48+
url(r'^(?P<name>[^/]+)/edit/addcomment/$', views_edit.add_comment, {}, name='doc_add_comment'),
4849
)

branch/iesg-tracker/ietf/idrfc/views_edit.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ class ChangeStateForm(forms.Form):
1919
state = forms.ModelChoiceField(IDState.objects.all(), empty_label=None, required=True)
2020
substate = forms.ModelChoiceField(IDSubState.objects.all(), required=False)
2121

22-
def add_document_comment(request, doc, text):
22+
def add_document_comment(request, doc, text, include_by=True):
2323
login = IESGLogin.objects.get(login_name=request.user.username)
24-
if not 'Earlier history' in text:
24+
if include_by:
2525
text += " by %s" % login
2626

2727
c = DocumentComment()
@@ -311,3 +311,29 @@ def request_resurrect(request, name):
311311
return render_to_response('idrfc/request_resurrect.html',
312312
dict(doc=doc),
313313
context_instance=RequestContext(request))
314+
315+
class AddCommentForm(forms.Form):
316+
comment = forms.CharField(required=True, widget=forms.Textarea)
317+
318+
@group_required('Area_Director','Secretariat')
319+
def add_comment(request, name):
320+
doc = get_object_or_404(InternetDraft, filename=name)
321+
if not doc.idinternal:
322+
raise Http404()
323+
324+
login = IESGLogin.objects.get(login_name=request.user.username)
325+
326+
if request.method == 'POST':
327+
form = AddCommentForm(request.POST)
328+
if form.is_valid():
329+
c = form.cleaned_data['comment']
330+
add_document_comment(request, doc, c, include_by=False)
331+
email_owner(request, doc, doc.idinternal.job_owner, login, "A new comment added by %s" % login)
332+
return HttpResponseRedirect(doc.idinternal.get_absolute_url())
333+
else:
334+
form = AddCommentForm()
335+
336+
return render_to_response('idrfc/add_comment.html',
337+
dict(doc=doc,
338+
form=form),
339+
context_instance=RequestContext(request))
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<form action="" method="POST">
2+
<table>
3+
{{ form.as_table }}
4+
</table>
5+
6+
<div class="actions">
7+
<a href="{{ doc.idinternal.get_absolute_url }}">Back</a>
8+
<input type="submit" value="Add comment"/>
9+
</div>
10+
</form>
11+

branch/iesg-tracker/ietf/templates/idrfc/doc_main.html

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,14 @@ <h1>{% block doc_h1 %}{% endblock %}</h1>
8686
{% if doc.in_ietf_process %}
8787
{% ifequal doc.draft_status "Expired" %}
8888
{% if not doc.resurrect_requested_by %}
89-
<span id="doc_edit_state_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child"><a href="{% url doc_request_resurrect name=doc.draft_name %}">Request resurrect</a></span></span>
89+
<span id="doc_request_resurrect_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child"><a href="{% url doc_request_resurrect name=doc.draft_name %}">Request resurrect</a></span></span>
9090
{% endif %}
9191
{% else %}
9292
<span id="doc_edit_state_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child"><a href="{% url doc_change_state name=doc.draft_name %}">Change state</a></span></span>
9393

9494
<span id="doc_edit_info_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child"><a href="{% url doc_edit_info name=doc.draft_name %}">Edit</a></span></span>
9595
{% endifequal %}
96-
{% endif%}
96+
{% endif %}
9797
<span id="doc_edit_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child">{% if doc.in_ietf_process %}
9898
<a href="https://datatracker.ietf.org/cgi-bin/idtracker.cgi?command=view_id&amp;{% if info.is_rfc %}dTag={{doc.rfc_number}}&amp;rfc_flag=1{% else %}dTag={{doc.tracker_id}}{% endif %}" rel="nofollow" target="_blank">Edit state (IESG Tracker)</a>
9999
{% else %}
@@ -144,6 +144,12 @@ <h1>{% block doc_h1 %}{% endblock %}</h1>
144144
{% include "idrfc/doc_diffs.html" %}
145145
{% endif %}
146146
<h2 style="margin-top:1em;">Document history</h2>
147+
{% if user|in_group:"Area_Director,Secretariat" and doc.in_ietf_process %}
148+
<div style="margin-bottom:8px" id="history_actions">
149+
<span id="doc_add_comment_button" class="yui-button yui-link-button" style="margin-left:2px;"><span class="first-child"><a href="{% url doc_add_comment name=doc.draft_name %}">Add comment</a></span></span>
150+
</div>
151+
{% endif %}
152+
147153
{% include "idrfc/doc_history.html" %}
148154
</div>
149155
</div>

0 commit comments

Comments
 (0)