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:
parent
8bd48514b0
commit
2859c43677
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue