Der Login erfolgt über Token. Ein Test könnte so aussehen:
Code: Alles auswählen
class OrganizationCreateTests(TestCase):
def setUp(self):
password = "password123!"
email = "testmail@test.de"
self.user = get_user_model().objects.create_user(email=email, password=password)
def test_create(self):
c = Client()
c.force_login(self.user)
response = c.post(reverse(OrganizationCreateView.__name__),{'Test_attr':'Test'})
Ich habe auch schon versucht (da ich es ja so auch in Postman machen würde), den Token beim request mitzugeben, anstatt einen login zu forcieren (so erfolgt es ja in 'echt'):
Code: Alles auswählen
header = {'Authorization':f'Token {self.token}'}
response = self.client.post(reverse(OrganizationCreateView.__name__), header)
Die Fehlermeldung, wenn ich per
Code: Alles auswählen
py manage.py test
Es hängt also in meiner Permission fest, und zwar, weil ich nicht Authorisiert bin und dadurch der Request durch den AnonymousUser ausgeführt wird, der mein Attribut eben nicht kennt.Traceback (most recent call last):
File "C:\Users\Robin\dev\rechnuwo-projekt\rechnuwo_proj\rechnuwo\tests.py", line 123, in test_create2
response = c.post(reverse(OrganizationCreateView.__name__),{'organization_name':'TestOrgaName'})
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\django\test\client.py", line 751, in post
response = super().post(path, data=data, content_type=content_type, secure=secure, **extra)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\django\test\client.py", line 407, in post
return self.generic('POST', path, post_data, content_type,
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\django\test\client.py", line 473, in generic
return self.request(**r)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\django\test\client.py", line 719, in request
self.check_exception(response)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\django\test\client.py", line 580, in check_exception
raise exc_value
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\django\views\generic\base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\rest_framework\views.py", line 497, in dispatch
self.initial(request, *args, **kwargs)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\rest_framework\views.py", line 415, in initial self.check_permissions(request)
File "C:\Users\Robin\dev\rechnuwo-projekt\env-backend\lib\site-packages\rest_framework\views.py", line 332, in check_permissions
if not permission.has_permission(request, self):
File "C:\Users\Robin\dev\rechnuwo-projekt\rechnuwo_proj\rechnuwo\permissions.py", line 21, in has_permission
return request.user.organization is None
AttributeError: 'AnonymousUser' object has no attribute 'organization'
Ich habe schon einige Stunden verbracht und alles mögliche ausprobiert, bin aber leider nicht weitergekommen.
Noch relevant zu wissen: Ich habe ein CustomUserModel:
Code: Alles auswählen
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
organization = models.ForeignKey(Organization, on_delete=models.SET_NULL, related_name="staff", null=True, blank=True)
isOrganizationAdmin = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
def __str__(self):
return self.email