Объект Pytest не обновляется в представлении обновления - PullRequest
1 голос
/ 07 мая 2019

Мой взгляд user_actions позволяет сделать пользователя неактивным. Вот как:

def user_update_details(request, username=None):
    user = get_object_or_404(User, username=username)
    if 'set_inactive' in request.POST:
        user.is_active = False
        user.save()
    return redirect(reverse('dashboard_staff:user_details',
                            kwargs={'username': username}))

Я довольно часто использую этот простой шаблон, и он отлично работает. Я хотел бы проверить это сейчас. Мой пользовательский тест создан следующим образом.

@pytest.fixture
def user(db) -> settings.AUTH_USER_MODEL:
    return UserFactory()

и заводской класс:


class UserFactory(DjangoModelFactory):

    username = Faker("user_name")
    email = Faker("email")
    first_name = Faker("first_name")
    last_name = Faker("last_name")

    @post_generation
    def password(self, create: bool, extracted: Sequence[Any], **kwargs):
        password = Faker(
            "password",
            length=42,
            special_chars=True,
            digits=True,
            upper_case=True,
            lower_case=True,
        ).generate(extra_kwargs={})
        self.set_password(password)

    class Meta:
        model = get_user_model()
        django_get_or_create = ["username"]

Вот тест, который не проходит:

class TestUserActions:
    url = "dashboard_staff:user_actions"

    def test_set_user_inactive(self, user):
        assert user.is_active
        url = reverse(self.url, kwargs={'username': user.username})
        resp = Client().post(url, data={'set_inactive': ''}, follow=True)
        assert resp.status_code == 200
        user.refresh_from_db()
        assert user.is_active is False

и исключение:

        assert customer_manager.is_active
E       assert False
E        +  where False = <Customer: Adrian Huynh>.is_active

1 Ответ

0 голосов
/ 07 мая 2019

Как сказано в комментарии, я нашел обходной путь.По неизвестной причине кажется, что представление не обновляет экземпляр, если мы используем параметр follow=True.Итак, чтобы проверить это:

class TestUserActions:
    url = "dashboard_staff:user_actions"

    def test_set_user_inactive(self, user):
        assert user.is_active
        url = reverse(self.url, kwargs={'username': user.username})
        resp = Client().post(url, data={'set_inactive': ''})
        assert resp.status_code == 302
        user.refresh_from_db()
        assert user.is_active is False

Вместо тестирования status_code == 200 я просто проверяю перенаправление и что экземпляр корректно обновляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...