aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeLines
...
| * | | | | Enhance custom mock helpersGravatar Sebastiaan Zeeff2019-10-30-161/+150
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I have enhanced the custom mocks defined in `tests/helpers.py` in a couple of important ways. 1. Automatically create AsyncMock attributes using `inspect` Our previous approach, hard-coding AsynckMock attributes for all the coroutine function methods defined for the class we are trying to mock is prone to human error and not resilient against changes introduced in updates of the library we are using. Instead, I have now created a helper method in our `CustomMockMixin` (formerly `GetChildMockMixin`) that automatically inspects the spec instance we've passed for `coroutine functions` using the `inspect` module. It then sets the according attributes with instances of the AsyncMock class. There is one caveat: `discord.py` very rarely defines regular methods that return a coroutine object. Since the returned coroutine should still be awaited, these regular methods should also be mocked with an AsyncMock. However, since they are regular methods, `inspect` does not detect them and they have to be added manually. (The only case of this I've found so far is `Client.wait_for`.) 2. Properly set special attributes using `kwargs.get` As we want attributes that point to other discord.py objects to use our custom mocks (.e.g, `Message.author` should use `MockMember`), the `__init__` method of our custom mocks make sure to correctly instantiate these attributes. However, the way we previously did that means we can't instantiate the custom mock with a mock instance we provide, since this special instantiation would overwrite the custom object we'd passed. I've solved this by using `kwargs.get`, with a new mock as the default value. This makes sure we only create a new mock if we didn't pass a custom one: ```py class MockMesseage: def __init__(self, **kwargs): self.author = kwargs.get('author', MockMember()) ``` As you can see, we will only create a new MockMember if we did not pass an `author` argument. 3. Factoring out duplicate lines Since our `CustomMockMixin` is a parent to all of our custom mock types, it makes sense to use it to factor out common code of all of our custom mocks. I've made the following changes: - Set a default child mock type in the mixin. - Create an `__init__` that takes care of the `inspect` of point 1 This means we won't have to repeat this in all of the child classes. 4. Three new Mock types: Emoji, PartialEmoji, and Reaction I have added three more custom mocks: - MockEmoji - MockPartialEmoji - MockReaction
| * | | | | Change generation of child mocksGravatar Sebastiaan Zeeff2019-10-28-36/+67
|/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - https://docs.python.org/3/library/unittest.mock.html We previously used an override of the `__new__` method to prevent our custom mock types from instantiating their children with their own type instead of a general mock type like `MagicMock` or `Mock`. As it turns out, the Python documentation suggests another method of doing this that does not involve overriding `__new__`. This commit implements this new method to make sure we're using the idiomatic way of handling this. The suggested method is overriding the `_get_child_mock` method in the subclass. To make our code DRY, I've created a mixin that should come BEFORE the mock type we're subclassing in the MRO. --- In addition, I have also added this new mixin to our `AsyncMock` class to make sure that its `__call__` method returns a proper mock object after it has been awaited. This makes sure that subsequent attribute access on the returned object is mocked as expected.
* | | | | Merge pull request #527 from kraktus/compact_freeGravatar Mark2019-10-25-14/+11
|\ \ \ \ \ | | | | | | | | | | | | Reduce `!free` output
| * \ \ \ \ Merge branch 'master' into compact_freeGravatar Mark2019-10-25-1642/+2983
| |\ \ \ \ \ | |/ / / / / |/| | | | |
* | | | | | Merge pull request #501 from mathsman5133/reddit-makeoverGravatar Sebastiaan Zeeff2019-10-25-148/+85
|\ \ \ \ \ \ | | | | | | | | | | | | | | Utilise `tasks.loop` and webhooks for reddit postings.
| * \ \ \ \ \ Merge branch 'master' into reddit-makeoverGravatar Sebastiaan Zeeff2019-10-25-1447/+2668
| |\ \ \ \ \ \ | |/ / / / / / |/| | | | | |
* | | | | | | Merge pull request #466 from Akarys42/reminder-upGravatar Sebastiaan Zeeff2019-10-25-3/+10
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | New reminder features
| * \ \ \ \ \ \ Merge branch 'master' into reminder-upGravatar Sebastiaan Zeeff2019-10-25-1394/+2592
| |\ \ \ \ \ \ \ | |/ / / / / / / |/| | | | | | |
* | | | | | | | Merge pull request #543 from atmishra/moderator-channel-checkGravatar S. Co12019-10-25-7/+22
|\ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | Restrict ModManagement commands to moderation channels
| * \ \ \ \ \ \ \ Merge branch 'master' into moderator-channel-checkGravatar S. Co12019-10-25-17/+37
| |\ \ \ \ \ \ \ \ | |/ / / / / / / / |/| | | | | | | |
* | | | | | | | | Merge pull request #550 from python-discord/###-filtering-devtestGravatar S. Co12019-10-25-5/+1
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Use standard filter conditions even if DEBUG_MODE is on.
| * \ \ \ \ \ \ \ \ Merge branch 'master' into ###-filtering-devtestGravatar S. Co12019-10-25-15/+54
| |\ \ \ \ \ \ \ \ \ | |/ / / / / / / / / |/| | | | | | | | |
* | | | | | | | | | Merge pull request #529 from python-discord/show-trigger-wordGravatar S. Co12019-10-25-11/+24
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Display word triggered by watchlist in #mod-alerts
| * \ \ \ \ \ \ \ \ \ Merge branch 'master' into show-trigger-wordGravatar S. Co12019-10-25-1469/+2842
| |\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / / |/| | | | | | | | | |
* | | | | | | | | | | Prepend emoji indicative of success of !eval (#552)Gravatar scragly2019-10-24-1/+12
|\ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Prepend emoji indicative of success of !eval Co-authored-by: null <[email protected]>
| * \ \ \ \ \ \ \ \ \ \ Merge branch 'master' into eval-emojisGravatar scragly2019-10-24-1468/+2830
| |\ \ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / / / |/| | | | | | | | | | |
| * | | | | | | | | | | Prepend emoji indicative of success of !evalGravatar kosayoda2019-10-24-1/+12
| | |_|_|_|_|_|/ / / / | |/| | | | | | | | |
| | * | | | | | | | | Fix incorrect type hint for return valueGravatar kosayoda2019-10-24-2/+2
| | | | | | | | | | |
| | * | | | | | | | | Rename `triggered` to `match`Gravatar kosayoda2019-10-15-8/+6
| | | | | | | | | | |
| | * | | | | | | | | Show matched word and location in watchlist embedGravatar kosayoda2019-10-13-5/+20
| |/ / / / / / / / /
| | * | | | | | | | Use standart filter conditions even if DEBUG_MODE is on.Gravatar Akarys422019-10-23-5/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The old method filtered only in #dev-test but this channel no longer exists
| | | * | | | | | | Merge branch 'master' into moderator-channel-checkGravatar Atul Mishra2019-10-22-8/+17
| | | |\ \ \ \ \ \ \ | |_|_|/ / / / / / / |/| | | | | | | | |
* | | | | | | | | | Merge pull request #547 from python-discord/#540-dont-show-infraction-totalGravatar Daniel Brown2019-10-22-3/+18
|\ \ \ \ \ \ \ \ \ \ | |_|/ / / / / / / / |/| | | | | | | | | Don't show infraction total outside staff channels.
| * | | | | | | | | Show total infraction count only in staff channelsGravatar Akarys422019-10-21-1/+3
| | | | | | | | | |
| * | | | | | | | | Create STAFF_CHANNELS constantGravatar Akarys422019-10-21-2/+15
|/ / / / / / / / /
| | * | | | | | | Add test cases for in_channel_checkGravatar Atul Mishra2019-10-22-0/+8
| | | | | | | | |
| | * | | | | | | Merge branch 'master' into moderator-channel-checkGravatar Atul Mishra2019-10-22-1374/+2522
| | |\ \ \ \ \ \ \ | |_|/ / / / / / / |/| | | | | | | |
* | | | | | | | | Merge pull request #541 from ikuyarihS/masterGravatar S. Co12019-10-21-98/+54
|\ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | Fix defcon having wrong text when disabling.
| * \ \ \ \ \ \ \ \ Merge branch 'master' into masterGravatar S. Co12019-10-21-1276/+2468
| |\ \ \ \ \ \ \ \ \ | |/ / / / / / / / / |/| | | | | | | | |
* | | | | | | | | | Merge pull request #517 from python-discord/unittest-migrationGravatar Leon Sandøy2019-10-20-1268/+2366
|\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | Migrating the test suite to the `unittest` framework
| * \ \ \ \ \ \ \ \ \ Merge branch 'master' into unittest-migrationGravatar Leon Sandøy2019-10-20-53/+163
| |\ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / / |/| | | | | | | | | |
* | | | | | | | | | | Merge pull request #528 from bendiller/antimalware-cogGravatar Chris G2019-10-19-0/+86
|\ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | Antimalware cog
| * \ \ \ \ \ \ \ \ \ \ Merge branch 'master' into antimalware-cogGravatar Chris G2019-10-19-107/+428
| |\ \ \ \ \ \ \ \ \ \ \ | |/ / / / / / / / / / / |/| | | | | | | | | | |
* | | | | | | | | | | | Pluralize "infractions" as necessary. (#545)Gravatar scragly2019-10-20-2/+10
|\ \ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | Pluralize "infractions" as necessary.
| * | | | | | | | | | | | Do not display an expiry for notes or warnings.Gravatar Johannes Christ2019-10-19-1/+7
| | | | | | | | | | | | |
| * | | | | | | | | | | | Pluralize "infractions" as necessary.Gravatar Johannes Christ2019-10-19-1/+3
|/ / / / / / / / / / / /
| * | | | | | | | | | | Bugfix - ensure .py attachment is prioritized over other non-whitelistedGravatar bendiller2019-10-17-1/+0
| | | | | | | | | | | |
| * | | | | | | | | | | Address reviewer requestGravatar bendiller2019-10-17-3/+4
| | | | | | | | | | | |
| * | | | | | | | | | | Improve code readability and provide early exit from loopGravatar bendiller2019-10-16-8/+13
| | | | | | | | | | | |
| * | | | | | | | | | | Improve code readability and docstringGravatar bendiller2019-10-14-13/+33
| | | | | | | | | | | |
| * | | | | | | | | | | Fix Constants.AntiMalware.whitelist typeGravatar bendiller2019-10-12-1/+1
| | | | | | | | | | | |
| * | | | | | | | | | | Implement message deletionGravatar bendiller2019-10-12-6/+12
| | | | | | | | | | | |
| * | | | | | | | | | | Create barebones Antimalware cog and config - detects bad file extensionsGravatar bendiller2019-10-12-0/+55
| | | | | | | | | | | |
| | * | | | | | | | | | Merge branch 'master' into unittest-migrationGravatar Sebastiaan Zeeff2019-10-15-407/+699
| | |\ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Resolving merge conflicts from master in `.gitignore` and `tests/helpers.py`.
| | * | | | | | | | | | | Remove empty tests.cogs folderGravatar Sebastiaan Zeeff2019-10-14-0/+0
| | | | | | | | | | | | |
| | * | | | | | | | | | | Merge branch 'cogs-tokenremover-unittest' into unittest-migrationGravatar Sebastiaan Zeeff2019-10-14-0/+136
| | |\ \ \ \ \ \ \ \ \ \ \
| | | * | | | | | | | | | | Make test_token_remover use our discord MocksGravatar Sebastiaan Zeeff2019-10-14-8/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit replaces the standard MagicMocks by our specialized mocks for discord.py objects. It also adds the missing `channel` attribute to the `tests.helpers.MockMessage` mock and moves the file to the correct folder.
| | | * | | | | | | | | | | Use `MockBot`.Gravatar Johannes Christ2019-10-14-3/+3
| | | | | | | | | | | | | |
| | | * | | | | | | | | | | Move the `token_remover` cog tests to `unittest`.Gravatar Johannes Christ2019-10-14-0/+139
| | |/ / / / / / / / / / /
| | * | | | | | | | | | | Merge branch 'unittest-migration' of github.com:python-discord/bot into ↵Gravatar Sebastiaan Zeeff2019-10-14-0/+26
| | |\ \ \ \ \ \ \ \ \ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | unittest-migration