From 74603261952e0f5b150a58403a7929e7bea0694a Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Tue, 12 Nov 2019 16:48:37 +0000 Subject: [PATCH] avoid skipping the current report for data integrity reasons --- .../includes/report_line.html | 2 + hypha/apply/projects/tests/test_views.py | 50 ++++++++++++++++++- hypha/apply/projects/views/report.py | 4 +- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/hypha/apply/projects/templates/application_projects/includes/report_line.html b/hypha/apply/projects/templates/application_projects/includes/report_line.html index b1782b17e..433d7ad94 100644 --- a/hypha/apply/projects/templates/application_projects/includes/report_line.html +++ b/hypha/apply/projects/templates/application_projects/includes/report_line.html @@ -32,6 +32,7 @@ <p>You're skipping the report for <b>{{report.start_date}}</b> – <b>{{report.end_date}}</b></p> <p>This will result in a gap in reporting for the project. You can undo this at any time.</p> </div> + {% if not current %} <form action="{% url "apply:projects:reports:skip" pk=report.pk %}" method="post"> {% csrf_token %} <div class="modal__buttons"> @@ -39,6 +40,7 @@ <button data-fancybox-close class="button button--submit button--white">Cancel</button> </div> </form> + {% endif %} </div> {% endif %} diff --git a/hypha/apply/projects/tests/test_views.py b/hypha/apply/projects/tests/test_views.py index 7e5b1e8b9..c095677bc 100644 --- a/hypha/apply/projects/tests/test_views.py +++ b/hypha/apply/projects/tests/test_views.py @@ -1428,10 +1428,10 @@ class TestStaffReportDetail(BaseViewTestCase): response = self.get_page(report) self.assertEqual(response.status_code, 200) - def test_can_access_skipped_report(self): + def test_cant_access_skipped_report(self): report = ReportFactory(skipped=True) response = self.get_page(report) - self.assertEqual(response.status_code, 200) + self.assertEqual(response.status_code, 404) def test_cant_access_draft_report(self): report = ReportFactory(is_draft=True) @@ -1483,3 +1483,49 @@ class TestApplicantReportDetail(BaseViewTestCase): report = ReportFactory(end_date=timezone.now() + relativedelta(days=1)) response = self.get_page(report) self.assertEqual(response.status_code, 404) + + +class TestSkipReport(BaseViewTestCase): + base_view_name = 'skip' + url_name = 'funds:projects:reports:{}' + user_factory = StaffFactory + + def get_kwargs(self, instance): + return { + 'pk': instance.pk, + } + + def test_can_skip_report(self): + report = ReportFactory(past_due=True) + response = self.post_page(report) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertTrue(report.skipped) + + def test_can_unskip_report(self): + report = ReportFactory(skipped=True, past_due=True) + response = self.post_page(report) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertFalse(report.skipped) + + def test_cant_skip_current_report(self): + report = ReportFactory(end_date=timezone.now() + relativedelta(days=1)) + response = self.post_page(report) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertFalse(report.skipped) + + def test_cant_skip_submitted_report(self): + report = ReportFactory(is_submitted=True) + response = self.post_page(report, data={}) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertFalse(report.skipped) + + def test_can_skip_draft_report(self): + report = ReportFactory(is_draft=True, past_due=True) + response = self.post_page(report) + self.assertEqual(response.status_code, 200) + report.refresh_from_db() + self.assertTrue(report.skipped) diff --git a/hypha/apply/projects/views/report.py b/hypha/apply/projects/views/report.py index da0642443..ea23fc9e5 100644 --- a/hypha/apply/projects/views/report.py +++ b/hypha/apply/projects/views/report.py @@ -153,7 +153,9 @@ class ReportSkipView(SingleObjectMixin, View): def post(self, *args, **kwargs): report = self.get_object() - if not report.current: + unsubmitted = not report.current + not_current = report.project.report_config.current_due_report() != report + if unsubmitted and not_current: report.skipped = not report.skipped report.save() messenger( -- GitLab