UpdateView form_valid не перенаправляет, как ожидалось - продолжает говорить form_valid?

У меня есть Django UpdateView, который я пытаюсь протестировать. UpdateView только принимает запросы на почту, обрабатывает форму и перенаправляет пользователя соответствующим образом в зависимости от того, как прошла отправка формы.

Тест не работает, но если я запускаю локальный сервер, он работает, как я и ожидал. Я не уверен, является ли это признаком того, что мой тест настроен неправильно - или тест раскрывает какую-то странную ошибку.

Мое представление выглядит следующим образом:

class TressleUpdateView(UpdateView):
    http_method_names = ["post"]
    form_class = TressleForm
    model = Tressle
    pk_url_kwarg = "tressle_id"
    raise_exception = True

    def form_valid(self, form):
        """
        This method is called when valid form data has been POSTed. We set the
        updated_by to the requestor to know who updated this.
        """
        # Ensure the tressle is at a point to be finalized
        # If not, add a message informing the user that the tressle is not
        # complete, and redirect to the summary detail page.
        if form.instance.progress() < 100:
            messages.error(
                self.request,
                _(
                    "The tressle is not complete. Please ensure that all "
                    "requirements have been met."
                ),
            )
            return redirect(
                reverse_lazy(
                    "myapp:tressle-detail",
                    kwargs={
                        "tressle_id": self.kwargs["tressle_id"],
                    },
                )
            )
        # Get the requestor Person object
        request_person = get_object_or_404(
            Person, id=self.request.user.person_id
        )
        # Set the updated_by user
        form.instance.updated_by = request_person
        messages.success(
            self.request,
            _("The tressle has been finalized and is no longer editable."),
        )
        return super().form_valid(form)

    def get_success_url(self, **kwargs):
        return reverse_lazy(
            "myapp:tressle-detail",
            kwargs={
                "tressle_id": self.kwargs["tressle_id"],
            },
        )

Мой тест выглядит следующим образом:

    def test_view_redirects_if_tressle_incomplete(self):
        """
        Test that the view redirects to the tressle detail page 
        with the appropriate message if the
        tressle is incomplete.
        """
        self.client.force_login(self.app_user)
        response = self.client.post(
            self.incomplete_tressle_update_url,
            data={
                "finalized": True,
                "rubric": self.incomplete_tressle.rubric.id,
            },
            follow=True,
        )
        messages = list(response.context["messages"])
        self.assertEqual(len(messages), 1)
        self.assertEqual(
            messages[0].message,
            "The tressle has been finalized and is no longer editable.",
        )
        
        self.assertRedirects(
            response,
            reverse_lazy(
                "myapp:tressle-detail",
                kwargs={
                    "tressle_id": self.tressle_person.id,
                },
            ),
        )

Обновляемый в тесте tressle имеет progress() значение 0.0 - и является "неполным", однако, когда тест выполняется, на выходе получается следующее:

AssertionError: 'The tressle is not complete. Please ensure that all r[22 chars]met.' != 'The tressle has been finalized and is no longer editable.'

Я зашел в отладчик в тесте и вижу, что он попадает на соответствующий редирект и получает сообщение об ошибке, но код не останавливается на этом и продолжает попадать на super().form_valid(form), но я не уверен почему.

Есть идеи?

Вернуться на верх