Add tests docs: params for Mock

This commit is contained in:
Степаненко Ольга 2021-05-26 21:13:35 +03:00
parent fdc1f3b448
commit 22154ca7fc

View File

@ -7,7 +7,6 @@ import random
from unittest.mock import patch, Mock from unittest.mock import patch, Mock
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
# from django.contrib.auth.models import User
from django.core import mail from django.core import mail
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.template.loader import render_to_string from django.template.loader import render_to_string
@ -171,13 +170,15 @@ class MakeEngineerTestCase(UsersBaseTestCase):
""" """
Класс тестирования присвоения пользователю роли engineer. Класс тестирования присвоения пользователю роли engineer.
В тестах используется @patch('main.extra_func.zenpy') замещающий API Zendesk. В тестах используется @patch('main.extra_func.zenpy') Mock для работы с API Zendesk.
""" """
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_become_engineer_redirect(self, _zenpy_mock: zenpy) -> None: def test_become_engineer_redirect(self, _zenpy_mock: Mock) -> None:
""" """
Функция тестирования редиректа на рабочую страницу тестового пользователя при назначении его инженером. Функция тестирования редиректа на рабочую страницу тестового пользователя при назначении его инженером.
:param _zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
""" """
user = get_user_model().objects.get(email=self.light_agent) user = get_user_model().objects.get(email=self.light_agent)
resp = self.agent_client.post(reverse_lazy('work_become_engineer')) resp = self.agent_client.post(reverse_lazy('work_become_engineer'))
@ -185,41 +186,49 @@ class MakeEngineerTestCase(UsersBaseTestCase):
self.assertEqual(resp.status_code, 302) self.assertEqual(resp.status_code, 302)
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_light_agent_make_engineer(self, zenpy_mock: zenpy) -> None: def test_light_agent_make_engineer(self, zenpy_mock: Mock) -> None:
""" """
Функция тестирования назначения легкого агента на роль инженера. Функция тестирования назначения легкого агента на роль инженера.
Проверяет установку роли "engineer" в Zendesk. Проверяет установку роли "engineer" в Zendesk.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
""" """
self.agent_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']) self.assertEqual(zenpy_mock.update_user.call_args[0][0].custom_role_id, sets.ZENDESK_ROLES['engineer'])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_admin_make_engineer(self, zenpy_mock: zenpy) -> None: def test_admin_make_engineer(self, zenpy_mock: Mock) -> None:
""" """
Функция тестирования назначения администратора на роль инженера. Функция тестирования назначения администратора на роль инженера.
Проверяет установку роли "engineer" в Zendesk. Проверяет установку роли "engineer" в Zendesk.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
""" """
self.admin_client.post(reverse_lazy('work_become_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']) self.assertEqual(zenpy_mock.update_user.call_args[0][0].custom_role_id, sets.ZENDESK_ROLES['engineer'])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_engineer_make_engineer(self, zenpy_mock: zenpy) -> None: def test_engineer_make_engineer(self, zenpy_mock: Mock) -> None:
""" """
Функция тестирования назначения инженера на роль инженера. Функция тестирования назначения инженера на роль инженера.
Проверяет установку роли "engineer" в Zendesk. Проверяет установку роли "engineer" в Zendesk.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
""" """
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']) self.assertEqual(zenpy_mock.update_user.call_args[0][0].custom_role_id, sets.ZENDESK_ROLES['engineer'])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_control_page_make_engineer_one(self, zenpy_mock: zenpy) -> None: def test_control_page_make_engineer_one(self, zenpy_mock: Mock) -> None:
""" """
Функция тестирования назначения администратором одного инженера на странице "Управление". Функция тестирования назначения администратором одного инженера на странице "Управление".
Проверяет обновление администратором роли пользователя с light_agent на engineer. Проверяет обновление администратором роли пользователя с light_agent на engineer.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
""" """
self.admin_client.post( self.admin_client.post(
reverse_lazy('control'), reverse_lazy('control'),
@ -232,11 +241,13 @@ class MakeEngineerTestCase(UsersBaseTestCase):
self.assertEqual(mock_object.custom_role_id, sets.ZENDESK_ROLES['engineer']) self.assertEqual(mock_object.custom_role_id, sets.ZENDESK_ROLES['engineer'])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_control_page_make_engineer_many(self, zenpy_mock: zenpy) -> None: def test_control_page_make_engineer_many(self, zenpy_mock: Mock) -> None:
""" """
Функция тестирования назначения администратором нескольких инженеров на странице "Управление". Функция тестирования назначения администратором нескольких инженеров на странице "Управление".
Проверяет обновление администратором ролей двух пользователей с light_agent на engineer. Проверяет обновление администратором ролей двух пользователей с light_agent на engineer.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
""" """
self.admin_client.post( self.admin_client.post(
reverse_lazy('control'), reverse_lazy('control'),
@ -259,16 +270,19 @@ class MakeLightAgentTestCase(UsersBaseTestCase):
""" """
Класс тестирования присвоения пользователю роли light_agent. Класс тестирования присвоения пользователю роли light_agent.
В тестах используется @patch('main.extra_func.zenpy') замещающий API Zendesk, а также В тестах используется @patch('main.extra_func.zenpy') Mock для работы API Zendesk, а также
@patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]]), предоставляющий список @patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]]), предоставляющий пустой
тикетов. список в качестве списка тикетов пользователя.
""" """
@patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]]) @patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_hand_over_redirect(self, _zenpy_mock: zenpy, _user_tickets_mock: list) -> None: def test_hand_over_redirect(self, _zenpy_mock: Mock, _user_tickets_Mock: Mock) -> None:
""" """
Функция тестирования переадресации инженера на рабочую страницу, после сдачи прав. Функция тестирования переадресации инженера на рабочую страницу, после сдачи прав.
:param _zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param _user_tickets_Mock: Mock, заменяющий список тикетов пользователя на пустой список.
""" """
user = get_user_model().objects.get(email=self.engineer) user = get_user_model().objects.get(email=self.engineer)
resp = self.engineer_client.post(reverse_lazy('work_hand_over')) resp = self.engineer_client.post(reverse_lazy('work_hand_over'))
@ -277,11 +291,14 @@ class MakeLightAgentTestCase(UsersBaseTestCase):
@patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]]) @patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_engineer_make_light_agent_no_tickets(self, zenpy_mock: zenpy, _user_tickets_mock: list) -> None: def test_engineer_make_light_agent_no_tickets(self, zenpy_mock: Mock, _user_tickets_mock: Mock) -> None:
""" """
Функция тестирования назначения инженера легким агентом, в случае, когда у него в работе нет тикетов. Функция тестирования назначения инженера легким агентом, в случае, когда у него в работе нет тикетов.
Проверяет назначение роли light_agent в Zendesk. Проверяет назначение роли light_agent в Zendesk.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param _user_tickets_mock: Mock, заменяющий список тикетов пользователя на пустой список.
""" """
self.engineer_client.post(reverse_lazy('work_hand_over')) 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']) self.assertEqual(zenpy_mock.update_user.call_args[0][0].custom_role_id, sets.ZENDESK_ROLES['light_agent'])
@ -290,7 +307,7 @@ class MakeLightAgentTestCase(UsersBaseTestCase):
[Mock(id=1, status='solved'), Mock(id=2, status='open'), Mock(id=3, status='open')] [Mock(id=1, status='solved'), Mock(id=2, status='open'), Mock(id=3, status='open')]
]) ])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_engineer_make_light_agent_with_tickets(self, zenpy_mock: zenpy, _user_tickets_mock: list): def test_engineer_make_light_agent_with_tickets(self, zenpy_mock: Mock, _user_tickets_mock: Mock) -> None:
""" """
Функция тестирования назначения инженера легким агентом, в случае, когда у него в работе есть тикеты. Функция тестирования назначения инженера легким агентом, в случае, когда у него в работе есть тикеты.
@ -298,6 +315,9 @@ class MakeLightAgentTestCase(UsersBaseTestCase):
два в состоянии: открыт. два в состоянии: открыт.
Проверяет распределение тикетов (поместить в решенные или назначить нового ответственного), Проверяет распределение тикетов (поместить в решенные или назначить нового ответственного),
а также назначение роли light_agent в Zendesk. а также назначение роли light_agent в Zendesk.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param _user_tickets_mock: Mock, заменяющий список тикетов пользователя на пустой список.
""" """
zenpy_mock.solved_tickets_user_id = Mock() zenpy_mock.solved_tickets_user_id = Mock()
self.engineer_client.post(reverse_lazy('work_hand_over')) self.engineer_client.post(reverse_lazy('work_hand_over'))
@ -310,11 +330,14 @@ class MakeLightAgentTestCase(UsersBaseTestCase):
@patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]]) @patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_admin_make_light_agent_no_tickets(self, zenpy_mock: zenpy, _user_tickets_mock: list) -> None: def test_admin_make_light_agent_no_tickets(self, zenpy_mock: Mock, _user_tickets_mock: Mock) -> None:
""" """
Функция тестирования назначения администратора на роль легкого агента. Функция тестирования назначения администратора на роль легкого агента.
Проверяет назначение роли light_agent в Zendesk. Проверяет назначение роли light_agent в Zendesk.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param _user_tickets_mock: Mock, заменяющий список тикетов пользователя на пустой список.
""" """
self.admin_client.post(reverse_lazy('work_hand_over')) 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']) self.assertEqual(zenpy_mock.update_user.call_args[0][0].custom_role_id, sets.ZENDESK_ROLES['light_agent'])
@ -331,6 +354,9 @@ class MakeLightAgentTestCase(UsersBaseTestCase):
два в состоянии: открыт. два в состоянии: открыт.
Проверяет распределение тикетов (поместить в решенные или назначить нового ответственного), Проверяет распределение тикетов (поместить в решенные или назначить нового ответственного),
а также назначение роли light_agent в Zendesk. а также назначение роли light_agent в Zendesk.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param _user_tickets_mock: Mock, заменяющий список тикетов пользователя на пустой список.
""" """
zenpy_mock.solved_tickets_user_id = Mock() zenpy_mock.solved_tickets_user_id = Mock()
self.admin_client.post(reverse_lazy('work_hand_over')) self.admin_client.post(reverse_lazy('work_hand_over'))
@ -343,22 +369,28 @@ class MakeLightAgentTestCase(UsersBaseTestCase):
@patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]]) @patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_light_agent_make_light_agent(self, zenpy_mock: zenpy, _user_tickets_mock: list): def test_light_agent_make_light_agent(self, zenpy_mock: Mock, _user_tickets_mock: Mock) -> None:
""" """
Функция тестирования назначения легкого агента на роль легкого агента. Функция тестирования назначения легкого агента на роль легкого агента.
Проверяет назначение роли light_agent в Zendesk. Проверяет назначение роли light_agent в Zendesk.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param _user_tickets_mock: Mock, заменяющий список тикетов пользователя на пустой список.
""" """
self.agent_client.post(reverse_lazy('work_hand_over')) 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']) 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.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[]])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_control_page_make_light_agent_one(self, zenpy_mock: zenpy, _user_tickets_mock: list) -> None: def test_control_page_make_light_agent_one(self, zenpy_mock: Mock, _user_tickets_mock: Mock) -> None:
""" """
Функция тестирования назначения администратором одного легкого агента на странице "Управление". Функция тестирования назначения администратором одного легкого агента на странице "Управление".
Проверяет обновление администратором роли пользователя с engineer на light_agent. Проверяет обновление администратором роли пользователя с engineer на light_agent.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param _user_tickets_mock: Mock, заменяющий список тикетов пользователя на пустой список.
""" """
self.admin_client.post( self.admin_client.post(
reverse_lazy('control'), reverse_lazy('control'),
@ -372,11 +404,14 @@ class MakeLightAgentTestCase(UsersBaseTestCase):
@patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[], []]) @patch('main.requester.TicketListRequester.get_tickets_list_for_user', side_effect=[[], []])
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_control_page_make_light_agent_many(self, zenpy_mock: zenpy, _user_tickets_mock: list) -> None: def test_control_page_make_light_agent_many(self, zenpy_mock: Mock, _user_tickets_mock: Mock) -> None:
""" """
Функция тестирования назначения администратором нескольких легких агентов на странице "Управление". Функция тестирования назначения администратором нескольких легких агентов на странице "Управление".
Проверяет обновление администратором ролей двух пользователей с engineer на light_agent. Проверяет обновление администратором ролей двух пользователей с engineer на light_agent.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param _user_tickets_mock: Mock, заменяющий список тикетов пользователя на пустой список.
""" """
self.admin_client.post( self.admin_client.post(
@ -590,17 +625,21 @@ class GetTicketsTestCase(UsersBaseTestCase):
""" """
Класс тестов для проверки функции получения тикетов. Класс тестов для проверки функции получения тикетов.
В тестах используются @patch, замещающие работу с API Zendesk. В тестах используются @patch('main.views.zenpy.get_user') и @patch('main.views.zenpy.get_user')
для работы с API Zendesk.
""" """
@patch('main.views.zenpy.get_user') @patch('main.views.zenpy.get_user')
@patch('main.extra_func.zenpy') @patch('main.extra_func.zenpy')
def test_redirect(self, _zenpy_mock: zenpy, get_user_mock: get_user_model()) -> None: def test_redirect(self, _zenpy_mock: Mock, get_user_mock: Mock) -> None:
""" """
Функция проверки переадресации пользователя на рабочую страницу. Функция проверки переадресации пользователя на рабочую страницу.
Проверяет редирект на рабочую страницу, в случае, когда пользователь с правами инженера заполняет форму Проверяет редирект на рабочую страницу, в случае, когда пользователь с правами инженера заполняет форму
принятия тикетов в работу. принятия тикетов в работу.
:param _zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param get_user_mock: Mock объекта zenpy_user.
""" """
get_user_mock.return_value = Mock() get_user_mock.return_value = Mock()
user = get_user_model().objects.get(email=self.engineer) user = get_user_model().objects.get(email=self.engineer)
@ -610,12 +649,15 @@ class GetTicketsTestCase(UsersBaseTestCase):
@patch('main.views.zenpy') @patch('main.views.zenpy')
@patch('main.views.get_tickets_list_for_group') @patch('main.views.get_tickets_list_for_group')
def test_take_one_ticket(self, group_tickets_mock: list, zenpy_mock: zenpy) -> None: def test_take_one_ticket(self, group_tickets_mock: Mock, zenpy_mock: Mock) -> None:
""" """
Функция проверки назначения одного тикета на engineer. Функция проверки назначения одного тикета на engineer.
Проверяет соответствие ответственного за тикет объекта tickets и тестового клиента правами инженера, Проверяет соответствие ответственного за тикет объекта tickets и тестового клиента правами инженера,
направившего запрос на назначение одного тикета. направившего запрос на назначение одного тикета.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param group_tickets_mock: Mock списка не назначенных и нерешенных тикетов группы.
""" """
group_tickets_mock.return_value = [Mock()] group_tickets_mock.return_value = [Mock()]
zenpy_mock.get_user.return_value = Mock(role='agent', custom_role_id=sets.ZENDESK_ROLES['engineer']) zenpy_mock.get_user.return_value = Mock(role='agent', custom_role_id=sets.ZENDESK_ROLES['engineer'])
@ -625,12 +667,15 @@ class GetTicketsTestCase(UsersBaseTestCase):
@patch('main.views.get_tickets_list_for_group') @patch('main.views.get_tickets_list_for_group')
@patch('main.views.zenpy') @patch('main.views.zenpy')
def test_take_many_tickets(self, zenpy_mock: zenpy, group_tickets_mock: list) -> None: def test_take_many_tickets(self, zenpy_mock: Mock, group_tickets_mock: Mock) -> None:
""" """
Функция проверки назначения нескольких тикетов на engineer. Функция проверки назначения нескольких тикетов на engineer.
Проверяет соответствие ответственного за тикеты объекта tickets и тестового клиента правами инженера, Проверяет соответствие ответственного за тикеты объекта tickets и тестового клиента правами инженера,
направившего запрос на назначение трех тикетов. направившего запрос на назначение трех тикетов.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param group_tickets_mock: Mock списка не назначенных и нерешенных тикетов группы.
""" """
group_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']) zenpy_mock.get_user.return_value = Mock(role='agent', custom_role_id=sets.ZENDESK_ROLES['engineer'])
@ -641,9 +686,12 @@ class GetTicketsTestCase(UsersBaseTestCase):
@patch('main.views.zenpy.get_user') @patch('main.views.zenpy.get_user')
@patch('main.views.zenpy') @patch('main.views.zenpy')
def test_light_agent_take_ticket(self, zenpy_mock: zenpy, get_user_mock: get_user_model()): def test_light_agent_take_ticket(self, zenpy_mock: Mock, get_user_mock: Mock) -> None:
""" """
Функция проверки попытки назначения тикета на light_agent. Функция проверки попытки назначения тикета на light_agent.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param get_user_mock: Mock объекта zenpy_user.
""" """
get_user_mock.return_value = Mock(role='agent', custom_role_id=sets.ZENDESK_ROLES['light_agent']) get_user_mock.return_value = Mock(role='agent', custom_role_id=sets.ZENDESK_ROLES['light_agent'])
self.agent_client.post(reverse('work_get_tickets'), data={'count_tickets': 3}) self.agent_client.post(reverse('work_get_tickets'), data={'count_tickets': 3})
@ -652,11 +700,14 @@ class GetTicketsTestCase(UsersBaseTestCase):
@patch('main.views.zenpy') @patch('main.views.zenpy')
@patch('main.views.get_tickets_list_for_group') @patch('main.views.get_tickets_list_for_group')
def test_take_zero_tickets(self, tickets_mock: list, zenpy_mock: zenpy) -> None: def test_take_zero_tickets(self, tickets_mock: Mock, zenpy_mock: Mock) -> None:
""" """
Функция проверки попытки назначения нулевого количества тикетов. Функция проверки попытки назначения нулевого количества тикетов.
Проверяет, что список тикетов остался пустым. Проверяет, что список тикетов остался пустым.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param tickets_mock: Mock списка тикетов - возвращает пустой список.
""" """
tickets_mock.return_value = [Mock()] * 3 tickets_mock.return_value = [Mock()] * 3
zenpy_mock.get_user.return_value = Mock(role='agent', custom_role_id=sets.ZENDESK_ROLES['engineer']) zenpy_mock.get_user.return_value = Mock(role='agent', custom_role_id=sets.ZENDESK_ROLES['engineer'])
@ -666,12 +717,15 @@ class GetTicketsTestCase(UsersBaseTestCase):
@patch('main.views.get_tickets_list_for_group') @patch('main.views.get_tickets_list_for_group')
@patch('main.views.zenpy') @patch('main.views.zenpy')
def test_take_invalid_count_tickets(self, zenpy_mock: zenpy, group_tickets_mock: list) -> None: def test_take_invalid_count_tickets(self, zenpy_mock: Mock, group_tickets_mock: Mock) -> None:
""" """
Функция проверки попытки назначения некорректного количества тикетов (введении в форму назначения тикетов Функция проверки попытки назначения некорректного количества тикетов (введении в форму назначения тикетов
не числового значения, а строки). не числового значения, а строки).
Проверяет, отсутствие списка тикетов. Проверяет, отсутствие списка тикетов.
:param zenpy_mock: Mock объекта zenpy для функций, работающих с API Zendesk.
:param group_tickets_mock: Mock списка не назначенных и нерешенных тикетов группы.
""" """
group_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']) zenpy_mock.get_user.return_value = Mock(role='agent', custom_role_id=sets.ZENDESK_ROLES['engineer'])