Тестирование метода класса с сессиями с помощью Mock в Django

Я новичок в тестировании Django и постепенно осваиваю Client() и запросы на основе RequestFactory, но я в полном тупике, как правильно протестировать следующий код.

(login is required through the OTPRequiredMixin)

class EmailVerificationCode(OTPRequiredMixin, FormView):

    def time_diff():
        # A simplification for the purpose of my question
        return True

    def check_code(self):
        try:
            if self.time_diff():
                if str(self.user_code) == str(self.code):
                    user_record = User.objects.get(pk=self.request.user.pk)
                    user_record.is_user_verified = True
                    user_record.save()

                    messages.success(self.request,
                                     _('Your email has been verified - thank you'
                                       ))
                    return redirect(reverse('account:user_profile'))

                else:
                    messages.error(self.request, mark_safe(_(
                        'Sorry, but your code did not match.'
                    )))
                    return redirect(reverse('account:verify_email_code'))

            else:
                messages.info(self.request,
                              mark_safe(_('Sorry, but your code has expired.<br>'
                              )))

                return redirect(reverse('account:verify_email'))

        except (AttributeError, ObjectDoesNotExist):
            messages.warning(self.request,
                             mark_safe(_('We are very sorry, but something went wrong.
                                         'Please try to login again'
                                         )))
            return redirect(reverse('two_factor:login'))

Вот что я пробовал до сих пор:

Я успешно поиздевался над тем, что "if time_diff()" возвращает False, вместе с возможностью тестирования перестановок пользовательского_кода/кода, используя что-то вроде:

    self.view = EmailVerificationCode()
    self.view.time_diff = Mock(return_value=False)
    self.view.user_code = '0000000000'
    self.view.code = '0000000000'
    self.view.check_code()

В этом месте я достиг уровня своей "некомпетентности", поскольку я не могу разработать, как проверить:

    user_record = User.objects.get(pk=self.request.user.pk)

Этот тест требует, чтобы я подражал переменной сессии для удовлетворения 'request.user.pk', а также подражал части 'User' в user_record.

Я пытался использовать Client() и RequestFactory(), но они вносят дополнительные сложности, так как в игру вступают другие методы класса (не показанные в моем примере), что еще больше запутывает дело (вход пользователя и т.д.) Мое ощущение, что этот метод лучше тестировать отдельно, а не как часть "целого" класса.

Итак, мои вопросы следующие:

  1. Как передать 'request.user.pk' через mock (сессию?)?
  2. Как мне подружить сторону 'User' запроса user_record?
  3. Есть ли лучший способ сделать это?

Заранее спасибо.

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