aboutsummaryrefslogtreecommitdiffstats
path: root/tests/cogs/sync/test_users.py
diff options
context:
space:
mode:
authorGravatar Johannes Christ <[email protected]>2019-10-12 12:39:56 +0200
committerGravatar Johannes Christ <[email protected]>2019-10-12 12:40:48 +0200
commit8a83d68e370d479072846e669be7b73c242e1d96 (patch)
tree15813deb41aede6b7042c815025d3243d8f97c30 /tests/cogs/sync/test_users.py
parentUpdate README.md (diff)
Move the `sync` cog tests to `unittest`.
Diffstat (limited to 'tests/cogs/sync/test_users.py')
-rw-r--r--tests/cogs/sync/test_users.py84
1 files changed, 84 insertions, 0 deletions
diff --git a/tests/cogs/sync/test_users.py b/tests/cogs/sync/test_users.py
new file mode 100644
index 000000000..ccaf67490
--- /dev/null
+++ b/tests/cogs/sync/test_users.py
@@ -0,0 +1,84 @@
+import unittest
+
+from bot.cogs.sync.syncers import User, get_users_for_sync
+
+
+def fake_user(**kwargs):
+ kwargs.setdefault('id', 43)
+ kwargs.setdefault('name', 'bob the test man')
+ kwargs.setdefault('discriminator', 1337)
+ kwargs.setdefault('avatar_hash', None)
+ kwargs.setdefault('roles', (666,))
+ kwargs.setdefault('in_guild', True)
+ return User(**kwargs)
+
+
+class GetUsersForSyncTests(unittest.TestCase):
+ """Tests constructing the users to synchronize with the site."""
+
+ def test_get_users_for_sync_returns_nothing_for_empty_params(self):
+ """When no users are given, none are returned."""
+ self.assertEqual(
+ get_users_for_sync({}, {}),
+ (set(), set())
+ )
+
+ def test_get_users_for_sync_returns_nothing_for_equal_users(self):
+ """When no users are updated, none are returned."""
+ api_users = {43: fake_user()}
+ guild_users = {43: fake_user()}
+
+ self.assertEqual(
+ get_users_for_sync(guild_users, api_users),
+ (set(), set())
+ )
+
+ def test_get_users_for_sync_returns_users_to_update_on_non_id_field_diff(self):
+ """When a non-ID-field differs, the user to update is returned."""
+ api_users = {43: fake_user()}
+ guild_users = {43: fake_user(name='new fancy name')}
+
+ self.assertEqual(
+ get_users_for_sync(guild_users, api_users),
+ (set(), {fake_user(name='new fancy name')})
+ )
+
+ def test_get_users_for_sync_returns_users_to_create_with_new_ids_on_guild(self):
+ """When new users join the guild, they are returned as the first tuple element."""
+ api_users = {43: fake_user()}
+ guild_users = {43: fake_user(), 63: fake_user(id=63)}
+
+ self.assertEqual(
+ get_users_for_sync(guild_users, api_users),
+ ({fake_user(id=63)}, set())
+ )
+
+ def test_get_users_for_sync_updates_in_guild_field_on_user_leave(self):
+ """When a user leaves the guild, the `in_guild` flag is updated to `False`."""
+ api_users = {43: fake_user(), 63: fake_user(id=63)}
+ guild_users = {43: fake_user()}
+
+ self.assertEqual(
+ get_users_for_sync(guild_users, api_users),
+ (set(), {fake_user(id=63, in_guild=False)})
+ )
+
+ def test_get_users_for_sync_updates_and_creates_users_as_needed(self):
+ """When one user left and another one was updated, both are returned."""
+ api_users = {43: fake_user()}
+ guild_users = {63: fake_user(id=63)}
+
+ self.assertEqual(
+ get_users_for_sync(guild_users, api_users),
+ ({fake_user(id=63)}, {fake_user(in_guild=False)})
+ )
+
+ def test_get_users_for_sync_does_not_duplicate_update_users(self):
+ """When the API knows a user the guild doesn't, nothing is performed."""
+ api_users = {43: fake_user(in_guild=False)}
+ guild_users = {}
+
+ self.assertEqual(
+ get_users_for_sync(guild_users, api_users),
+ (set(), set())
+ )