Exemple #1
0
class TestSendJiraIssueResponse(asynctest.TestCase):
    def setUp(self):
        patcher2 = patch(
            'charlesbot.slack.slack_connection.SlackConnection.api_call'
        )  # NOQA
        self.addCleanup(patcher2.stop)
        self.mock_api_call = patcher2.start()

        from charlesbot_jira.jira_helpers import send_jira_issue_response
        self.send_response = send_jira_issue_response

        from charlesbot.slack.slack_connection import SlackConnection
        self.slack_connection = SlackConnection()

    def tearDown(self):
        self.slack_connection._drop()

    def test_send_issue(self):
        issue = JiraIssue(key="JIRA-9",
                          summary="this is the problem",
                          description="detailed description here")
        expected_attachment = SlackAttachment(
            color="#A4ADAD",
            fallback="JIRA-9: this is the problem",
            text="detailed description here",
            mrkdwn_in=['text'],
            thumb_url=
            "https://slack.global.ssl.fastly.net/12d4/img/services/jira_48.png",  # NOQA
            title="JIRA-9: this is the problem",
            title_link="https://jira.atlassian.com/browse/JIRA-9")
        yield from self.send_response(self.slack_connection, "#work",
                                      "https://jira.atlassian.com", issue)
        expected_call = call(
            'chat.postMessage',
            channel="#work",
            attachments=expected_attachment,
            as_user=False,
            username="******",
            icon_url=
            "https://avatars.slack-edge.com/2015-07-31/8502215814_6662f69db3bed43d32e6_48.jpg"  # NOQA
        )
        self.assertEqual(self.mock_api_call.mock_calls, [expected_call])
class TestSlackConnectionApiCall(asynctest.TestCase):
    def setUp(self):
        self.channel_list_one = load_fixture("channel_list_one.json")
        self.channel_list_two = load_fixture("channel_list_two.json")
        self.channel_list_three = load_fixture("channel_list_three.json")
        self.channel_list_four = load_fixture("channel_list_four.json")

        from charlesbot.slack.slack_connection import SlackConnection

        self.slack = SlackConnection()
        self.slack.initialized = True
        self.slack.sc = MagicMock()

    def tearDown(self):
        self.slack._drop()

    def test_slack_rtm_api_call_ok(self):
        channel_list = self.channel_list_one.encode("utf8")
        self.slack.sc.api_call.return_value = channel_list
        val = yield from self.slack.api_call("fake_endpoint")
        self.assertEqual(json.loads(val), json.loads(channel_list.decode("utf-8")))

    def test_slack_rtm_api_call_not_ok(self):
        channel_list = self.channel_list_two.encode("utf8")
        self.slack.sc.api_call.return_value = channel_list
        val = yield from self.slack.api_call("fake_endpoint")
        self.assertEqual(json.loads(val), "{}")

    def test_slack_rtm_api_call_not_encoded_utf8(self):
        channel_list = self.channel_list_three
        self.slack.sc.api_call.return_value = channel_list
        with self.assertRaises(AttributeError):
            yield from self.slack.api_call("fake_endpoint")

    def test_slack_rtm_api_call_malformed_json(self):
        channel_list = self.channel_list_four.encode("utf8")
        self.slack.sc.api_call.return_value = channel_list
        with self.assertRaises(ValueError):
            yield from self.slack.api_call("fake_endpoint")
class TestSlackUser(asynctest.TestCase):
    def setUp(self):
        patcher1 = patch(
            'charlesbot.slack.slack_connection.SlackConnection.api_call'
        )  # NOQA
        self.addCleanup(patcher1.stop)
        self.mock_api_call = patcher1.start()

        from charlesbot.slack.slack_connection import SlackConnection
        self.slack_connection = SlackConnection()

        from charlesbot.slack.slack_user import SlackUser
        self.su = SlackUser()

    def tearDown(self):
        self.slack_connection._drop()

    @asynctest.ignore_loop
    def test_user_equality(self):
        from charlesbot.slack.slack_user import SlackUser
        user1 = SlackUser(id="SU01", name="userone", color="red")
        user2 = SlackUser(id="SU02", name="usertwo", color="blue")
        self.assertNotEqual(user1, user2)
        user2.id = "SU01"
        self.assertNotEqual(user1, user2)
        user2.name = "userone"
        self.assertNotEqual(user1, user2)
        user2.color = "red"
        self.assertEqual(user1, user2)

    @asynctest.ignore_loop
    def test_user_return_string(self):
        self.su.id = "SU01"
        self.su.name = "User One"
        self.su.deleted = False
        self.su.is_admin = False
        self.su.has_2fa = True
        user_json = json.loads(str(self.su))
        self.assertEqual(user_json.get('id'), "SU01")
        self.assertEqual(user_json.get('name'), "User One")
        self.assertEqual(user_json.get('deleted'), False)
        self.assertEqual(user_json.get('is_admin'), False)
        self.assertEqual(user_json.get('has_2fa'), True)
        self.assertEqual(user_json.get('is_owner'), "")

    def test_empty_slack_response(self):
        self.su.name = "suser"
        self.mock_api_call.side_effect = ["{}"]
        yield from self.su.retrieve_slack_user_info(self.slack_connection,
                                                    "fake123")
        expected_call = call("users.info", user="******")
        self.assertEqual(self.mock_api_call.mock_calls, [expected_call]),
        self.assertEqual(self.su.name, "suser")
        self.assertEqual(self.su.last_name, "")
        self.assertEqual(self.su.is_bot, "")

    def test_no_profile_key(self):
        self.su.name = "suser"
        user_info = {"ok": True, "user": {"id": "U023BECGF", "name": "bobby"}}
        self.mock_api_call.side_effect = [json.dumps(user_info)]
        yield from self.su.retrieve_slack_user_info(self.slack_connection,
                                                    "fake123")
        expected_call = call("users.info", user="******")
        self.assertEqual(self.mock_api_call.mock_calls, [expected_call]),
        self.assertEqual(self.su.name, "bobby")
        self.assertEqual(self.su.id, "U023BECGF")
        self.assertEqual(self.su.last_name, "")
        self.assertEqual(self.su.is_bot, "")

    def test_with_profile_key(self):
        self.su.name = "suser"
        user_info = {
            "ok": True,
            "user": {
                "id": "U023BECGF",
                "name": "bobby",
                "profile": {
                    "real_name": "Bobby Tables",
                    "image_24": "https://www.tables.com",
                }
            }
        }
        self.mock_api_call.side_effect = [json.dumps(user_info)]
        yield from self.su.retrieve_slack_user_info(self.slack_connection,
                                                    "fake123")
        expected_call = call("users.info", user="******")
        self.assertEqual(self.mock_api_call.mock_calls, [expected_call]),
        self.assertEqual(self.su.name, "bobby")
        self.assertEqual(self.su.id, "U023BECGF")
        self.assertEqual(self.su.real_name, "Bobby Tables")
        self.assertEqual(self.su.image_24, "https://www.tables.com")
        self.assertEqual(self.su.is_bot, "")
class TestSlackUser(asynctest.TestCase):

    def setUp(self):
        patcher1 = patch('charlesbot.slack.slack_connection.SlackConnection.api_call')  # NOQA
        self.addCleanup(patcher1.stop)
        self.mock_api_call = patcher1.start()

        from charlesbot.slack.slack_connection import SlackConnection
        self.slack_connection = SlackConnection()

        from charlesbot.slack.slack_user import SlackUser
        self.su = SlackUser()

    def tearDown(self):
        self.slack_connection._drop()

    @asynctest.ignore_loop
    def test_user_equality(self):
        from charlesbot.slack.slack_user import SlackUser
        user1 = SlackUser(id="SU01",
                          name="userone",
                          color="red")
        user2 = SlackUser(id="SU02",
                          name="usertwo",
                          color="blue")
        self.assertNotEqual(user1, user2)
        user2.id = "SU01"
        self.assertNotEqual(user1, user2)
        user2.name = "userone"
        self.assertNotEqual(user1, user2)
        user2.color = "red"
        self.assertEqual(user1, user2)

    @asynctest.ignore_loop
    def test_user_return_string(self):
        self.su.id = "SU01"
        self.su.name = "User One"
        self.su.deleted = False
        self.su.is_admin = False
        self.su.has_2fa = True
        user_json = json.loads(str(self.su))
        self.assertEqual(user_json.get('id'), "SU01")
        self.assertEqual(user_json.get('name'), "User One")
        self.assertEqual(user_json.get('deleted'), False)
        self.assertEqual(user_json.get('is_admin'), False)
        self.assertEqual(user_json.get('has_2fa'), True)
        self.assertEqual(user_json.get('is_owner'), "")

    def test_empty_slack_response(self):
        self.su.name = "suser"
        self.mock_api_call.side_effect = ["{}"]
        yield from self.su.retrieve_slack_user_info(self.slack_connection,
                                                    "fake123")
        expected_call = call("users.info", user="******")
        self.assertEqual(self.mock_api_call.mock_calls,
                         [expected_call]),
        self.assertEqual(self.su.name, "suser")
        self.assertEqual(self.su.last_name, "")
        self.assertEqual(self.su.is_bot, "")

    def test_no_profile_key(self):
        self.su.name = "suser"
        user_info = {
            "ok": True,
            "user": {
                "id": "U023BECGF",
                "name": "bobby"
            }
        }
        self.mock_api_call.side_effect = [json.dumps(user_info)]
        yield from self.su.retrieve_slack_user_info(self.slack_connection,
                                                    "fake123")
        expected_call = call("users.info", user="******")
        self.assertEqual(self.mock_api_call.mock_calls,
                         [expected_call]),
        self.assertEqual(self.su.name, "bobby")
        self.assertEqual(self.su.id, "U023BECGF")
        self.assertEqual(self.su.last_name, "")
        self.assertEqual(self.su.is_bot, "")

    def test_with_profile_key(self):
        self.su.name = "suser"
        user_info = {
            "ok": True,
            "user": {
                "id": "U023BECGF",
                "name": "bobby",
                "profile": {
                    "real_name": "Bobby Tables",
                    "image_24": "https://www.tables.com",
                }
            }
        }
        self.mock_api_call.side_effect = [json.dumps(user_info)]
        yield from self.su.retrieve_slack_user_info(self.slack_connection,
                                                    "fake123")
        expected_call = call("users.info", user="******")
        self.assertEqual(self.mock_api_call.mock_calls,
                         [expected_call]),
        self.assertEqual(self.su.name, "bobby")
        self.assertEqual(self.su.id, "U023BECGF")
        self.assertEqual(self.su.real_name, "Bobby Tables")
        self.assertEqual(self.su.image_24, "https://www.tables.com")
        self.assertEqual(self.su.is_bot, "")