@ -1,66 +1,62 @@
"""
Тесты .
"""
import random
from unittest . mock import patch , Mock
from django . contrib . auth import get_user_model
from django . contrib . auth . models import User
from django . core import mail
from django . http import HttpResponseRedirect
from django . template . loader import render_to_string
from django . test import TestCase , Client
from django . urls import reverse , reverse_lazy
from django . utils import translation
from django . utils import translation , timezone
import access_controller . settings as sets
from main . zendesk_admin import zenpy
from main . extra_func import log
class UsersBaseTestCase ( TestCase ) :
""" Базовый класс загружения данных для тестов с пользователями """
fixtures = [ ' fixtures/test_users.json ' ]
def setUp ( self ) :
""" Добавление в переменные почт и клиентов для пользователей """
self . light_agent = ' 123@test.ru '
self . admin = ' admin@gmail.com '
self . engineer = ' customer@example.com '
self . agent_client = Client ( )
self . agent_client . force_login ( User . objects . get ( email = self . light_agent ) )
self . admin_client = Client ( )
self . admin_client . force_login ( User . objects . get ( email = self . admin ) )
self . engineer_client = Client ( )
self . engineer_client . force_login ( User . objects . get ( email = self . engineer ) )
class RegistrationTestCase ( TestCase ) :
"""
Класс тестирования регистрации пользователя .
"""
fixtures = [ ' fixtures/data.json ' ]
def setUp ( self ) - > None :
"""
Функция предтестовых настроек .
"""
def setUp ( self ) :
self . email_backend = ' django.core.mail.backends.locmem.EmailBackend '
self . any_zendesk_user_email = ' idar.sokurov.05@mail.ru '
self . zendesk_admin_email = ' idar.sokurov.05@mail.ru '
self . client = Client ( )
def test_registration_complete_redirect ( self ) - > None :
"""
Функция тестирования успешно завершенной регистрации .
"""
def test_registration_complete_redirect ( self ) :
with self . settings ( EMAIL_BACKEND = self . email_backend ) :
resp = self . client . post ( reverse ( ' registration ' ) , data = { ' email ' : self . any_zendesk_user_email } )
self . assertRedirects ( resp , reverse ( ' password_reset_done ' ) )
def test_registration_fail_redirect ( self ) :
"""
Функция тестирования неуспешной регистрации .
"""
with self . settings ( EMAIL_BACKEND = self . email_backend ) :
resp = self . client . post ( reverse ( ' registration ' ) , data = { ' email ' : self . any_zendesk_user_email + ' asd ' } )
self . assertRedirects ( resp , reverse ( ' django_registration_disallowed ' ) )
def test_registration_user_already_exist ( self ) :
"""
Функция тестирования попытки регистрации уже зарегистрированного пользователя .
"""
with self . settings ( EMAIL_BACKEND = self . email_backend ) and translation . override ( ' ru ' ) :
resp = self . client . post ( reverse ( ' registration ' ) , data = { ' email ' : ' 123@test.ru ' } )
self . assertContains ( resp , ' Этот адрес электронной почты уже используется ' , count = 1 , status_code = 200 )
def test_registration_send_email ( self ) :
"""
Функция тестирования отправки email .
"""
with self . settings ( EMAIL_BACKEND = self . email_backend ) :
response : HttpResponseRedirect = \
self . client . post ( reverse ( ' registration ' ) , data = { ' email ' : self . any_zendesk_user_email } )
@ -76,90 +72,49 @@ class RegistrationTestCase(TestCase):
self . assertEqual ( mail . outbox [ 0 ] . body , correct_body )
def test_registration_user_creating ( self ) :
"""
Функция тестирования регистрации пользователя ( сверяем имя с именем в Zendesk .
"""
with self . settings ( EMAIL_BACKEND = self . email_backend ) :
self . client . post ( reverse ( ' registration ' ) , data = { ' email ' : self . any_zendesk_user_email } )
user = get_user_model( ) . objects . get ( email = self . any_zendesk_user_email )
user = User . objects . get ( email = self . any_zendesk_user_email )
zendesk_user = zenpy . get_user ( self . any_zendesk_user_email )
self . assertEqual ( user . userprofile . name , zendesk_user . name )
def test_permissions_applying ( self ) :
"""
Функция тестирования проверке присвоения роли admin .
"""
with self . settings ( EMAIL_BACKEND = self . email_backend ) :
self . client . post ( reverse ( ' registration ' ) , data = { ' email ' : self . zendesk_admin_email } )
user = get_user_model( ) . objects . get ( email = self . zendesk_admin_email )
user = User . objects . get ( email = self . zendesk_admin_email )
self . assertEqual ( user . userprofile . role , ' admin ' )
self . assertTrue ( user . has_perm ( ' main.has_control_access ' ) )
class MakeEngineerTestCase ( TestCase ) :
"""
Класс тестов для проверки функции назначения роли engineer .
"""
fixtures = [ ' fixtures/test_make_engineer.json ' ]
def setUp ( self ) :
"""
Предустановленные значения для проведения тестов .
"""
self . light_agent = ' 123@test.ru '
self . admin = ' admin@gmail.com '
self . engineer = ' customer@example.com '
self . client = Client ( )
self . client . force_login ( get_user_model ( ) . objects . get ( email = self . light_agent ) )
self . admin_client = Client ( )
self . admin_client . force_login ( get_user_model ( ) . objects . get ( email = self . admin ) )
class MakeEngineerTestCase ( UsersBaseTestCase ) :
@patch ( ' main.extra_func.zenpy ' )
def test_redirect ( self , zenpy_mock ) :
"""
Функция проверки переадресации пользователя на рабочую страницу после назначения роли engineer .
"""
user = get_user_model ( ) . objects . get ( email = self . light_agent )
resp = self . client . post ( reverse_lazy ( ' work_become_engineer ' ) )
def test_become_engineer_redirect ( self , _zenpy_mock ) :
user = User . objects . get ( email = self . light_agent )
resp = self . agent_client . post ( reverse_lazy ( ' work_become_engineer ' ) )
self . assertRedirects ( resp , reverse ( ' work ' , args = [ user . id ] ) )
self . assertEqual ( resp . status_code , 302 )
self . assertFalse ( zenpy_mock . called )
@patch ( ' main.extra_func.zenpy ' )
def test_light_agent_make_engineer ( self , zenpy_mock ) :
"""
Функция проверки назначения light_agent на роль engineer .
"""
self . client . post ( reverse_lazy ( ' work_become_engineer ' ) )
self . agent_client . post ( reverse_lazy ( ' work_become_engineer ' ) )
self . assertEqual ( zenpy_mock . update_user . call_args [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' engineer ' ] )
@patch ( ' main.extra_func.zenpy ' )
def test_admin_make_engineer ( self , zenpy_mock ) :
"""
Функция проверки назначения admin на роль engineer .
"""
self . admin_client . post ( reverse_lazy ( ' work_become_engineer ' ) )
self . assertEqual ( zenpy_mock . update_user . call_args [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' engineer ' ] )
@patch ( ' main.extra_func.zenpy ' )
def test_engineer_make_engineer ( self , zenpy_mock ) :
"""
Функция проверки назначения engineer на роль engineer .
"""
client = Client ( )
client . force_login ( get_user_model ( ) . objects . get ( email = self . engineer ) )
client . post ( reverse_lazy ( ' work_become_engineer ' ) )
self . engineer_client . post ( reverse_lazy ( ' work_become_engineer ' ) )
self . assertEqual ( zenpy_mock . update_user . call_args [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' engineer ' ] )
@patch ( ' main.extra_func.zenpy ' )
def test_control_page_make_one ( self , zenpy_mock ) :
"""
Функция проверки назначения администратором на роль engineer одного пользователя .
"""
def test_control_page_make_engineer_one ( self , zenpy_mock ) :
self . admin_client . post (
reverse_lazy ( ' control ' ) ,
data = { ' users ' : [ get_user_model ( ) . objects . get ( email = self . light_agent ) . userprofile . id ] ,
' engineer ' : ' engineer ' }
data = { ' users ' : [ User . objects . get ( email = self . light_agent ) . userprofile . id ] , ' engineer ' : ' engineer ' }
)
call_list = zenpy_mock . update_user . call_args_list
mock_object = call_list [ 0 ] [ 0 ] [ 0 ]
@ -167,16 +122,13 @@ class MakeEngineerTestCase(TestCase):
self . assertEqual ( mock_object . custom_role_id , sets . ZENDESK_ROLES [ ' engineer ' ] )
@patch ( ' main.extra_func.zenpy ' )
def test_control_page_make_many ( self , zenpy_mock ) :
"""
Функция проверки назначения администратором на роль engineer нескольких пользователей .
"""
def test_control_page_make_engineer_many ( self , zenpy_mock ) :
self . admin_client . post (
reverse_lazy ( ' control ' ) ,
data = {
' users ' : [
get_user_model( ) . objects . get ( email = self . light_agent ) . userprofile . id ,
get_user_model( ) . objects . get ( email = self . engineer ) . userprofile . id ,
User . objects . get ( email = self . light_agent ) . userprofile . id ,
User . objects . get ( email = self . engineer ) . userprofile . id ,
] ,
' engineer ' : ' engineer '
}
@ -188,40 +140,113 @@ class MakeEngineerTestCase(TestCase):
self . assertEqual ( obj [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' engineer ' ] )
class PasswordResetTestCase ( TestCase ) :
"""
Класс тестов с б р о с а пароля .
"""
fixtures = [ ' fixtures/test_make_engineer.json ' ]
class MakeLightAgentTestCase ( UsersBaseTestCase ) :
@patch ( ' main.requester.TicketListRequester.get_tickets_list_for_user ' , side_effect = [ [ ] ] )
@patch ( ' main.extra_func.zenpy ' )
def test_hand_over_redirect ( self , _zenpy_mock , _user_tickets_mock ) :
user = User . objects . get ( email = self . engineer )
resp = self . engineer_client . post ( reverse_lazy ( ' work_hand_over ' ) )
self . assertRedirects ( resp , reverse ( ' work ' , args = [ user . id ] ) )
self . assertEqual ( resp . status_code , 302 )
@patch ( ' main.requester.TicketListRequester.get_tickets_list_for_user ' , side_effect = [ [ ] ] )
@patch ( ' main.extra_func.zenpy ' )
def test_engineer_make_light_agent_no_tickets ( self , zenpy_mock , _user_tickets_mock ) :
self . engineer_client . post ( reverse_lazy ( ' work_hand_over ' ) )
self . assertEqual ( zenpy_mock . update_user . call_args [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' light_agent ' ] )
@patch ( ' main.requester.TicketListRequester.get_tickets_list_for_user ' , side_effect = [
[ Mock ( id = 1 , status = ' solved ' ) , Mock ( id = 2 , status = ' open ' ) , Mock ( id = 3 , status = ' open ' ) ]
] )
@patch ( ' main.extra_func.zenpy ' )
def test_engineer_make_light_agent_with_tickets ( self , zenpy_mock , _user_tickets_mock ) :
zenpy_mock . solved_tickets_user_id = Mock ( )
self . engineer_client . post ( reverse_lazy ( ' work_hand_over ' ) )
tickets_update = zenpy_mock . admin . tickets . update . call_args [ 0 ] [ 0 ]
self . assertEqual ( tickets_update [ 0 ] . assignee_id , zenpy_mock . solved_tickets_user_id )
self . assertIsNone ( tickets_update [ 1 ] . assignee )
self . assertIsNone ( tickets_update [ 2 ] . assignee )
self . assertEqual ( zenpy_mock . update_user . call_args [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' light_agent ' ] )
@patch ( ' main.requester.TicketListRequester.get_tickets_list_for_user ' , side_effect = [ [ ] ] )
@patch ( ' main.extra_func.zenpy ' )
def test_admin_make_light_agent_no_tickets ( self , zenpy_mock , _user_tickets_mock ) :
self . admin_client . post ( reverse_lazy ( ' work_hand_over ' ) )
self . assertEqual ( zenpy_mock . update_user . call_args [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' light_agent ' ] )
@patch ( ' main.requester.TicketListRequester.get_tickets_list_for_user ' , side_effect = [
[ Mock ( id = 1 , status = ' solved ' ) , Mock ( id = 2 , status = ' open ' ) , Mock ( id = 3 , status = ' open ' ) ]
] )
@patch ( ' main.extra_func.zenpy ' )
def test_admin_make_light_agent_with_tickets ( self , zenpy_mock , _user_tickets_mock ) :
zenpy_mock . solved_tickets_user_id = Mock ( )
self . admin_client . post ( reverse_lazy ( ' work_hand_over ' ) )
tickets_update = zenpy_mock . admin . tickets . update . call_args [ 0 ] [ 0 ]
self . assertEqual ( tickets_update [ 0 ] . assignee_id , zenpy_mock . solved_tickets_user_id )
self . assertIsNone ( tickets_update [ 1 ] . assignee )
self . assertIsNone ( tickets_update [ 2 ] . assignee )
self . assertEqual ( zenpy_mock . update_user . call_args [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' light_agent ' ] )
@patch ( ' main.requester.TicketListRequester.get_tickets_list_for_user ' , side_effect = [ [ ] ] )
@patch ( ' main.extra_func.zenpy ' )
def test_light_agent_make_light_agent ( self , zenpy_mock , _user_tickets_mock ) :
self . agent_client . post ( reverse_lazy ( ' work_hand_over ' ) )
self . assertEqual ( zenpy_mock . update_user . call_args [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' light_agent ' ] )
@patch ( ' main.requester.TicketListRequester.get_tickets_list_for_user ' , side_effect = [ [ ] ] )
@patch ( ' main.extra_func.zenpy ' )
def test_control_page_make_light_agent_one ( self , zenpy_mock , _user_tickets_mock ) :
self . admin_client . post (
reverse_lazy ( ' control ' ) ,
data = { ' users ' : [ User . objects . get ( email = self . engineer ) . userprofile . id ] , ' light_agent ' : ' light_agent ' }
)
call_list = zenpy_mock . update_user . call_args_list
mock_object = call_list [ 0 ] [ 0 ] [ 0 ]
self . assertEqual ( len ( call_list ) , 1 )
self . assertEqual ( mock_object . custom_role_id , sets . ZENDESK_ROLES [ ' light_agent ' ] )
@patch ( ' main.requester.TicketListRequester.get_tickets_list_for_user ' , side_effect = [ [ ] , [ ] ] )
@patch ( ' main.extra_func.zenpy ' )
def test_control_page_make_light_agent_many ( self , zenpy_mock , _user_tickets_mock ) :
self . admin_client . post (
reverse_lazy ( ' control ' ) ,
data = {
' users ' : [
User . objects . get ( email = self . light_agent ) . userprofile . id ,
User . objects . get ( email = self . engineer ) . userprofile . id ,
] ,
' light_agent ' : ' light_agent '
}
)
call_list = zenpy_mock . update_user . call_args_list
mock_objects = list ( call_list )
self . assertEqual ( len ( call_list ) , 2 )
for obj in mock_objects :
self . assertEqual ( obj [ 0 ] [ 0 ] . custom_role_id , sets . ZENDESK_ROLES [ ' light_agent ' ] )
class PasswordResetTestCase ( UsersBaseTestCase ) :
def setUp ( self ) :
"""
Предустановленные значения для проведения тестов .
"""
self . user = ' 123@test.ru '
super ( ) . setUp ( )
self . email_backend = ' django.core.mail.backends.locmem.EmailBackend '
self . client = Client ( )
self . client . force_login ( get_user_model ( ) . objects . get ( email = self . user ) )
def test_redirect ( self ) :
"""
Функция проверки переадресации на страницу уведомления о с б р о с е пароля на email .
"""
with self . settings ( EMAIL_BACKEND = self . email_backend ) :
resp = self . client . post ( reverse_lazy ( ' password_reset ' ) , data = { ' email ' : self . user } )
resp = self . agent_client . post ( reverse_lazy ( ' password_reset ' ) , data = { ' email ' : self . light_agent } )
self . assertRedirects ( resp , reverse ( ' password_reset_done ' ) )
self . assertEqual ( resp . status_code , 302 )
def test_send_email ( self ) :
"""
Функция проверки содержания и отправки письма для установки пароля .
"""
with self . settings ( EMAIL_BACKEND = self . email_backend ) :
response : HttpResponseRedirect = \
self . client . post ( reverse_lazy ( ' password_reset ' ) , data = { ' email ' : self . user } )
self . agent_client . post ( reverse_lazy ( ' password_reset ' ) , data = { ' email ' : self . light_agent } )
self . assertEqual ( response . status_code , 302 )
self . assertEqual ( len ( mail . outbox ) , 1 )
self . assertEqual ( mail . outbox [ 0 ] . to , [ self . user ] )
self . assertEqual ( mail . outbox [ 0 ] . to , [ self . light_agent ] )
# context that the email template was rendered with
email_context = response . context [ 0 ] . dicts [ 1 ]
@ -231,53 +256,32 @@ class PasswordResetTestCase(TestCase):
self . assertEqual ( mail . outbox [ 0 ] . body , correct_body )
def test_email_invalid ( self ) :
"""
Функция проверки уведомления клиента о некорректности введенного email .
"""
with self . settings ( EMAIL_BACKEND = self . email_backend ) and translation . override ( ' ru ' ) :
resp = self . client. post ( reverse_lazy ( ' password_reset ' ) , data = { ' email ' : 1 } )
resp = self . agent_client . post ( reverse_lazy ( ' password_reset ' ) , data = { ' email ' : 1 } )
self . assertContains ( resp , ' Введите правильный адрес электронной почты. ' , count = 1 , status_code = 200 )
def test_user_does_not_exist ( self ) :
"""
Функция корректности отработки неверно введенного email .
"""
with self . settings ( EMAIL_BACKEND = self . email_backend ) :
resp = self . client. post ( reverse_lazy ( ' password_reset ' ) , data = { ' email ' : self . user + str ( random . random ( ) ) } )
resp = self . agent_client . post ( reverse_lazy ( ' password_reset ' ) , data = { ' email ' : self . light_agent + str ( random . random ( ) ) } )
self . assertRedirects ( resp , reverse ( ' password_reset_done ' ) )
self . assertEqual ( resp . status_code , 302 )
self . assertEqual ( len ( mail . outbox ) , 0 )
class PasswordChangeTestCase ( TestCase ) :
"""
Класс тестирования смены пароля .
"""
fixtures = [ ' fixtures/test_make_engineer.json ' ]
class PasswordChangeTestCase ( UsersBaseTestCase ) :
def setUp ( self ) :
"""
Предустановленные значения для проведения тестов .
"""
self . user = ' 123@test.ru '
self . client = Client ( )
self . client . force_login ( get_user_model ( ) . objects . get ( email = self . user ) )
super ( ) . setUp ( )
self . set_password ( )
def set_password ( self ) :
"""
Пароль , сформированный для тестирования .
"""
user : get_user_model ( ) = get_user_model ( ) . objects . get ( email = self . user )
user : User = User . objects . get ( email = self . light_agent )
user . set_password ( ' ImpossiblyHardPassword ' )
user . save ( )
self . client. force_login ( get_user_model( ) . objects . get ( email = self . user ) )
self . agent_client . force_login ( User . objects . get ( email = self . light_agent ) )
def test_change_successful ( self ) :
"""
Функция тестирования успешного изменения пароля .
"""
self . client . post (
self . agent_client . post (
reverse_lazy ( ' password_change ' ) ,
data = {
' old_password ' : ' ImpossiblyHardPassword ' ,
@ -285,15 +289,12 @@ class PasswordChangeTestCase(TestCase):
' new_password2 ' : ' EasyPassword ' ,
}
)
user = get_user_model( ) . objects . get ( email = self . user )
user = User . objects . get ( email = self . light_agent )
self . assertTrue ( user . check_password ( ' EasyPassword ' ) )
def test_invalid_old_password ( self ) :
"""
Функция тестирования отработки неверно введенного старого пароля при смене .
"""
with translation . override ( ' ru ' ) :
resp = self . client. post (
resp = self . agent_client . post (
reverse_lazy ( ' password_change ' ) ,
data = {
' old_password ' : ' EasyPassword ' ,
@ -304,11 +305,8 @@ class PasswordChangeTestCase(TestCase):
self . assertContains ( resp , ' Ваш старый пароль введен неправильно ' , count = 1 , status_code = 200 )
def test_different_new_passwords ( self ) :
"""
Функция тестирования случая с вводом двух разных новых паролей .
"""
with translation . override ( ' ru ' ) :
resp = self . client. post (
resp = self . agent_client . post (
reverse_lazy ( ' password_change ' ) ,
data = {
' old_password ' : ' ImpossiblyHardPassword ' ,
@ -319,11 +317,8 @@ class PasswordChangeTestCase(TestCase):
self . assertContains ( resp , ' Введенные пароли не совпадают ' , count = 1 , status_code = 200 )
def test_invalid_new_password1 ( self ) :
"""
Функция тестирования случая с неправильно подобранным новым паролем ( слишком короткий ) .
"""
with translation . override ( ' ru ' ) :
resp = self . client. post (
resp = self . agent_client . post (
reverse_lazy ( ' password_change ' ) ,
data = {
' old_password ' : ' ImpossiblyHardPassword ' ,
@ -334,11 +329,8 @@ class PasswordChangeTestCase(TestCase):
self . assertContains ( resp , ' Введённый пароль слишком короткий ' , count = 1 , status_code = 200 )
def test_invalid_new_password2 ( self ) :
"""
Функция тестирования случая с неправильно подобранным новым паролем ( употребляются только цифры ) .
"""
with translation . override ( ' ru ' ) :
resp = self . client. post (
resp = self . agent_client . post (
reverse_lazy ( ' password_change ' ) ,
data = {
' old_password ' : ' ImpossiblyHardPassword ' ,
@ -349,72 +341,56 @@ class PasswordChangeTestCase(TestCase):
self . assertContains ( resp , ' Введённый пароль состоит только из цифр ' , count = 1 , status_code = 200 )
def test_invalid_new_password3 ( self ) :
"""
Функция тестирования случая с неправильно подобранным новым паролем ( совпадает с именем пользователя ) .
"""
with translation . override ( ' ru ' ) :
resp = self . client. post (
resp = self . agent_client . post (
reverse_lazy ( ' password_change ' ) ,
data = {
' old_password ' : ' ImpossiblyHardPassword ' ,
' new_password1 ' : self . user ,
' new_password2 ' : self . user ,
' new_password1 ' : self . light_agent ,
' new_password2 ' : self . light_agent ,
}
)
self . assertContains ( resp , ' Введённый пароль слишком похож на имя пользователя ' , count = 1 , status_code = 200 )
class GetTicketsTestCase ( TestCase) :
class GetTicketsTestCase ( UsersBase TestCase) :
"""
Класс тестов для проверки функции получения тикетов .
"""
fixtures = [ ' fixtures/test_make_engineer.json ' ]
def setUp ( self ) :
"""
Предустановленные значения для проведения тестов .
"""
self . light_agent = ' 123@test.ru '
self . engineer = ' customer@example.com '
self . client = Client ( )
self . client . force_login ( get_user_model ( ) . objects . get ( email = self . engineer ) )
self . light_agent_client = Client ( )
self . light_agent_client . force_login ( get_user_model ( ) . objects . get ( email = self . light_agent ) )
@patch ( ' main.views.zenpy.get_user ' )
@patch ( ' main.extra_func.zenpy ' )
def test_redirect ( self , zenpy_mock, get_user_mock ) :
def test_redirect ( self , _zenpy_mock , get_user_mock ) :
"""
Функция проверки переадресации пользователя на рабочую страницу .
"""
get_user_mock . return_value = Mock ( )
user = get_user_model( ) . objects . get ( email = self . engineer )
resp = self . client. post ( reverse ( ' work_get_tickets ' ) )
user = User . objects . get ( email = self . engineer )
resp = self . engineer_client . post ( reverse ( ' work_get_tickets ' ) )
self . assertRedirects ( resp , reverse ( ' work ' , args = [ user . id ] ) )
self . assertEqual ( resp . status_code , 302 )
self . assertFalse ( zenpy_mock . called )
@patch ( ' main.views.zenpy ' )
@patch ( ' main.views.get_tickets_list_for_group ' )
def test_take_one_ticket ( self , tickets_mock, zenpy _views _mock) :
def test_take_one_ticket ( self , group_ tickets_mock, zenpy _mock) :
"""
Функция проверки назначения одного тикета на engineer .
"""
tickets_mock. return_value = [ Mock ( ) ]
zenpy_ views_ mock. get_user . return_value = Mock ( role = ' agent ' , custom_role_id = sets . ZENDESK_ROLES [ ' engineer ' ] )
self . client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : 1 } )
tickets = zenpy_ views_ mock. update_tickets . call_args
self . assertEqual ( tickets [ 0 ] [ 0 ] [ 0 ] . assignee , zenpy_ views_ mock. get_user . return_value )
group_ tickets_mock. return_value = [ Mock ( ) ]
zenpy_ mock. get_user . return_value = Mock ( role = ' agent ' , custom_role_id = sets . ZENDESK_ROLES [ ' engineer ' ] )
self . engineer_ client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : 1 } )
tickets = zenpy_ mock. update_tickets . call_args
self . assertEqual ( tickets [ 0 ] [ 0 ] [ 0 ] . assignee , zenpy_ mock. get_user . return_value )
@patch ( ' main.views.get_tickets_list_for_group ' )
@patch ( ' main.views.zenpy ' )
def test_take_many_tickets ( self , zenpy_mock , tickets_mock) :
def test_take_many_tickets ( self , zenpy_mock , group_ tickets_mock) :
"""
Функция проверки назначения нескольких тикетов на engineer .
"""
tickets_mock. return_value = [ Mock ( ) ] * 3
group_ tickets_mock. return_value = [ Mock ( ) ] * 3
zenpy_mock . get_user . return_value = Mock ( role = ' agent ' , custom_role_id = sets . ZENDESK_ROLES [ ' engineer ' ] )
self . client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : 3 } )
self . engineer_ client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : 3 } )
tickets = zenpy_mock . update_tickets . call_args
for ticket in tickets [ 0 ] [ 0 ] :
self . assertEqual ( ticket . assignee , zenpy_mock . get_user . return_value )
@ -426,31 +402,31 @@ class GetTicketsTestCase(TestCase):
Функция проверки попытки назначения тикета на light_agent .
"""
get_user_mock . return_value = Mock ( role = ' agent ' , custom_role_id = sets . ZENDESK_ROLES [ ' light_agent ' ] )
self . light_ agent_client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : 3 } )
self . agent_client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : 3 } )
tickets = zenpy_mock . update_tickets . call_args
self . assertIsNone ( tickets )
@patch ( ' main.views.zenpy ' )
@patch ( ' main.views.get_tickets_list_for_group ' )
def test_take_zero_tickets ( self , tickets_m ock, zenpy_mock ) :
def test_take_zero_tickets ( self , TicketsM ock, zenpy_mock ) :
"""
Функция проверки попытки назначения нуля тикета на engineer .
"""
tickets_m ock. return_value = [ Mock ( ) ] * 3
TicketsM ock. return_value = [ Mock ( ) ] * 3
zenpy_mock . get_user . return_value = Mock ( role = ' agent ' , custom_role_id = sets . ZENDESK_ROLES [ ' engineer ' ] )
self . client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : 0 } )
self . engineer_ client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : 0 } )
tickets = zenpy_mock . update_tickets . call_args [ 0 ] [ 0 ]
self . assertListEqual ( tickets , [ ] )
@patch ( ' main.views.get_tickets_list_for_group ' )
@patch ( ' main.views.zenpy ' )
def test_take_invalid_count_tickets ( self , zenpy_mock , tickets_mock) :
def test_take_invalid_count_tickets ( self , zenpy_mock , group_ tickets_mock) :
"""
Функция проверки попытки назначения нуля тикетов на engineer .
"""
tickets_mock. return_value = [ Mock ( ) ] * 3
group_ tickets_mock. return_value = [ Mock ( ) ] * 3
zenpy_mock . get_user . return_value = Mock ( role = ' agent ' , custom_role_id = sets . ZENDESK_ROLES [ ' engineer ' ] )
self . client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : ' asd ' } )
self . engineer_ client. post ( reverse ( ' work_get_tickets ' ) , data = { ' count_tickets ' : ' asd ' } )
tickets = zenpy_mock . update_tickets . call_args
self . assertIsNone ( tickets )
@ -468,9 +444,9 @@ class ProfileTestCase(TestCase):
self . zendesk_agent_email = ' krav-88@mail.ru '
self . zendesk_admin_email = ' idar.sokurov.05@mail.ru '
self . client = Client ( )
self . client . force_login ( get_user_model( ) . objects . get ( email = self . zendesk_agent_email ) )
self . client . force_login ( User . objects . get ( email = self . zendesk_agent_email ) )
self . admin_client = Client ( )
self . admin_client . force_login ( get_user_model( ) . objects . get ( email = self . zendesk_admin_email ) )
self . admin_client . force_login ( User . objects . get ( email = self . zendesk_admin_email ) )
def test_correct_username ( self ) :
"""
@ -513,3 +489,43 @@ class ProfileTestCase(TestCase):
resp = self . client . get ( reverse ( ' profile ' ) )
user = zenpy . get_user ( self . zendesk_agent_email )
self . assertEqual ( resp . context [ ' profile ' ] . image , user . photo [ ' content_url ' ] if user . photo else None )
class LoggingTestCase ( UsersBaseTestCase ) :
def setUp ( self ) :
super ( ) . setUp ( )
self . admin_profile = User . objects . get ( email = self . admin ) . userprofile
self . agent_profile = User . objects . get ( email = self . light_agent ) . userprofile
self . engineer_profile = User . objects . get ( email = self . engineer ) . userprofile
@staticmethod
def get_file_output ( ) :
file = open ( ' logs/logs.csv ' , ' r ' )
file_output = file . readlines ( ) [ - 1 ]
file . close ( )
return file_output
def test_engineer_with_admin ( self ) :
log ( self . engineer_profile , self . admin_profile )
file_output = self . get_file_output ( )
self . assertEqual ( file_output , f ' UserForAccessTest,engineer, '
f ' { str ( timezone . now ( ) . today ( ) ) [ : 16 ] } ,ZendeskAdmin \n ' )
def test_engineer_without_admin ( self ) :
log ( self . engineer_profile )
file_output = self . get_file_output ( )
self . assertEqual ( file_output , f ' UserForAccessTest,engineer, '
f ' { str ( timezone . now ( ) . today ( ) ) [ : 16 ] } ,UserForAccessTest \n ' )
def test_light_agent_with_admin ( self ) :
log ( self . agent_profile , self . admin_profile )
file_output = self . get_file_output ( )
self . assertEqual ( file_output , f ' UserForAccessTest,light_agent, '
f ' { str ( timezone . now ( ) . today ( ) ) [ : 16 ] } ,ZendeskAdmin \n ' )
def test_light_agent_without_admin ( self ) :
log ( self . agent_profile )
file_output = self . get_file_output ( )
self . assertEqual ( file_output , f ' UserForAccessTest,light_agent, '
f ' { str ( timezone . now ( ) . today ( ) ) [ : 16 ] } ,UserForAccessTest \n ' )