forked from EuroPython/discord
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_cog.py
More file actions
61 lines (39 loc) · 1.47 KB
/
Copy pathtest_cog.py
File metadata and controls
61 lines (39 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from unittest.mock import AsyncMock, MagicMock
import pytest
from discord.ext import commands
from europython_discord.dog.cog import DogCog
from europython_discord.dog.config import DogConfig
from europython_discord.dog.dogclient import DogClient
@pytest.fixture
def config() -> DogConfig:
return DogConfig()
@pytest.fixture
def bot() -> MagicMock:
return MagicMock(spec=commands.Bot)
@pytest.fixture
def dog_url() -> str:
return "https://images.dog.ceo/dog.jpg"
@pytest.fixture
def mock_client(dog_url: str) -> DogClient:
client = MagicMock(spec=DogClient)
client.fetch_random_dog.return_value = dog_url
return client
@pytest.fixture
def cog(bot: MagicMock, config: DogConfig, mock_client: DogClient) -> DogCog:
return DogCog(bot, config, client=mock_client)
@pytest.fixture
def ctx() -> AsyncMock:
mock = AsyncMock(spec=commands.Context)
mock.send = AsyncMock()
return mock
async def test_dog_command_success(cog: DogCog, ctx: AsyncMock, dog_url: str) -> None:
await cog.dog_command.callback(cog, ctx)
ctx.send.assert_awaited_once()
embed = ctx.send.call_args.kwargs["embed"]
assert embed.image.url == dog_url
async def test_dog_command_api_error(cog: DogCog, ctx: AsyncMock, mock_client: DogClient) -> None:
mock_client.fetch_random_dog.return_value = None
await cog.dog_command.callback(cog, ctx)
ctx.send.assert_awaited_once()
text = ctx.send.call_args.args[0]
assert text in cog.config.error_messages