diff --git a/opentech/apply/funds/differ.py b/opentech/apply/funds/differ.py index cecc35bfebefd4f3feb4bec960144bc9a07b1d7d..7fe0f7ce9b2e48b87f02b086f9627141616054ac 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 d7efe80ba9cb08684207f12422bfbe58b713f280..4bf8952b2f5bf8851ba8bec9bd3601c6f71e1996 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 5b4bf85990f6f02033c2a8be61ffab875d6ae217..ed198f6c05cd80b6150633d9393b8cf741f8eb2c 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 fe985c434ba7a8a2f7e2cde4fa983e712103dbfc..c746317a59ec03c254975e125afe7bbaa548e587 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 fe01f4f210673441cf53d893f866b2f16450655c..42a9561a9cf378e3b39d25b88437a87ef8217dbd 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)