|
| 1 | +from testfixtures import LogCapture |
| 2 | +import unittest |
| 3 | +import mock |
| 4 | +import logging |
| 5 | + |
| 6 | +from src import app |
| 7 | +from .test_data import * |
| 8 | + |
| 9 | + |
| 10 | +class EventHandlerTestCase(unittest.TestCase): |
| 11 | + |
| 12 | + @mock.patch('src.app.new_member') |
| 13 | + def test_event_handler_receives_team_join_calls_new_member(self, mock_new_member): |
| 14 | + """ |
| 15 | + Asserts event_handler correctly passes the event to the new_member function |
| 16 | + when event type is 'team_join' |
| 17 | + """ |
| 18 | + app.event_handler(NEW_MEMBER) |
| 19 | + mock_new_member.assert_called_with(NEW_MEMBER) |
| 20 | + |
| 21 | + def test_event_handler_message_event_logs_event(self): |
| 22 | + """ |
| 23 | + Asserts event handler correctly logs message events. |
| 24 | + Will be removed eventually... |
| 25 | + """ |
| 26 | + with LogCapture() as capture: |
| 27 | + app.event_handler(MESSAGE_EVENT) |
| 28 | + capture.check(('src.app', 'INFO', 'Message event')) |
| 29 | + |
| 30 | + |
| 31 | +@mock.patch('src.app.slack_client') |
| 32 | +class UserNameTestCase(unittest.TestCase): |
| 33 | + |
| 34 | + def test_user_name_from_id_has_real_name(self, mock_client): |
| 35 | + """ |
| 36 | + Asserts the user_name_from_id method returns the user's real name |
| 37 | + when it is present. |
| 38 | + """ |
| 39 | + mock_client.api_call.return_value = USER_INFO_HAS_REAL_NAME |
| 40 | + real_name = app.user_name_from_id(USER_INFO_HAS_REAL_NAME['user']['id']) |
| 41 | + self.assertEquals(real_name, 'Episod') |
| 42 | + |
| 43 | + def test_user_name_from_id_real_name_blank_returns_name(self, mock_client): |
| 44 | + """ |
| 45 | + Asserts the user_name_from_id method returns the user's name |
| 46 | + when their real name is absent but the username is present |
| 47 | + """ |
| 48 | + mock_client.api_call.return_value = USER_INFO_HAS_NAME |
| 49 | + name = app.user_name_from_id(USER_INFO_HAS_NAME['user']['id']) |
| 50 | + self.assertEquals(name, 'Spengler') |
| 51 | + |
| 52 | + def test_user_name_from_id_no_name_return_new_member(self, mock_client): |
| 53 | + """ |
| 54 | + Asserts the user_name_from_id method defaults to returning New Member |
| 55 | + when both real name and name are absent |
| 56 | + """ |
| 57 | + mock_client.api_call.return_value = USER_INFO_NO_NAME |
| 58 | + name = app.user_name_from_id(USER_INFO_NO_NAME['user']['id']) |
| 59 | + self.assertEquals(name, 'New Member') |
| 60 | + |
| 61 | + |
| 62 | +@mock.patch('src.app.user_name_from_id', return_value='bob') |
| 63 | +@mock.patch('src.app.build_message', return_value=MESSAGE) |
| 64 | +class NewMemberTestCase(unittest.TestCase): |
| 65 | + |
| 66 | + @mock.patch('src.app.slack_client.api_call', return_value={'ok': 'true', 'info': 'stuff goes here'}) |
| 67 | + def test_event_logged(self, mock_client, mock_builder, mock_username_from_id): |
| 68 | + """ |
| 69 | + Asserts messages are being logged properly when new_member is called |
| 70 | + """ |
| 71 | + with LogCapture() as capture: |
| 72 | + app.new_member(NEW_MEMBER) |
| 73 | + capture.check( |
| 74 | + ('src.app.new_member', 'INFO', 'Recieved json event: {}'.format(NEW_MEMBER)), |
| 75 | + ('root', 'INFO', 'team_join message'), |
| 76 | + ('src.app.new_member', 'INFO', 'Built message: {}'.format(NEW_MEMBER)), |
| 77 | + ('src.app.new_member', 'INFO', |
| 78 | + 'New Member Slack response: {}'.format({'ok': 'true', 'info': 'stuff goes here'})) |
| 79 | + ) |
| 80 | + |
| 81 | + @mock.patch('src.app.slack_client') |
| 82 | + def test_slack_client_called_with_correct_params(self, mock_client, mock_builder, mock_unfi): |
| 83 | + """ |
| 84 | + Asserts new_member calls the client api with correct params. |
| 85 | + """ |
| 86 | + app.new_member(NEW_MEMBER) |
| 87 | + mock_client.api_call.assert_called_with('chat.postMessage', |
| 88 | + channel=NEW_MEMBER['user']['id'], |
| 89 | + text=MESSAGE, as_user=True) |
| 90 | + |
| 91 | + # |
| 92 | + @mock.patch('src.app.slack_client.api_call', return_value={'ok': 'false', 'info': 'stuff goes here'}) |
| 93 | + def test_slack_client_returns_error(self, mock_builder, mock_unfi, mock_client): |
| 94 | + """ |
| 95 | + Asserts an ERROR is logged when messaging a new member fails |
| 96 | + """ |
| 97 | + with LogCapture(level=logging.ERROR) as capture: |
| 98 | + app.new_member(USER_INFO_HAS_REAL_NAME) |
| 99 | + capture.check( |
| 100 | + ('src.app.new_member', 'ERROR', |
| 101 | + "FAILED -- Message to new member returned error: {'ok': 'false', 'info': 'stuff goes here'}")) |
| 102 | + |
| 103 | + |
| 104 | +class BuildMessageTestCase(unittest.TestCase): |
| 105 | + |
| 106 | + def test_build_message(self): |
| 107 | + """ |
| 108 | + Asserts build_message function correctly formats message. |
| 109 | + """ |
| 110 | + message = app.build_message(MESSAGE, real_name='Bob') |
| 111 | + self.assertEquals(message, MESSAGE.format(real_name='Bob')) |
0 commit comments