У меня есть функция, которая обрабатывает определенное событие бота из Slack.Вообще говоря, пользователь нажимает кнопку, а затем мой сервер получает и обрабатывает полезную нагрузку этой кнопки.
Вопрос в том, как ее проверить?Нужно ли имитировать make_admin
и build_admins_message
и проверять, вызваны ли они, или мне нужно тестировать реальные реализации?Например, я могу извлечь пользователя из базы данных и убедиться, что он действительно является администратором, а также проверить, что build_admins_message возвращает словарь, который я ожидаю получить.
@slack_interactions.on('admin_add')
def handle_admin_add(payload):
team_id = payload['team']['id']
user_id = payload['user']['id']
action_value = payload['actions'][0]['selected_options'][0]['value']
user = SlackUser.objects.find_by_ids(team_id, action_value)
if user and not user.is_bot:
user.make_admin()
return build_admins_message(team_id, user_id)
В настоящее время мои тесты выглядят так:
class TestAdminAddHandler(TestCase):
def setUp(self):
team = SlackTeam.objects.create(team_id='TEAMID')
SlackUser.objects.create(team=team, user_id='USERID')
SlackUser.objects.create(team=team, user_id='BOTID', is_bot=True)
SlackUser.objects.create(
team=team, user_id='ADMINID', is_bot_admin=True)
def tearDown(self):
SlackUser.objects.all().delete()
SlackTeam.objects.all().delete()
def test_wrong_callback(self):
payload = {'callback_id': 'wrong_callback'}
message = handle_admin_add(payload)
self.assertIsNone(message)
def test_has_no_user(self):
payload = {
'callback_id': 'admin_add',
'team': {'id': 'TEAMID'},
'user': {'id': 'ADMINID'},
'actions': [{
'selected_options': [{'value': 'BADID'}]
}]
}
message = handle_admin_add(payload)
user = SlackUser.objects.get(user_id='USERID')
self.assertFalse(user.is_bot_admin)
for att in message['attachments']:
self.assertNotIn('BADID', att.get('title', ''))
def test_user_is_bot(self):
payload = {
'callback_id': 'admin_add',
'team': {'id': 'TEAMID'},
'user': {'id': 'ADMINID'},
'actions': [{
'selected_options': [{'value': 'BOTID'}]
}]
}
message = handle_admin_add(payload)
user = SlackUser.objects.get(user_id='BOTID')
self.assertFalse(user.is_bot_admin)
for att in message['attachments']:
self.assertNotIn('BOTID', att.get('title', ''))
def test_add_admin(self):
payload = {
'callback_id': 'admin_add',
'team': {'id': 'TEAMID'},
'user': {'id': 'ADMINID'},
'actions': [{
'selected_options': [{'value': 'USERID'}]
}]
}
message = handle_admin_add(payload)
user = SlackUser.objects.filter(user_id='USERID').first()
self.assertTrue(user.is_bot_admin)
user_in_list = False
for att in message['attachments']:
if 'USERID' in att.get('title', ''):
user_in_list = True
self.assertTrue(user_in_list)