В основном я следовал инструкциям Mozilla: https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Testing#Views_that_are_restricted_to_logged_in_users
Чтобы получить здесь полную картину, вы можете увидеть соответствующие URL-адреса и просмотреть их в views.py и urls.py ниже:
path('contexts/', views.ContextListView.as_view(), name='contexts'),
class ContextListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
model = Context
paginate_by = 10
permission_required = 'catalog.view_context'
def get_queryset(self):
if self.request.user.is_staff:
queryset = Context.objects.all()
else:
user = self.request.user
queryset = Context.objects.filter(name=user)
return queryset
Я создал двух пользователей двумя разными способами, которые должны делать то же самое.
Один из способов закомментирован.
class ContextListViewTest(TestCase):
def setUp(self):
number_of_contexts = 25
number_of_extensions = 25
# test_user1 = User.objects.create_user(username='testuser1')
# test_user2 = User.objects.create_user(username='testuser2')
# test_user1.set_password('1X<ISRUkw+tuK')
# test_user2.set_password('2HJ1vRV0Z&3iD')
test_user1 = User.objects.create_user(username='testuser1', password='1X<ISRUkw+tuK')
test_user2 = User.objects.create_user(username='testuser2', password='2HJ1vRV0Z&3iD')
test_user1.save()
test_user2.save()
Хотя кажется, что простой тест входа в систему работает:
def test_login(self):
c = Client() # Login
login = c.login(username='testuser1', password='1X<ISRUkw+tuK')
self.assertTrue(login)
Тестирование определенных разрешений не требует:
def test_logged_in_uses_correct_template(self):
self.c = Client() # Login
self.user = User.objects.get(username="testuser1")
login = self.c.login(username='testuser1', password='1X<ISRUkw+tuK')
response = self.c.get(reverse('contexts'))
# Check for HTTPResponseForbidden
self.assertEqual(response.status_code, 403)
# Check for Permission the User don't have but need to display that view.
# self.assertFalse(self.user.has_perm('view_context', self.user.userprofile))
# self.assertFalse(self.user.has_perm('view_context', self.user.profile))
# self.assertFalse(self.user.has_perm('view_context', self.user))
# self.assertFalse(self.user.has_perm('view_context', self.user.user_permissions))
self.assertFalse(self.user.has_perm('view_context', self.user.user_permissions))
Тест self.assertEqual(response.status_code, 403)
будет пройден, потому что зарегистрированный пользователь не имеет разрешения catalog.view_context
После этого я хочу явно проверить, что у пользователя нет этого разрешения catalog.view_context
с self.assertFalse(self.user.has_perm('view_context', self.user.user_permissions))
, но я постоянно получаю такие ошибки, как bool/user object/ XYZ has no Attribute profile/userprofile/user/user_permissions
Я также изучил это: https://stackoverflow.com/a/10103291/4238752 и это https://stackoverflow.com/a/33294746/4238752 Но независимо от того, что я пытаюсь, он продолжает генерировать те же исключения и ошибки.