aboutsummaryrefslogtreecommitdiffstats
path: root/tests (follow)
Commit message (Collapse)AuthorAgeLines
...
* | | Add tests for `add_channel`.Gravatar Numerlor2020-03-11-0/+21
| | |
* | | Create test case for `SilenceNotifier`Gravatar Numerlor2020-03-11-1/+7
| | |
* | | Add tests for `_get_instance_vars`.Gravatar Numerlor2020-03-11-1/+28
| | |
* | | Pass created channel instead of new object.Gravatar Numerlor2020-03-11-1/+1
| | | | | | | | | | | | Creating a new object caused the assert to fail because different objects were used.
* | | Reset `self.ctx` call history after every subtest.Gravatar Numerlor2020-03-11-0/+1
| | |
* | | Fix erroneous `assert_called_once_with` calls.Gravatar Numerlor2020-03-11-8/+7
| | | | | | | | | | | | `assert_called_once_with` was being tested on call_args which always reported success.st.
* | | Add test for `cog_check`.Gravatar Numerlor2020-03-11-0/+7
| | |
* | | Add test for `cog_unload`.Gravatar Numerlor2020-03-11-1/+17
| | |
* | | Use patch decorators and assign names from `with` patches.Gravatar Numerlor2020-03-11-11/+11
| | |
* | | Separate tests for permissions and `muted_channels.add` on `_silence`.Gravatar Numerlor2020-03-11-5/+8
| | |
* | | Add tests for `_unsilence`Gravatar Numerlor2020-03-11-1/+33
| | |
* | | Use async test case.Gravatar Numerlor2020-03-11-14/+12
| | | | | | | | | | | | This allows us to use coroutines with await directly instead of asyncio.run
* | | Add test for `_silence` method.Gravatar Numerlor2020-03-11-1/+34
| | |
* | | Remove channel mentions from output discord messages.Gravatar Numerlor2020-03-11-4/+4
| | | | | | | | | | | | | | | | | | With the removal of the channel args, it's no longer necessary to mention the channel in the command output. Tests adjusted accordingly
* | | Remove unnecessary args from test cases.Gravatar Numerlor2020-03-11-6/+6
| | | | | | | | | | | | | | | Needless call args which were constant were kept in the test cases, resulting in redundant code, the args were moved directly into the function call.
* | | Use `patch.object` instead of patch with direct `return_value`.Gravatar Numerlor2020-03-09-9/+2
| | |
* | | Add test for `unsilence` discord output.Gravatar Numerlor2020-03-08-0/+9
| | |
* | | Add test for `silence` discord output.Gravatar Numerlor2020-03-08-0/+24
| | |
* | | Add test case for Silence cog.Gravatar Numerlor2020-03-08-1/+10
| | |
* | | Add tests for FirstHash class.Gravatar Numerlor2020-03-08-0/+25
| |/ |/|
* | Modify log test regex to be non-os-specificGravatar S. Co12020-03-01-1/+1
| | | | | | Previous regex utilized a `/`, which doesn't work for comparing against Windows paths, which use `\`
* | Migrate snekbox tests to Python 3.8's unittestGravatar Sebastiaan Zeeff2020-02-29-41/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've migrated the `tests/test_snekbox.py` file to use the new Python 3.8-style unittests instead of our old style using our custom Async mocks. In particular, I had to make a few changes: - Mocking the async post() context manager correctly Since `ClientSession.post` returns an async context manager when called, we need to make sure to assign the return value to the __aenter__ method of whatever `post()` returns, not of `post` itself (i.e.. when it's not called). - Use the new AsyncMock assert methods `assert_awaited_once` and `assert_awaited_once_with` Objects of the new `unittest.mock.AsyncMock` class have special methods to assert what they were called with that also assert that specific coroutine object was awaited. This means we test two things in one: Whether or not it was called with the right arguments and whether or not the returned coroutine object was then awaited. - Patch `functools.partial` as `partial` objects are compared by identity When you create two partial functions of the same function, you'll end up with two different `partial` objects. Since `partial` objects are compared by identity, you can't compare a `partial` created in a test method to that created in the callable you're trying to test. They will always compare as `False`. Since we're not interested in actually creating `partial` objects, I've just patched `functools.partial` in the namespace of the module we're testing to make sure we can compare them.
* | Merge branch 'master' into python38-migrationGravatar Sebastiaan Zeeff2020-02-29-23/+376
|\| | | | | | | I've resolved the merge conflict by confirming the deleted part of tests/helpers.py
| * Merge branch 'master' into fuzzy_zero_divGravatar Shirayuki Nekomata2020-02-29-0/+380
| |\
| | * Merge remote-tracking branch 'origin/master' into eval-enhancementsGravatar MarkKoz2020-02-28-471/+1844
| | |\
| | * | Return only the new code in continue_eval and check for truthiness insteadGravatar Matteo2020-02-28-4/+4
| | | |
| | * | Use unicode code point instead of literal for the snekbox re-eval emojiGravatar Matteo2020-02-27-3/+3
| | | | | | | | | | | | | | | | Unicode literals aren't really safe compared to code points
| | * | Split the eval command procedure into two functions.Gravatar Matteo2020-02-27-69/+81
| | | | | | | | | | | | | | | | Two functions were created: send_eval and continue_eval, in order to facilitate testing. The corresponding tests are also changed in this commit.
| | * | Merge branch 'master' into eval-enhancementsGravatar Matteo Bertucci2020-02-18-1/+8
| | |\ \
| | * | | Use kwargs to set mock attributesGravatar Matteo2020-02-18-25/+11
| | | | |
| | * | | Assert return value of Snekbox.post_evalGravatar Matteo2020-02-18-1/+3
| | | | |
| | * | | Use a space instead of an empty string in test_get_status_emoji Gravatar Matteo Bertucci2020-02-18-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Because of the stripping, it should still be considered as empty Co-Authored-By: Mark <[email protected]>
| | * | | Delete additional informations from subtest Gravatar Matteo Bertucci2020-02-18-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | Reduce visual clutter Co-Authored-By: Mark <[email protected]>
| | * | | Split assertions onto separate lines Gravatar Matteo Bertucci2020-02-18-4/+8
| | | | | | | | | | | | | | | | | | | | | | | | | Reads better as separate lines Co-Authored-By: Mark <[email protected]>
| | * | | Split assertion onto separate linesGravatar Matteo Bertucci2020-02-18-1/+2
| | | | | | | | | | | | | | | Co-Authored-By: Mark <[email protected]>
| | * | | Write tests for bot/cogs/test_snekbox.pyGravatar Akarys422020-02-09-0/+363
| | | | |
| | * | | Create an AsyncContextManagerMock mock for testing asynchronous context managersGravatar Akarys422020-02-09-0/+12
| | | | | | | | | | | | | | | | | | | | It can be used to test aiohttp request functions, since they are async context managers
| * | | | Merge branch 'master' into fuzzy_zero_divGravatar Numerlor2020-02-28-7/+7
| |\ \ \ \ | | | |_|/ | | |/| | | | | | | | | | | | # Conflicts: # bot/cogs/error_handler.py
| | * | | Merge branch 'master' into feat/backend/b496/rename-constantsGravatar Leon Sandøy2020-02-28-15/+0
| | |\ \ \
| | * | | | Fix mismatched constant names in syncer testsGravatar S. Co12020-02-25-2/+2
| | | | | |
| | * | | | Merge branch 'master' into feat/backend/b496/rename-constantsGravatar S. Co12020-02-25-205/+1197
| | |\ \ \ \
| | * | | | | Tests: fix setting bot-commands ID in information testsGravatar MarkKoz2020-02-23-4/+4
| | | | | | |
| | * | | | | Constants: rename roles to match their names in the guildGravatar MarkKoz2020-02-23-1/+1
| | | | | | |
| * | | | | | Merge branch 'master' into fuzzy_zero_divGravatar Sebastiaan Zeeff2020-02-27-15/+0
| |\ \ \ \ \ \ | | | |_|/ / / | | |/| | | |
| | * | | | | Merge branch 'master' into channel_constants_checkGravatar Numerlor2020-02-25-205/+1197
| | |\ \ \ \ \ | | | | |/ / / | | | |/| | |
| | * | | | | Remove unused `chunks` function and its tests.Gravatar Numerlor2020-02-24-15/+0
| | | |/ / / | | |/| | | | | | | | | | | | | | | The function was only used in the since removed `Events` cog.
| * | | | | Adjust tests for new converter behavior.Gravatar Numerlor2020-02-26-1/+1
| | |/ / / | |/| | |
* | | | | Use MagicMock as return value for _get_diff mockGravatar Sebastiaan Zeeff2020-02-24-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `_get_diff` method of TestSyncer class is mocked using an AsyncMock object. By default, when an AsyncMock object is called **and awaited**, it returns a child mock of the same time (another AsyncMock) according to the "the child is a like the parent" principle. This means that the _get_diff method will return an AsyncMock unless a different return_value is explicitly provided. Because of that "child is like parent" behavior, this will happen in lines 194-196 of bot.cogs.sync.syncers (annotations added by me): ``` // `diff` will be a child AsyncMock as "child is like parent" diff = await self._get_diff(guild) // `diff._asdict` will be an AsyncMock as "child is like parent" and, // after being called, it will return an unawaited coroutine object // we assign the name `diff_dict`: diff_dict = diff._asdict() // `diff_dict` is still an unawaited coroutine object meaning that it // doesn't have an `items()` method: totals = {k: len(v) for k, v in diff_dict.items() if v is not None} ``` Original, unannotated: https://github.com/python-discord/bot/blob/c81a4d401ea434e98b0a1ece51d3d10f1a3ad226/bot/cogs/sync/syncers.py#L194-L196 This will lead to the following exception when running the tests: ```py ====================================================================== ERROR: test_sync_confirmation_context_redirect (tests.bot.cogs.sync.test_base.SyncerSyncTests) (ctx=None, author=<MockMember name='mock.user' spec_set='Member' id='140583452034864'>, message=None) If ctx is given, a new message should be sent and author should be ctx's author. ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/sebastiaan/pydis/repositories/bot/tests/bot/cogs/sync/test_base.py", line 348, in test_sync_confirmation_context_redirect await self.syncer.sync(guild, ctx) File "/home/sebastiaan/pydis/repositories/bot/bot/cogs/sync/syncers.py", line 196, in sync totals = {k: len(v) for k, v in diff_dict.items() if v is not None} AttributeError: 'coroutine' object has no attribute 'items' ``` The solution is to assign an explicit return value so the parent mock doesn't "guess" and return an object of its own type. I previously did that by providing a specific `_Diff` object as the return value, but I should have gone with a `MagicMock` to signify that it's not an important return value; it's just something that needs to support/mimic the API we use on it. So that's what this commit adds.
* | | | | Sync tests: use autospec instead of MockSyncerGravatar MarkKoz2020-02-23-18/+4
| | | | | | | | | | | | | | | | | | | | | | | | | Autospec supports using AsyncMocks in 3.8 so there's no need to rely on a subclass of CustomMockMixin for the async mocks.
* | | | | Migrate syncers test suite to Python 3.8Gravatar Sebastiaan Zeeff2020-02-24-75/+34
| | | | | | | | | | | | | | | | | | | | The test suite for the new role/member syncers used the "old"-style test suite with the helpers implemented for Python 3.7. I have migrated it to use the new Python 3.8 asyncio test helpers.