Exemplo n.º 1
0
    async def test_respond_on_interactive_actions(self):
        """Test the respond method for interactive actions in Slack."""

        result = amock.Mock()
        result.json = amock.CoroutineMock()
        result.json.return_value = {"success": "payload sent."}

        payload = {
            "type": "message_action",
            "team": {"id": "TXXXXXX", "domain": "coverbands"},
            "user": {"id": "UXXXXXX", "name": "dreamweaver"},
            "response_url": "https://hooks.slack.com/app-actions/T0MJR11A4/21974584944/yk1S9ndf35Q1flupVG5JbpM6",
        }

        interactive_action = InteractiveAction(payload)
        with amock.patch("aiohttp.ClientSession.post") as patched_request:
            patched_request.return_value = asyncio.Future()
            patched_request.return_value.set_result(result)
            await interactive_action.respond("Respond called with response_url")
            self.assertTrue(patched_request.called)

        payload = {
            "type": "view_closed",
            "team": {"id": "TXXXXXX", "domain": "coverbands"},
            "user": {"id": "UXXXXXX", "name": "dreamweaver"},
        }

        interactive_action = InteractiveAction(payload)
        with amock.patch("aiohttp.ClientSession.post") as patched_request:
            patched_request.return_value = asyncio.Future()
            patched_request.return_value.set_result(result)
            await interactive_action.respond("Respond called without response_url")
            self.assertFalse(patched_request.called)

        with OpsDroid() as opsdroid:
            connector = ConnectorSlack({"token": "abc123"}, opsdroid=OpsDroid())
            raw_message = {
                "text": "Hello world",
                "user_id": "user_id",
                "user": "******",
                "room": "default",
            }
            message = Message(
                text="Hello world",
                user_id="user_id",
                user="******",
                target="default",
                connector=connector,
                raw_event=raw_message,
            )
            opsdroid.send = amock.CoroutineMock()

            with amock.patch("aiohttp.ClientSession.post") as patched_request:
                patched_request.return_value = asyncio.Future()
                patched_request.return_value.set_result(result)
                await interactive_action.respond(message)
                self.assertTrue(opsdroid.send.called)
                self.assertFalse(patched_request.called)
Exemplo n.º 2
0
async def test_respond_response_event_not_a_string(opsdroid, mock_api_obj, mock_api):
    await opsdroid.load(config=MINIMAL_CONFIG)
    async with running_opsdroid(opsdroid):
        action = InteractiveAction({"response_url": mock_api_obj.base_url})
        message = Message("this is a test response")
        response = await action.respond(message)
        assert response
Exemplo n.º 3
0
async def test_respond_response_text_content_type(mock_api_obj, mock_api):
    action = InteractiveAction({"response_url": mock_api_obj.base_url})
    response = await action.respond("this is a test response")
    assert response == "ok"
Exemplo n.º 4
0
async def test_respond_event_response_url_does_not_exist(mock_api_obj, mock_api):
    action = InteractiveAction({})
    response = await action.respond("this is a test response")
    assert response == {"error": "Response URL not available in payload."}
Exemplo n.º 5
0
async def test_respond_response_url_exists(mock_api_obj, mock_api):
    action = InteractiveAction({"response_url": mock_api_obj.base_url})
    response = await action.respond("this is a test response")
    assert response["ok"]