Skip to content

Commit dfe06e8

Browse files
authored
ci: merge main to release
2 parents c5a955d + fa00abf commit dfe06e8

54 files changed

Lines changed: 534 additions & 401 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

dev/del-old-packages/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const octokit = new Octokit({
88

99
const oldestDate = DateTime.utc().minus({ days: 7 })
1010

11-
for (const pkgName of ['datatracker-db', 'datatracker-db-pg']) {
11+
for (const pkgName of ['datatracker-db']) {
1212
let hasMore = true
1313
let currentPage = 1
1414

ietf/doc/tests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,7 @@ def test_document_draft(self):
828828
stream_id=draft.stream_id, group_id=draft.group_id, abstract=draft.abstract,stream=draft.stream, rev=draft.rev,
829829
pages=draft.pages, intended_std_level_id=draft.intended_std_level_id,
830830
shepherd_id=draft.shepherd_id, ad_id=draft.ad_id, expires=draft.expires,
831-
notify=draft.notify, note=draft.note)
831+
notify=draft.notify)
832832
rel = RelatedDocument.objects.create(source=replacement,
833833
target=draft.docalias.get(name__startswith="draft"),
834834
relationship_id="replaces")

ietf/doc/tests_charter.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
# Copyright The IETF Trust 2011-2020, All Rights Reserved
2+
# Copyright The IETF Trust 2011-2023, All Rights Reserved
33

44

55
import datetime
@@ -817,6 +817,19 @@ def test_approve(self):
817817
self.assertEqual(group.groupmilestone_set.filter(state="active", desc=m1.desc).count(), 1)
818818
self.assertEqual(group.groupmilestone_set.filter(state="active", desc=m4.desc).count(), 1)
819819

820+
def test_approve_irtf(self):
821+
charter = CharterFactory(group__type_id='rg')
822+
url = urlreverse('ietf.doc.views_charter.approve', kwargs=dict(name=charter.name))
823+
login_testing_unauthorized(self, "secretary", url)
824+
empty_outbox()
825+
r = self.client.post(url, dict())
826+
self.assertEqual(r.status_code, 302)
827+
self.assertEqual(len(outbox), 2)
828+
self.assertTrue("IRTF" in outbox[1]['From'])
829+
self.assertTrue("irtf-announce" in outbox[1]['To'])
830+
self.assertTrue(charter.group.acronym in outbox[1]['Cc'])
831+
self.assertTrue("RG Action" in outbox[1]['Subject'])
832+
820833
def test_charter_with_milestones(self):
821834
charter = CharterFactory()
822835

ietf/doc/tests_conflict_review.py

Lines changed: 80 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright The IETF Trust 2012-2020, All Rights Reserved
1+
# Copyright The IETF Trust 2012-2023, All Rights Reserved
22
# -*- coding: utf-8 -*-
33

44

@@ -13,8 +13,8 @@
1313

1414
import debug # pyflakes:ignore
1515

16-
from ietf.doc.factories import IndividualDraftFactory, ConflictReviewFactory
17-
from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent, BallotPositionDocEvent, TelechatDocEvent, State
16+
from ietf.doc.factories import IndividualDraftFactory, ConflictReviewFactory, RgDraftFactory
17+
from ietf.doc.models import Document, DocEvent, NewRevisionDocEvent, BallotPositionDocEvent, TelechatDocEvent, State, DocTagName
1818
from ietf.doc.utils import create_ballot_if_not_open
1919
from ietf.doc.views_conflict_review import default_approval_text
2020
from ietf.group.models import Person
@@ -168,6 +168,21 @@ def test_change_state(self):
168168
self.assertTrue(review_doc.active_ballot())
169169
self.assertEqual(review_doc.latest_event(BallotPositionDocEvent, type="changed_ballot_position").pos_id,'yes')
170170

171+
# try to change to an AD-forbidden state
172+
appr_noprob_sent_pk = str(State.objects.get(used=True, slug='appr-noprob-sent',type__slug='conflrev').pk)
173+
r = self.client.post(url,dict(review_state=appr_noprob_sent_pk,comment='xyzzy'))
174+
self.assertEqual(r.status_code, 200)
175+
q = PyQuery(r.content)
176+
self.assertTrue(q('form .invalid-feedback'))
177+
178+
# try again as secretariat
179+
self.client.logout()
180+
login_testing_unauthorized(self, 'secretary', url)
181+
r = self.client.post(url,dict(review_state=appr_noprob_sent_pk,comment='xyzzy'))
182+
self.assertEqual(r.status_code, 302)
183+
review_doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
184+
self.assertEqual(review_doc.get_state('conflrev').slug, 'appr-noprob-sent')
185+
171186

172187
def test_edit_notices(self):
173188
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')
@@ -450,3 +465,65 @@ def test_subsequent_submission(self):
450465
def setUp(self):
451466
super().setUp()
452467
ConflictReviewFactory(name='conflict-review-imaginary-irtf-submission',review_of=IndividualDraftFactory(name='draft-imaginary-irtf-submission',stream_id='irtf'),notify='notifyme@example.net')
468+
469+
class ConflictReviewIrtfStateTests(TestCase):
470+
471+
def start_review(self, role, kwargs=None):
472+
doc = RgDraftFactory()
473+
url = urlreverse('ietf.doc.views_conflict_review.start_review', kwargs=dict(name=doc.name))
474+
login_testing_unauthorized(self, role, url)
475+
476+
r = self.client.post(url, kwargs)
477+
self.assertEqual(r.status_code, 302)
478+
self.assertEqual(doc.get_state('draft-stream-irtf').slug, 'iesg-rev')
479+
480+
def test_start_review_as_secretary(self):
481+
ad_strpk = str(Person.objects.get(name='Areað Irector').pk)
482+
state_strpk = str(State.objects.get(used=True, slug='needshep', type__slug='conflrev').pk)
483+
self.start_review('secretary', kwargs=dict(ad=ad_strpk, create_in_state=state_strpk))
484+
485+
def test_start_review_as_stream_owner(self):
486+
self.start_review('irtf-chair')
487+
488+
def close_review(self, close_type, role):
489+
doc = RgDraftFactory()
490+
review = ConflictReviewFactory(review_of=doc)
491+
url = urlreverse('ietf.doc.views_conflict_review.change_state', kwargs=dict(name=review.name))
492+
login_testing_unauthorized(self, role, url)
493+
494+
strpk = str(State.objects.get(used=True, slug=close_type, type__slug='conflrev').pk)
495+
r = self.client.post(url, dict(review_state=strpk))
496+
self.assertEqual(r.status_code, 302)
497+
self.assertEqual(doc.get_state('draft-stream-irtf').slug, 'chair-w')
498+
self.assertIn(DocTagName.objects.get(pk='iesg-com'), doc.tags.all())
499+
500+
def test_close_review_reqnopub_as_secretary(self):
501+
self.close_review('appr-reqnopub-sent', 'secretary')
502+
503+
def test_close_review_noprob_as_secretary(self):
504+
self.close_review('appr-noprob-sent', 'secretary')
505+
506+
def test_close_review_withdraw_as_secretary(self):
507+
self.close_review('withdraw', 'secretary')
508+
509+
def test_close_review_dead_as_secretary(self):
510+
self.close_review('dead', 'secretary')
511+
512+
def test_close_review_withdraw_as_ad(self):
513+
self.close_review('withdraw', 'ad')
514+
515+
def test_close_review_dead_as_ad(self):
516+
self.close_review('dead', 'ad')
517+
518+
def test_approve_review(self):
519+
doc = RgDraftFactory()
520+
review = ConflictReviewFactory(review_of=doc)
521+
review.set_state(State.objects.get(used=True, slug='appr-noprob-pend', type='conflrev'))
522+
523+
url = urlreverse('ietf.doc.views_conflict_review.approve_conflict_review', kwargs=dict(name=review.name))
524+
login_testing_unauthorized(self, 'secretary', url)
525+
526+
r = self.client.post(url, dict(announcement_text=default_approval_text(review)))
527+
self.assertEqual(r.status_code, 302)
528+
self.assertEqual(doc.get_state('draft-stream-irtf').slug, 'chair-w')
529+
self.assertIn(DocTagName.objects.get(pk='iesg-com'), doc.tags.all())

ietf/doc/tests_draft.py

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def test_change_state(self):
9898
draft.action_holders.add(ad)
9999

100100
url = urlreverse('ietf.doc.views_draft.change_state', kwargs=dict(name=draft.name))
101-
login_testing_unauthorized(self, "secretary", url)
101+
login_testing_unauthorized(self, "ad", url)
102102

103103
first_state = draft.get_state("draft-iesg")
104104
next_states = first_state.next_states.all()
@@ -154,6 +154,20 @@ def test_change_state(self):
154154
q = PyQuery(r.content)
155155
self.assertEqual(len(q('form [type=submit]:contains("%s")' % first_state.name)), 1)
156156

157+
# try to change to an AD-forbidden state
158+
r = self.client.post(url, dict(state=State.objects.get(used=True, type='draft-iesg', slug='ann').pk, comment='Test comment'))
159+
self.assertEqual(r.status_code, 200)
160+
q = PyQuery(r.content)
161+
self.assertTrue(q('form .invalid-feedback'))
162+
163+
# try again as secretariat
164+
self.client.logout()
165+
login_testing_unauthorized(self, 'secretary', url)
166+
r = self.client.post(url, dict(state=State.objects.get(used=True, type='draft-iesg', slug='ann').pk, comment='Test comment'))
167+
self.assertEqual(r.status_code, 302)
168+
draft = Document.objects.get(name=draft.name)
169+
self.assertEqual(draft.get_state_slug('draft-iesg'), 'ann')
170+
157171
def test_pull_from_rfc_queue(self):
158172
ad = Person.objects.get(user__username="ad")
159173
draft = WgDraftFactory(
@@ -362,16 +376,14 @@ def test_edit_info(self):
362376
stream=draft.stream_id,
363377
ad=str(new_ad.pk),
364378
notify="test@example.com",
365-
note="New note",
366379
telechat_date="",
367380
))
368381
self.assertEqual(r.status_code, 302)
369382

370383
draft = Document.objects.get(name=draft.name)
371384
self.assertEqual(draft.ad, new_ad)
372-
self.assertEqual(draft.note, "New note")
373385
self.assertTrue(not draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat"))
374-
self.assertEqual(draft.docevent_set.count(), events_before + 3)
386+
self.assertEqual(draft.docevent_set.count(), events_before + 2)
375387
self.assertEqual(len(outbox), mailbox_before + 1)
376388
self.assertTrue(draft.name in outbox[-1]['Subject'])
377389

@@ -386,7 +398,6 @@ def test_edit_telechat_date(self):
386398
stream=draft.stream_id,
387399
ad=str(draft.ad_id),
388400
notify=draft.notify,
389-
note="",
390401
)
391402

392403
# get
@@ -489,20 +500,18 @@ def test_start_iesg_process_on_draft(self):
489500
ad=ad.pk,
490501
create_in_state=State.objects.get(used=True, type="draft-iesg", slug="watching").pk,
491502
notify="test@example.com",
492-
note="This is a note",
493503
telechat_date="",
494504
))
495505
self.assertEqual(r.status_code, 302)
496506

497507
draft = Document.objects.get(name=draft.name)
498508
self.assertEqual(draft.get_state_slug("draft-iesg"), "watching")
499509
self.assertEqual(draft.ad, ad)
500-
self.assertEqual(draft.note, "This is a note")
501510
self.assertTrue(not draft.latest_event(TelechatDocEvent, type="scheduled_for_telechat"))
502-
self.assertEqual(draft.docevent_set.count(), events_before + 5)
511+
self.assertEqual(draft.docevent_set.count(), events_before + 4)
503512
self.assertCountEqual(draft.action_holders.all(), [draft.ad])
504513
events = list(draft.docevent_set.order_by('time', 'id'))
505-
self.assertEqual(events[-5].type, "started_iesg_process")
514+
self.assertEqual(events[-4].type, "started_iesg_process")
506515
self.assertEqual(len(outbox), mailbox_before+1)
507516
self.assertTrue('IESG processing' in outbox[-1]['Subject'])
508517
self.assertTrue('draft-ietf-mars-test2@' in outbox[-1]['To'])
@@ -518,7 +527,6 @@ def test_start_iesg_process_on_draft(self):
518527
ad=ad.pk,
519528
create_in_state=State.objects.get(used=True, type="draft-iesg", slug="pub-req").pk,
520529
notify="test@example.com",
521-
note="This is a note",
522530
telechat_date="",
523531
))
524532
self.assertEqual(r.status_code, 302)
@@ -1043,23 +1051,6 @@ def test_doc_change_telechat_date(self):
10431051
doc = Document.objects.get(name=self.docname)
10441052
self.assertEqual(doc.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date,None)
10451053

1046-
def test_doc_change_iesg_note(self):
1047-
url = urlreverse('ietf.doc.views_draft.edit_iesg_note', kwargs=dict(name=self.docname))
1048-
login_testing_unauthorized(self, "secretary", url)
1049-
1050-
# get
1051-
r = self.client.get(url)
1052-
self.assertEqual(r.status_code,200)
1053-
q = PyQuery(r.content)
1054-
self.assertEqual(len(q('[type=submit]:contains("Save")')),1)
1055-
1056-
# post
1057-
r = self.client.post(url,dict(note='ZpyQFGmA\r\nZpyQFGmA'))
1058-
self.assertEqual(r.status_code,302)
1059-
doc = Document.objects.get(name=self.docname)
1060-
self.assertEqual(doc.note,'ZpyQFGmA\nZpyQFGmA')
1061-
self.assertTrue('ZpyQFGmA' in doc.latest_event(DocEvent,type='added_comment').desc)
1062-
10631054
def test_doc_change_ad(self):
10641055
url = urlreverse('ietf.doc.views_draft.edit_ad', kwargs=dict(name=self.docname))
10651056
login_testing_unauthorized(self, "secretary", url)

ietf/doc/tests_statement.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ def test_start_new_statement(self):
255255
statement.latest_event(NewRevisionDocEvent).rev, "00"
256256
)
257257
self.assertIsNotNone(statement.latest_event(type="published_statement"))
258+
self.assertIsNotNone(statement.history_set.last().latest_event(type="published_statement"))
258259
if postdict["statement_submission"] == "enter":
259260
self.assertEqual(statement.text_or_error(), "some stuff")
260261
else:

ietf/doc/tests_status_change.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,21 @@ def test_change_state(self):
147147
self.assertTrue(doc.active_ballot())
148148
self.assertEqual(doc.latest_event(BallotPositionDocEvent, type="changed_ballot_position").pos_id,'yes')
149149

150+
# try to change to an AD-forbidden state
151+
appr_sent_pk = str(State.objects.get(used=True, slug='appr-sent',type__slug='statchg').pk)
152+
r = self.client.post(url, dict(new_state=appr_sent_pk, comment='xyzzy'))
153+
self.assertEqual(r.status_code, 200)
154+
q = PyQuery(r.content)
155+
self.assertTrue(q('form .invalid-feedback'))
156+
157+
# try again as secretariat
158+
self.client.logout()
159+
login_testing_unauthorized(self, 'secretary', url)
160+
r = self.client.post(url, dict(new_state=appr_sent_pk, comment='xyzzy'))
161+
self.assertEqual(r.status_code, 302)
162+
doc = Document.objects.get(name='status-change-imaginary-mid-review')
163+
self.assertEqual(doc.get_state('statchg').slug, 'appr-sent')
164+
150165
def test_edit_notices(self):
151166
doc = Document.objects.get(name='status-change-imaginary-mid-review')
152167
url = urlreverse('ietf.doc.views_doc.edit_notify;status-change',kwargs=dict(name=doc.name))

ietf/doc/urls.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@
134134
url(r'^%(name)s/edit/suggested-replaces/$' % settings.URL_REGEXPS, views_draft.review_possibly_replaces),
135135
url(r'^%(name)s/edit/status/$' % settings.URL_REGEXPS, views_draft.change_intention),
136136
url(r'^%(name)s/edit/telechat/$' % settings.URL_REGEXPS, views_doc.telechat_date),
137-
url(r'^%(name)s/edit/iesgnote/$' % settings.URL_REGEXPS, views_draft.edit_iesg_note),
138137
url(r'^%(name)s/edit/ad/$' % settings.URL_REGEXPS, views_draft.edit_ad),
139138
url(r'^%(name)s/edit/authors/$' % settings.URL_REGEXPS, views_doc.edit_authors),
140139
url(r'^%(name)s/edit/consensus/$' % settings.URL_REGEXPS, views_draft.edit_consensus),

0 commit comments

Comments
 (0)