Мой взгляд 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