async def test_send_reaction(self): message = events.Message( "hello", event_id="$11111", connector=self.connector, target="!test:localhost", ) reaction = events.Reaction("⭕") with OpsDroid() as _: with amock.patch( api_string.format("send_message_event")) as patched_send: patched_send.return_value = asyncio.Future() patched_send.return_value.set_result(None) await message.respond(reaction) content = { "m.relates_to": { "rel_type": "m.annotation", "event_id": "$11111", "key": reaction.emoji, } } assert patched_send.called_once_with("!test:localhost", "m.reaction", content)
async def twim_bot(opsdroid, config, message): """ React to a TWIM post. Check the contents of the message then put it in the opsdroid memory. """ if isinstance(message, events.EditedMessage): return # If the message starts with TWIM and it's a reply then we use the parent event. if isinstance(message, events.Reply): message = message.linked_event post = await process_twim_event(opsdroid, message.target, message) _LOGGER.debug(f"Processed TWIM event, got: {post}") content = list(post.values())[0] nick = content['nick'] try: await message.respond( events.Reaction(MAGIC_EMOJI + VARIATION_SELECTOR_16)) except MatrixException: _LOGGER.error("Failed to react to submission with magic emoji.") pass # Send the update to the echo room. if "echo" in message.connector.rooms: echo_event_id = await message.respond( events.Message(format_update(post), target="echo")) echo_event_id = echo_event_id.event_id content['echo_event_id'] = echo_event_id await add_post_to_memory(opsdroid, message.target, post)
async def test_send_reaction_invalid_name(send_event): message = events.Message( text="linked text", target="room", event_id="1582838099.000601", raw_event={"ts": 0}, ) event = events.Reaction("NOT_EMOJI", target=message.target, linked_event=message) await send_event(("/reactions.add",), event)
async def test_send_reaction_unknown_error(send_event): message = events.Message( text="linked text", target="room", event_id="1582838099.000601", raw_event={"ts": 0}, ) event = events.Reaction("NOT_EMOJI", target=message.target, linked_event=message) with pytest.raises(SlackApiError): _, response = await send_event(("/reactions.add",), event) assert not response["ok"]
async def test_react(self): with OpsDroid() as opsdroid: mock_connector = Connector( {"name": "shell", "thinking-delay": 2, "type": "connector"}, opsdroid=opsdroid, ) with amock.patch("asyncio.sleep") as mocksleep: message = events.Message( "Hello world", "user", "default", mock_connector ) with self.assertRaises(TypeError): await message.respond(events.Reaction("emoji")) self.assertTrue(mocksleep.called)
async def test_react_unknown_error(self): connector = ConnectorSlack({"token": "abc123"}, opsdroid=self.od) connector.slack.api_call = amock.CoroutineMock( side_effect=slack.errors.SlackApiError("unknown", "unknown")) with self.assertRaises(slack.errors.SlackApiError): prev_message = events.Message( text="test", user="******", target="room", connector=connector, raw_event={"ts": 0}, ) await prev_message.respond(events.Reaction("😀"))
async def test_react(self): connector = ConnectorSlack({"token": "abc123"}, opsdroid=self.od) connector.slack.api_call = amock.CoroutineMock() prev_message = events.Message( text="test", user="******", target="room", connector=connector, raw_event={"ts": 0}, ) await prev_message.respond(events.Reaction("😀")) self.assertTrue(connector.slack.api_call) self.assertEqual(connector.slack.api_call.call_args[1]["data"]["name"], "grinning_face")
async def create_reaction(self, event, roomid): """Send a Reaction event.""" parent_event_id = event["content"]["m.relates_to"]["event_id"] parent_event = await self.create_event_from_eventid(parent_event_id, roomid) return events.Reaction( emoji=event["content"]["m.relates_to"]["key"], user=await self.connector.get_nick(roomid, event["sender"]), user_id=event["sender"], target=roomid, connector=self.connector, event_id=event["event_id"], linked_event=parent_event, raw_event=event, )
async def test_react_invalid_name(self): connector = ConnectorSlack({"token": "abc123"}, opsdroid=self.od) connector.slack.api_call = amock.CoroutineMock( side_effect=SlackApiError("invalid_name", "invalid_name")) prev_message = events.Message( text="test", user="******", target="room", connector=connector, raw_event={"ts": 0}, ) await prev_message.respond(events.Reaction("😀")) self.assertLogs("_LOGGER", "warning")
async def test_send_reaction(send_event, connector): message = events.Message( text="linked text", target="room", event_id="1582838099.000601", raw_event={"ts": 0}, ) event = events.Reaction("😀", target=message.target, linked_event=message) payload, response = await send_event(REACTIONS_ADD, event) assert payload == { "channel": "room", "name": "grinning_face", "timestamp": "1582838099.000601", } assert response["ok"]
async def test_react(self): with OpsDroid() as opsdroid: mock_connector = Connector( { 'name': 'shell', 'thinking-delay': 2, 'type': 'connector', }, opsdroid=opsdroid) with amock.patch('asyncio.sleep') as mocksleep: message = events.Message("Hello world", "user", "default", mock_connector) with self.assertRaises(TypeError): await message.respond(events.Reaction("emoji")) self.assertTrue(mocksleep.called)