Разработка тестового примера для проверки вошедшего в систему пользователя перенаправляется в различные представления в зависимости от состояния персонала - PullRequest
0 голосов
/ 24 декабря 2018

Я тестирую приложение библиотеки Django для двух типов пользователей: клиентов и сотрудников библиотеки.

Это urls.py

path('dashboard_customer/', views.LoanedBooksByUserListView.as_view(), name='dashboard_customer'),
path('dashboard_staff/', views.LoanedBooksAllListView.as_view(), name='dashboard_staff'),

В моем views.py это представление на основе классов для входа в систему, в котором, если вошедший в систему пользователь является клиентом, то при успешном входе в систему клиент перенаправляется на dashboard_customer, если вошедший в систему пользователь является сотрудником библиотеки, а затемdashboard_staff.

class CustomerLoginView(View):
  def post(self, request):
    username_r = request.POST['customer_username']
    password_r = request.POST['customer_password']

    user = authenticate(request, username=username_r, password=password_r)

    if user is not None:
        # how to write test case to check the below LOC
        login(request, user)
        if user.is_staff:
            return HttpResponseRedirect(reverse('dashboard_staff', args=[]))
        else:
            return HttpResponseRedirect(reverse('dashboard_customer', args=[]))
    else:
        return HttpResponseRedirect(reverse('customer_login'))

  def get(self, request):
    return render(request, 'catalog/customer_login.html')

Это тестовый пример для регистрации пользователя (как клиента, так и сотрудников библиотеки):

class CustomerLoginTestCase(TestCase):
"""
        Test case for User Log in
"""

def test_login_view_get(self):
    # get request

    response = self.client.get(reverse('customer_login'))
    self.assertEqual(response.status_code, 200)
    self.assertTemplateUsed(response, 'catalog/customer_login.html')

def test_login_view_post_success(self): 
    # post request
    data = {
        'customer_username': 'testuser1',
        'customer_password': '1X<ISRUkw+tuK',
    }
    response = self.client.post(reverse('customer_login'), data)
    self.assertEqual(response.status_code, 302)

    """
        how to check on successful login, the user is redirected to 
        the appropriate dashboard(dashboard_customer/dashboard_staff) based on if user.is_staff or not?
   """  

Как разработать тестовый пример дляпроверяя, что при успешном входе в систему пользователь перенаправляется на 'dashboard_customer', если не user.is_staff, в противном случае, если вошедший в систему пользователь является сотрудником библиотеки, затем перенаправьте на 'dashboard_staff'

Я полный новичок в разработкеконтрольные примеры.

1 Ответ

0 голосов
/ 24 декабря 2018

Вы можете использовать follow=True в своем сообщении / запросе на получение.Он будет следовать перенаправлениям, и в конце вы сможете проверить шаблоны, используемые в различных представлениях.

Пример:

GET: response = self.client.get(reverse('customer_login'),follow=True)

POST: response = self.client.post(reverse('customer_login'), data,follow=True)

Вы также можете сделать следующее в своем тестовом примере, чтобы проверить перенаправленную страницу.

self.assertRedirects(response,reverse('your_redirect_url'),status_code=302,target_status_code=200)
...