on_ready unit tests

This commit is contained in:
klemek
2020-09-06 15:00:35 +02:00
parent 7b6e26183f
commit fbcd7169dc
2 changed files with 93 additions and 12 deletions
+70 -5
View File
@@ -1,8 +1,8 @@
from unittest import TestCase, skip from unittest import TestCase, skip
from unittest.mock import AsyncMock from unittest.mock import AsyncMock, patch, MagicMock
from os import path from os import path
import os import os
from tests.utils import AsyncTestCase, patch_discord from tests.utils import AsyncTestCase, patch_discord, patch_discord_arg
import discord import discord
from datetime import datetime from datetime import datetime
@@ -143,9 +143,74 @@ class TestOnMessage(AsyncTestCase):
class TestOnReady(AsyncTestCase): class TestOnReady(AsyncTestCase):
@skip LOG_PATH = "guilds.log"
def test_todo(self):
self.fail("not implemented") def setUp(self):
super().setUp()
if path.exists(self.LOG_PATH):
os.remove(self.LOG_PATH)
def tearDown(self):
super().tearDown()
if path.exists(self.LOG_PATH):
os.remove(self.LOG_PATH)
@patch_discord_arg
def test_no_log(self, client_mock):
bot = Bot("app_name", "version")
bot.guild_logs_file = None
ex = Exception("test")
client_mock.change_presence.side_effect = ex
try:
with patch("discord.Game") as game_mock:
game_mock.return_value = "activity"
self._await(bot.on_ready())
except Exception as error:
self.assertEqual(ex, error)
client_mock.change_presence.assert_called_with(
activity="activity",
status=discord.Status.online
)
@patch_discord_arg
def test_log_create(self, client_mock):
bot = Bot("app_name", "version")
bot.guild_logs_file = self.LOG_PATH
client_mock.change_presence.side_effect = Exception("test")
client_mock.guilds = [MagicMock(), MagicMock()]
client_mock.guilds[0].id = "id1"
client_mock.guilds[0].name = "name1"
client_mock.guilds[1].id = "id2"
client_mock.guilds[1].name = "name2"
d = datetime.now()
try:
with patch("discord.Game") as game_mock:
game_mock.return_value = "activity"
self._await(bot.on_ready())
except:
pass
with open(self.LOG_PATH, encoding="utf-8", mode="r") as f:
self.assertEqual(f"{d:%Y-%m-%d %H:%M} +id1: name1\n"
f"{d:%Y-%m-%d %H:%M} +id2: name2\n", f.read())
@patch_discord_arg
def test_log_exists(self, client_mock):
bot = Bot("app_name", "version")
bot.guild_logs_file = self.LOG_PATH
client_mock.change_presence.side_effect = Exception("test")
client_mock.guilds = [MagicMock()]
client_mock.guilds[0].id = "id1"
client_mock.guilds[0].name = "name1"
with open(self.LOG_PATH, encoding="utf-8", mode="w") as f:
f.write("test")
try:
with patch("discord.Game") as game_mock:
game_mock.return_value = "activity"
self._await(bot.on_ready())
except:
pass
with open(self.LOG_PATH, encoding="utf-8", mode="r") as f:
self.assertEqual(f"test", f.read())
class TestOnGuildJoin(AsyncTestCase): class TestOnGuildJoin(AsyncTestCase):
+22 -6
View File
@@ -1,3 +1,4 @@
import functools
from unittest import TestCase from unittest import TestCase
from unittest.mock import MagicMock, patch from unittest.mock import MagicMock, patch
import asyncio import asyncio
@@ -19,11 +20,26 @@ def pass_through(arg):
return arg return arg
def patch_discord(test): def __patch_discord_base(add_arg):
def wrapper(*args): def test_decorator(test):
m = MagicMock() @functools.wraps(test)
m.event = pass_through def wrapper(*args, **kwargs):
with patch("discord.Client", return_value=m): client_mock = MagicMock()
test(*args) client_mock.event = pass_through
with patch("discord.Client", return_value=client_mock):
if add_arg:
test(*args, client_mock, **kwargs)
else:
test(*args, **kwargs)
return wrapper return wrapper
return test_decorator
def patch_discord_arg(test):
return __patch_discord_base(True)(test)
def patch_discord(test):
return __patch_discord_base(False)(test)