aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeLines
...
| | * | | | Merge branch 'master' into unittest-helpers-proper-child-mockGravatar Mark2019-10-31-13/+17
| | |\ \ \ \ | | |/ / / / | |/| | | |
| * | | | | Merge pull request #626 from python-discord/otn-a-fixGravatar Mark2019-10-30-10/+6
| |\ \ \ \ \ | | | | | | | | | | | | | | Chain words before length check for OffTopicName conversion
| | * \ \ \ \ Merge branch 'master' into otn-a-fixGravatar Mark2019-10-30-3/+11
| | |\ \ \ \ \ | | |/ / / / / | |/| | | | |
| * | | | | | Use 'local' emojis for reddit webhook embedGravatar Sebastiaan Zeeff2019-10-29-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Apparently, webhooks cannot use external emojis. For now, I have added the emojis to the guild directly and updated the IDs in this commit. I don't really like having "utility" emojis on the main guild, but the alternative would be to not use webhooks, which is a change we will need to discuss before we apply it. (I don't see anything against it now we just send a daily digest, although, in principle, this is precisely what a webhook is meant for.)
| * | | | | | Merge pull request #635 from python-discord/reddit-webhook-embed-enhancementsGravatar Kieran Siek2019-10-29-3/+11
| |\ \ \ \ \ \ | | |_|_|/ / / | |/| | | | | Enhance Reddit webhook embeds
| | * | | | | Enhance Reddit webhook embedsGravatar Sebastiaan Zeeff2019-10-29-3/+11
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | https://github.com/python-discord/bot/issues/634 I have changes the appearance of the embed generated for the reddit webhook. The changes: - Bold markdown around the links to prevent it breaking on android. - Stylized the meta-data line with newly created emoji-based icons. - Removed redundant mentions of the subreddit from the embed itself. The emojis were uploaded to the `Emojis II` guild and the IDs have been added to the constants files. In addition, I've set the reddit logo as the default avatar for the webhook in the guild. This commit closes #634
| | * / / / Chain words before length checkGravatar kosayoda2019-10-28-10/+6
| |/ / / /
| | * | | Update docstring and remove redundant attributeGravatar Sebastiaan Zeeff2019-10-30-4/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I accidentally forgot to update the docstring of `CustomMockMixin`, which changed quite dramatically in scope with the last commit. This commit remedies that. In addition, I inadvertently forgot to remove the `child_mock_type` class attribute from `MockRole`. Since it uses the default value, it is no longer necessary to specify it in the child class as well.
| | * | | 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.
| | * | Superstarify: return None in _pardon_action for supported typesGravatar MarkKoz2019-10-25-1/+4
| | | |
| | * | Moderation: make infraction notification embed title lowercaseGravatar MarkKoz2019-10-25-1/+1
| | | |
| | * | Moderation: remove full stops from pardon embed titlesGravatar MarkKoz2019-10-25-2/+2
| | | |
| | * | Superstarify: make mod log title lowercase for consistencyGravatar MarkKoz2019-10-25-1/+1
| | | |
| | * | Superstarify: make the apply embed colour goldGravatar MarkKoz2019-10-25-9/+11
| | | |
| | * | Superstarify: fix incorrect infraction type check in _pardon_actionGravatar MarkKoz2019-10-25-1/+1
| | | |
| | * | InfractionScheduler: remove redundant loggingGravatar MarkKoz2019-10-25-3/+0
| | | |
| | * | Superstarify: save the old nickname before editing itGravatar MarkKoz2019-10-25-2/+3
| | | |
| | * | Superstarify: negate active infractions check in on_member_updateGravatar MarkKoz2019-10-25-1/+1
| | | |
| | * | Superstarify: fix mod log mentionGravatar MarkKoz2019-10-25-1/+1
| | | |
| | * | Superstarify: fit within 100 columns & use double quotesGravatar MarkKoz2019-10-25-7/+13
| | | |
| | * | Superstarify: refactor on_member_update eventGravatar MarkKoz2019-10-25-39/+35
| | | | | | | | | | | | | | | | | | | | | | | | | | | | * Use notify_infraction to be more consistent * Add an audit log reason to the member edit * Simplify docstring * Simplify log message
| | * | Superstarify: ignore member update event when applyingGravatar MarkKoz2019-10-25-0/+1
| | | |
| | * | InfractionScheduler: prevent duplicate rescheduling of infractionsGravatar MarkKoz2019-10-25-6/+9
| | | |
| | * | InfractionScheduler: create generic function for reapplying infractionsGravatar MarkKoz2019-10-25-68/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | reapply_infraction() is a generic function which reapplies a given infraction if it is still active or deactivates it if less than 60 seconds remain. Most of the code from Infractions.on_member_joined now lives in this new function. This simplifies the "fancier" DM and mod log that were previously sent for superstar in on_member_join.
| | * | Superstarify: refactor superstarify commandGravatar MarkKoz2019-10-25-29/+35
| | | | | | | | | | | | | | | | | | | | | | | | * Edit the nickname and schedule the infraction before sending messages * Reformat mod log description to be consistent with other infractions * Use INFRACTION_ICONS constant
| | * | Superstarify: schedule infractions by subclassing InfractionSchedulerGravatar MarkKoz2019-10-25-42/+25
| | | |
| | * | InfractionScheduler: use fetched user for notify_infractionGravatar MarkKoz2019-10-25-1/+1
| | | |
| | * | Superstarify: add icons to constants and configGravatar MarkKoz2019-10-25-3/+10
| | | |
| | * | InfractionScheduler: delegate type-specific pardon code to subclassesGravatar MarkKoz2019-10-25-35/+77
| | | | | | | | | | | | | | | | | | | | | | | | * Create an abstract method for performing type-specific infraction deactivation * Move infraction-specific pardon code to separate functions
| | * | Moderation: create a class to handle scheduling of infractionsGravatar MarkKoz2019-10-25-353/+372
| |/ / | | | | | | | | | | | | | | | The class handles application, pardoning, and expiration of infractions. This will allow other cogs, such as superstarify, to later subclass it to receive the same functionality that the infractions cog had.
| | * group and order constantsGravatar Numerlor2019-11-15-3/+5
| | |
| | * Add variable info after comment was deletedGravatar Numerlor2019-11-15-1/+1
| | | | | | | | | | | | Co-authored-by: scargly <[email protected]>
| | * join extra newlineGravatar Numerlor2019-11-15-2/+1
| | |
| | * Adjust code style and commentsGravatar Numerlor2019-11-12-37/+40
| | |
| | * syntax highlight diff of reloaded inventoriesGravatar Numerlor2019-11-11-3/+3
| | |
| | * Do not cut off text arbitrarily but at last sentence to make sure no ↵Gravatar Numerlor2019-11-11-1/+1
| | | | | | | | | | | | unfinished markdown is left in
| | * clear renamed symbols on inventory refreshGravatar Numerlor2019-11-11-0/+1
| | |
| | * Move signatures definitionGravatar Numerlor2019-11-10-1/+1
| | |
| | * Add a command for refreshing inventoriesGravatar Numerlor2019-11-10-0/+22
| | |
| | * Move paragraph search to not cut off long starting paragraphsGravatar Numerlor2019-11-10-1/+1
| | | | | | | | | | | | Co-authored-by: scargly <[email protected]>
| | * Cut off description at 1000 chars if paragraph is not foundGravatar Numerlor2019-11-10-0/+2
| | |
| | * Add a newline after signatures for readabilityGravatar Numerlor2019-11-10-1/+1
| | |
| | * fix signatures and descriptions not being found when presentGravatar Numerlor2019-11-10-4/+4
| | |
| | * Make sure only signatures belonging to the symbol are fetchedGravatar Numerlor2019-11-03-3/+4
| | |
| | * Comment grammarGravatar Numerlor2019-11-03-2/+2
| | |
| | * Fix case for the python package name in `NO_OVERRIDE_PACKAGES`Gravatar Numerlor2019-11-03-1/+1
| | |
| | * Handle exceptions when fetching inventoriesGravatar Numerlor2019-11-03-31/+57
| | |
| | * Improve module description searchingGravatar Numerlor2019-11-02-7/+35
| | |
| | * Get up to 3 signatures of a symbolGravatar Numerlor2019-11-02-16/+14
| | |