From 3c727106a274f1416f92a945ec2dc8fe2de554eb Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz <henrik@levkowetz.com> Date: Thu, 29 Jun 2017 12:52:25 +0000 Subject: [PATCH] Merged in [13717] from rjsparks@nostrum.com: Actually use the topic audience type in the feedback view. Fixes #2320. - Legacy-Id: 13728 Note: SVN reference [13717] has been migrated to Git commit 9638cb2e397beab18f3607b324518fd2900215f7 --- changelog | 64 ++++++++++++++++++++++++++++++++++++++++++++ ietf/nomcom/tests.py | 30 +++++++++++++++++++++ ietf/nomcom/views.py | 10 +++++++ 3 files changed, 104 insertions(+) diff --git a/changelog b/changelog index a62eb22f4..6d1c856f8 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,67 @@ +ietfdb (6.55.2) ietf; urgency=medium + + This release contains bugfixes and code refactoring: + + * Modified the text shown on Chairs' 'Manage Document Adoption in Group' + button and corrected the logic for which text to show. + + * Merged in [13722] and [13712] from rcross@amsl.com: + Remove all use of request.session from secretariat apps. Add tests for + affected views. Fixes #1455. + + * Removed the copy of xym copied directly from repository -- the method + call we use is too unstable at the moment. Now requiring xym=='0.4'. + + * Merged in [13628] from rcross@amsl.com: + Grant secretariat meeting__meeting admin permissions. + + * Added checks for the presence of yang module directories to the check + framework. Tweaked some text strings. + + * Modified the yang checker to work with both versions 0.3.x and 0.4.x of + xym (different signatures for get_extracted_models()). + + * Removed the 'apply to all sessions' checkbox from the + agenda/minutes/slides upload pages for non-session timeslots, such as + plenaries etc. as it is rarely if ever correct to have it checked then. + + * Additional tweaks to the mailman listinfo importer. + + * Code reorganization, doing away with multiple urls_* and views_ files + in ietf.group. No intentional functionality changes. + + * Made the import_mailman_listinfo management command somewhat more + robust. + + * Return a checker None result with exception message on xym exceptions. + + * Changed the url coverage code to handle deeper chains of url includes, + and to handle url includes through url lists in addition to url modules. + Added information in the release coverage dictionaries about the view + functions coupled to the urls. + + * Fixed a wrong virtualenv path in bin/mm_hourly + + * Updated PLAN + + * Updated docker/settings_local.py with new needed settings. Added a lot + of quotes to docker/run in order to work better with paths containsing + spaces. Touched a file during setup to be more debian compatible. + + * Variable naming tweak + + * Catch bad module names in the Yang checker (they are not currently + flagged by xym). + + * Changed the implementation of Submission.latest_checks() to also return + None checks, so it's possible to update a Passed due to no yang modules to + a None (no modules to check). + + * Corrected the settings names used in the yang extraction command. + + -- Henrik Levkowetz <henrik@levkowetz.com> 28 Jun 2017 10:43:38 -0700 + + ietfdb (6.55.1) ietf; urgency=medium This is a bugfix release, with some smaller enhancements. From the commit diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py index 5f2668815..5d2864a1b 100644 --- a/ietf/nomcom/tests.py +++ b/ietf/nomcom/tests.py @@ -1992,3 +1992,33 @@ class TopicTests(TestCase): self.assertContains(response, "alert-success") self.assertNotContains(response, "feedbackform") self.assertEqual(topic.feedback_set.count(),1) + + def testAudience(self): + for audience in ['nomcom','nominee']: + topic = TopicFactory(nomcom=self.nc,audience_id=audience) + feedback_url = reverse('ietf.nomcom.views.public_feedback',kwargs={'year':self.nc.year() }) + login_testing_unauthorized(self, self.plain_person.user.username, feedback_url) + r = self.client.get(feedback_url) + self.assertEqual(r.status_code,200) + self.assertFalse(topic.subject in unicontent(r)) + topic_url = feedback_url + '?topic=%d'%topic.pk + r = self.client.get(topic_url) + self.assertEqual(r.status_code,404) + r = self.client.post(topic_url, {'comments':'junk', 'confirmation':False}) + self.assertEqual(r.status_code,404) + + self.client.logout() + if audience == 'nomcom': + valid_user = self.nc.group.role_set.filter(name='member').first().person + else: + valid_user = self.nc.nominee_set.first().person + self.client.login(username=valid_user.user.username,password=valid_user.user.username+"+password") + r = self.client.get(feedback_url) + self.assertEqual(r.status_code,200) + self.assertTrue(topic.subject in unicontent(r)) + r = self.client.get(topic_url) + self.assertEqual(r.status_code,200) + r = self.client.post(topic_url, {'comments':'junk', 'confirmation':False}) + self.assertEqual(r.status_code,200) + self.assertEqual(topic.feedback_set.count(),1) + self.client.logout() diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index 428170503..b0b90f2db 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -426,6 +426,10 @@ def feedback(request, year, public): selected_topic = request.GET.get('topic') if selected_topic: topic = get_object_or_404(Topic,id=selected_topic) + if topic.audience_id == 'nomcom' and not nomcom.group.has_role(request.user, ['chair','advisor','liaison','member']): + raise Http404() + if topic.audience_id == 'nominee' and not nomcom.nominee_set.filter(person=request.user.person).exists(): + raise Http404() if public: positions = Position.objects.get_by_nomcom(nomcom=nomcom).filter(is_open=True,accepting_feedback=True) @@ -434,6 +438,12 @@ def feedback(request, year, public): positions = Position.objects.get_by_nomcom(nomcom=nomcom).filter(is_open=True) topics = Topic.objects.filter(nomcom=nomcom) + if not nomcom.group.has_role(request.user, ['chair','advisor','liaison','member']): + topics = topics.exclude(audience_id='nomcom') + if not nomcom.nominee_set.filter(person=request.user.person).exists(): + topics = topics.exclude(audience_id='nominee') + + user_comments = Feedback.objects.filter(nomcom=nomcom, type='comment', author__in=request.user.person.email_set.filter(active='True'))