From 2a622ef3262df07005dece190d46a0ba120c7b8d Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Thu, 21 Jun 2018 20:19:35 +0100 Subject: [PATCH] Add tests to remove the draft revision form the revision list --- opentech/apply/funds/differ.py | 5 ++++- .../templates/funds/revisions_compare.html | 5 +++-- opentech/apply/funds/tests/factories/models.py | 17 +++++++++++++---- opentech/apply/funds/tests/test_views.py | 18 ++++++++++++++++++ opentech/apply/funds/views.py | 15 +++++---------- 5 files changed, 43 insertions(+), 17 deletions(-) diff --git a/opentech/apply/funds/differ.py b/opentech/apply/funds/differ.py index cecc35bfe..7fe0f7ce9 100644 --- a/opentech/apply/funds/differ.py +++ b/opentech/apply/funds/differ.py @@ -74,6 +74,9 @@ def compare(answer_a, answer_b, should_bleach=True): if added: output.append(wrap_added(''.join(added))) - display = BeautifulSoup(''.join(output)).prettify() + display = ''.join(output) + + if not should_bleach: + display = BeautifulSoup(display, "html5lib").prettify() return mark_safe(display) diff --git a/opentech/apply/funds/templates/funds/revisions_compare.html b/opentech/apply/funds/templates/funds/revisions_compare.html index d7efe80ba..4bf8952b2 100644 --- a/opentech/apply/funds/templates/funds/revisions_compare.html +++ b/opentech/apply/funds/templates/funds/revisions_compare.html @@ -3,11 +3,12 @@ <div class="wrapper wrapper--breakout wrapper--admin"> <div class="wrapper wrapper--medium"> <h2 class="heading heading--no-margin">Comparing Revisions</h2> - <h5>For <a href="{% url "funds:submissions:detail" submission.id %}">{{ submission.title }}</a></h5> + <h5>For <a href="{% url "funds:submissions:detail" object.id %}">{{ object.title }}</a></h5> + <h5><a href="{% url "funds:submissions:revisions:list" object.id %}">Back to revisions</a></h5> </div> </div> <div class="wrapper wrapper--medium wrapper--tabs"> - {% include "funds/includes/rendered_answers.html" with object=diff %} + {% include "funds/includes/rendered_answers.html" %} </div> {% endblock %} diff --git a/opentech/apply/funds/tests/factories/models.py b/opentech/apply/funds/tests/factories/models.py index 5b4bf8599..ed198f6c0 100644 --- a/opentech/apply/funds/tests/factories/models.py +++ b/opentech/apply/funds/tests/factories/models.py @@ -102,8 +102,8 @@ class RoundFactory(wagtail_factories.PageFactory): model = Round title = factory.Sequence('Round {}'.format) - start_date = factory.Sequence(lambda n: datetime.date.today() + datetime.timedelta(days=n-1)) - end_date = factory.Sequence(lambda n: datetime.date.today() + datetime.timedelta(days=n)) + start_date = factory.LazyFunction(datetime.date.today) + end_date = factory.LazyFunction(lambda: datetime.date.today() + datetime.timedelta(days=7)) lead = factory.SubFactory(StaffFactory) @factory.post_generation @@ -118,6 +118,11 @@ class RoundFactory(wagtail_factories.PageFactory): ) +class TodayRoundFactory(RoundFactory): + start_date = factory.LazyFunction(datetime.date.today) + end_date = factory.LazyFunction(lambda: datetime.date.today() + datetime.timedelta(days=7)) + + class RoundFormFactory(AbstractRelatedFormFactory): class Meta: model = RoundForm @@ -189,7 +194,7 @@ class FormDataFactory(factory.Factory, metaclass=Metaclass): form_data[form_definition[name]] = answer if clean: - application = ApplicationSubmissionFactory() + application = ApplicationSubmissionFactory(round=Round.objects.first()) application.form_fields = form_fields application.form_data = form_data application.save() @@ -223,7 +228,11 @@ class ApplicationSubmissionFactory(factory.DjangoModelFactory): form_data = factory.SubFactory(FormDataFactory, form_fields=factory.SelfAttribute('..form_fields')) page = factory.SubFactory(FundTypeFactory) workflow_name = factory.LazyAttribute(lambda o: list(FundType.WORKFLOW_CHOICES.keys())[o.workflow_stages - 1]) - round = factory.SubFactory(RoundFactory, workflow_name=factory.SelfAttribute('..workflow_name'), lead=factory.SelfAttribute('..lead')) + round = factory.SubFactory( + RoundFactory, + workflow_name=factory.SelfAttribute('..workflow_name'), + lead=factory.SelfAttribute('..lead'), + ) user = factory.SubFactory(UserFactory) lead = factory.SubFactory(StaffFactory) live_revision = None diff --git a/opentech/apply/funds/tests/test_views.py b/opentech/apply/funds/tests/test_views.py index fe985c434..c746317a5 100644 --- a/opentech/apply/funds/tests/test_views.py +++ b/opentech/apply/funds/tests/test_views.py @@ -131,3 +131,21 @@ class TestRevisionsView(BaseSubmissionViewTestCase): self.assertEqual(submission.revisions.count(), 2) self.assertDictEqual(submission.draft_revision.form_data, submission.from_draft().form_data) self.assertDictEqual(submission.live_revision.form_data, old_data) + + +class TestRevisionList(BaseSubmissionViewTestCase): + base_view_name = 'revisions:list' + user_factory = StaffFactory + + def get_kwargs(self, instance): + return {'submission_pk': instance.pk} + + def test_list_doesnt_include_draft(self): + submission = ApplicationSubmissionFactory() + draft_revision = ApplicationRevisionFactory(submission=submission) + submission.draft_revision = draft_revision + submission.save() + + response = self.get_page(submission) + + self.assertNotIn(draft_revision, response.context['object_list']) diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py index fe01f4f21..42a9561a9 100644 --- a/opentech/apply/funds/views.py +++ b/opentech/apply/funds/views.py @@ -250,7 +250,7 @@ class RevisionListView(ListView): def get_queryset(self): self.submission = get_object_or_404(ApplicationSubmission, id=self.kwargs['submission_pk']) - self.queryset = self.model.objects.filter(submission=self.submission) + self.queryset = self.model.objects.filter(submission=self.submission).exclude(id=self.submission.draft_revision.id) return super().get_queryset() @@ -281,16 +281,11 @@ class RevisionCompareView(DetailView): compare(*fields, should_bleach=False) for fields in zip(from_fields, to_fields) ] - to_data.form_data = diffed_form_data - to_data.render_answers = mark_safe(''.join(diffed_answers)) - return to_data + self.object.form_data = diffed_form_data + self.object.render_answers = mark_safe(''.join(diffed_answers)) def get_context_data(self, **kwargs): from_revision = self.object.revisions.get(id=self.kwargs['from']) to_revision = self.object.revisions.get(id=self.kwargs['to']) - diff = self.compare_revisions(from_revision, to_revision) - return super().get_context_data( - submission=ApplicationSubmission.objects.get(id=self.kwargs['submission_pk']), - diff=diff, - **kwargs, - ) + self.object = self.compare_revisions(from_revision, to_revision) + return super().get_context_data(**kwargs) -- GitLab