Django Test User Login With Factory And setUpClass
Я пытаюсь протестировать вход пользователя с помощью setUpClass, но учетные данные сохраненного пользователя не принимаются (403) при аутентификации, хотя это работает, если я регистрирую пользователя вручную (но я хотел опустить это для всех функций, чтобы не делать этого, поэтому я искал setUpclass())
Я что-то упускаю? test_register() работает просто отлично.
class AuthenticationTest(APITestCase):
@classmethod
def setUpClass(cls):
super(AuthenticationTest, cls).setUpClass()
cls.user_object = UserFactory.build()
cls.user_saved = UserFactory.create()
cls.client = APIClient()
cls.base_url_login = reverse("api:login-list")
cls.base_url_register = reverse("api:register-list")
cls.base_url_logout = reverse("api:logout-list")
cls.base_url_check_session = reverse("api:check-session-list")
cls.faker_obj = Faker()
def test_register(self):
# Prepare data
signup_dict = {
'username': self.user_object.username,
'password': 'test_Pass',
'email': self.user_object.email,
}
# Make request
response = self.client.post(
self.base_url_register, signup_dict
)
# Check status response
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_data = response.json()
self.assertEqual(response_data["success"], True)
self.assertEqual(User.objects.count(), 2)
# Check database
new_user = User.objects.get(username=self.user_object.username)
self.assertEqual(
new_user.email,
self.user_object.email,
)
def test_login(self):
# Prepare Data
login_dict = {
'password': self.user_saved.password,
'email': self.user_saved.email,
}
# Make request
response = self.client.post(self.base_url_login, login_dict)
# Check status response
self.assertEqual(response.status_code, status.HTTP_200_OK)
response_data = response.json()
self.assertEqual(response_data["success"], True)
...
class UserFactory(django.DjangoModelFactory):
class Meta:
model = User
username = Faker("user_name")
email = Faker("email")
@post_generation
def password(self, create: bool, extracted: Sequence[Any], **kwargs):
password = (
extracted
if extracted
else FakerClass().password(
length=30,
special_chars=True,
digits=True,
upper_case=True,
lower_case=True,
)
)
self.set_password(password)