fix: allow import of rev00 minutes and let secretariat edit materials (#3776)

* fix: show "Edit materials" button for all groups for a secretariat user

Fixes ietf-tools#3763

* fix: show "import minutes" button to import initial revision

* test: validate that import session minutes buttons are shown

* test: validate that "Edit materials" links are shown
This commit is contained in:
Jennifer Richards 2022-04-01 12:49:20 -03:00 committed by GitHub
parent 8bd48514b0
commit 2859c43677
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 104 additions and 1 deletions

View file

@ -658,6 +658,50 @@ class MeetingTests(BaseMeetingTestCase):
r = self.client.get(url)
self.assertEqual(unicontent(r), doc.text())
def test_materials_has_edit_links(self):
meeting = make_meeting_test_data()
url = urlreverse("ietf.meeting.views.materials", kwargs=dict(num=meeting.number))
r = self.client.get(url)
self.assertNotContains(r, 'Edit materials', status_code=200)
# mars chairman can edit materials for mars group
self.client.login(username='marschairman', password='marschairman+password')
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content.decode())
edit_url = urlreverse(
'ietf.meeting.views.session_details',
kwargs={'num': meeting.number, 'acronym': 'mars'},
)
self.assertEqual(len(q(f'a[href^="{edit_url}"]')), 1, 'Link to mars session_details for mars chairman')
for acro in ['ietf', 'ames']: # other groups with materials
edit_url = urlreverse(
'ietf.meeting.views.session_details',
kwargs={'num': meeting.number, 'acronym': acro},
)
self.assertEqual(len(q(f'a[href^="{edit_url}"]')), 0, f'No link to {acro} session_details for mars chairman')
# secretary can edit all groups
self.client.login(username='secretary', password='secretary+password')
r = self.client.get(url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content.decode())
for acro in ['mars', 'ames']: # wgs
edit_url = urlreverse(
'ietf.meeting.views.session_details',
kwargs={'num': meeting.number, 'acronym': acro},
)
self.assertEqual(len(q(f'a[href^="{edit_url}"]')), 1, f'Link to session_details page for {acro}')
# The IETF Plenary has a "#sessionX" tacked on to the edit url to differentiate from other sessions,
# so test it separately. Not bothering to check the exact session pk in detail.
edit_url = urlreverse(
'ietf.meeting.views.session_details',
kwargs={'num': meeting.number, 'acronym': 'ietf'},
)
self.assertEqual(len(q(f'a[href^="{edit_url}#session"]')), 1, f'Link to session_details page for {acro}')
def test_materials_editable_groups(self):
meeting = make_meeting_test_data()
@ -3854,6 +3898,7 @@ class EditTests(TestCase):
self.assertTrue(mars_slot.slot_to_the_right)
self.assertTrue(mars_scheduled.slot_to_the_right)
class SessionDetailsTests(TestCase):
def test_session_details(self):
@ -3876,6 +3921,63 @@ class SessionDetailsTests(TestCase):
self.assertFalse(q('div#session-buttons-%s span.bi-arrows-fullscreen' % session.id),
'The session detail page is incorrectly showing the "Show meeting materials" button')
def test_session_details_has_import_minutes_buttons(self):
group = GroupFactory.create(
type_id='wg',
state_id='active',
)
session = SessionFactory.create(
meeting__type_id='ietf',
group=group,
meeting__date=datetime.date.today() + datetime.timedelta(days=90),
)
session_details_url = urlreverse(
'ietf.meeting.views.session_details',
kwargs={'num': session.meeting.number, 'acronym': group.acronym},
)
import_minutes_url = urlreverse(
'ietf.meeting.views.import_session_minutes',
kwargs={'num': session.meeting.number, 'session_id': session.pk},
)
# test without existing minutes
with patch('ietf.meeting.views.can_manage_session_materials', return_value=False):
r = self.client.get(session_details_url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
self.assertEqual(
len(q(f'a[href="{import_minutes_url}"]')), 0,
'Do not show import new minutes buttons to non-materials manager',
)
with patch('ietf.meeting.views.can_manage_session_materials', return_value=True):
r = self.client.get(session_details_url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
self.assertGreater(
len(q(f'a[href="{import_minutes_url}"]')), 0,
'Show import new minutes buttons to materials manager',
)
# now create minutes and test that we can still have the import button
SessionPresentationFactory.create(session=session,document__type_id='minutes')
with patch('ietf.meeting.views.can_manage_session_materials', return_value=False):
r = self.client.get(session_details_url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
self.assertEqual(
len(q(f'a[href="{import_minutes_url}"]')), 0,
'Do not show import revised minutes buttons to non-materials manager',
)
with patch('ietf.meeting.views.can_manage_session_materials', return_value=True):
r = self.client.get(session_details_url)
self.assertEqual(r.status_code, 200)
q = PyQuery(r.content)
self.assertGreater(
len(q(f'a[href="{import_minutes_url}"]')), 0,
'Show import revised minutes buttons to materials manager',
)
def test_session_details_past_interim(self):
group = GroupFactory.create(type_id='wg',state_id='active')
chair = RoleFactory(name_id='chair',group=group)

View file

@ -115,7 +115,7 @@
</td>
{% if user|has_role:"Secretariat" or user_groups %}
<td>
{% if session.group in user_groups %}
{% if user|has_role:"Secretariat" or session.group in user_groups %}
<div class="float-end">{% include "meeting/edit_materials_button.html" %}</div>
{% endif %}
</td>

View file

@ -101,6 +101,7 @@
</a>
{% endif %}
{% if not session.type_counter.minutes %}
<a class="btn btn-primary" href="{% url 'ietf.meeting.views.import_session_minutes' num=session.meeting.number session_id=session.pk %}">Import minutes from notes.ietf.org</a>
<a class="btn btn-primary"
href="{% url 'ietf.meeting.views.upload_session_minutes' session_id=session.pk num=session.meeting.number %}">
Upload minutes