aboutsummaryrefslogtreecommitdiffstats
path: root/tests/helpers.py (follow)
Commit message (Collapse)AuthorAgeLines
* Merge branch 'main' into discord-2.0Gravatar Matteo Bertucci2021-10-10-1/+6
|\
| * Merge branch 'main' into ignore-infra-mods-errorsGravatar Joe Banks2021-10-05-1/+4
| |\
| | * Use scheduling create_task util instead of creating from loop directlyGravatar Numerlor2021-09-11-1/+4
| | | | | | | | | | | | | | | The util attaches an error logging callback instead of relying on python's exception logging which only occurs when the task is destroyed
| * | Fix testsGravatar Izan2021-09-01-0/+2
| |/
* / Migrate to Discord.py 2.0a0Gravatar Matteo Bertucci2021-09-06-4/+23
|/ | | | | | | | Since the Discord.py repository has been archived, we can switch to the latest commit of 2.0a0, knowing no breaking change will occur (still pinned to the commit just in case). This commits fixes any problem related to the migration: - New avatar interface - TZ aware datetimes - Various inernal API changes
* Merge branch 'main' into voicechannel-muteGravatar Xithrius2021-07-08-0/+22
|\
| * chore: Update tests for the new codejam create commandGravatar ToxicKidz2021-07-05-0/+22
| |
* | Merge branch 'main' into voicechannel-muteGravatar Hassan Abouelela2021-05-04-0/+2
|\|
| * Merge branch 'master' into error-handler-testGravatar ks1292021-02-19-1/+1
| |\
| * \ Merge branch 'master' into error-handler-testGravatar ks1292020-11-21-19/+2
| |\ \
| * \ \ Merge remote-tracking branch 'upstream/master' into error-handler-testGravatar ks1292020-09-27-12/+46
| |\ \ \
| * | | | Test Helpers: Added new attribute to `MockContext`Gravatar ks1292020-05-18-0/+2
| | | | | | | | | | | | | | | | | | | | Added `invoked_from_error_handler` attribute that is `False` default.
* | | | | Merge branch 'master' into voicechannel-muteGravatar Hassan Abouelela2020-12-22-1/+1
|\ \ \ \ \ | | |_|_|/ | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | Signed-off-by: Hassan Abouelela<[email protected]> # Conflicts # bot/exts/moderation/silence.py # bot/exts/moderation/test_silence.py
| * | | | Fix pending testsGravatar Joe Banks2020-12-19-1/+1
| | |_|/ | |/| |
* / | | General Silence Class TestsGravatar Hassan Abouelela2020-11-23-3/+22
|/ / / | | | | | | | | | | | | | | | Adds tests for helper functions in the silence cog. Signed-off-by: Hassan Abouelela <[email protected]>
* | | Merge master, fix conflicts, and create redis session in silence testsGravatar MarkKoz2020-10-09-1/+5
|\ \ \ | | |/ | |/|
| * | Use async-rediscache package for our redis cachesGravatar Sebastiaan Zeeff2020-09-19-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've migrated our redis caches over to the async-rediscache package that we've recently released (https://git.pydis.com/async-rediscache). The main functionality remains the same, although the package handles some things, like getting the active session, differently internally. The main changes you'll note for our bot are: - We create a RedisSession instance and ensure that it connects before we even create a Bot instance in `__main__.py`. - We are now actually using a connection pool instead of a single connection. - Our Bot subclass now has a new required kwarg: `redis_session`. - Bool values are now properly converted to and from typestrings. In addition, I've made sure that our MockBot passes a MagicMock for the new `redis_session` kwarg when creating a Bot instance for the spec_set. Signed-off-by: Sebastiaan Zeeff <[email protected]>
* | | Tests: optionally prevent autospec helper from passing mocksGravatar MarkKoz2020-08-17-19/+2
|/ / | | | | | | | | | | | | | | | | Not everything that's decorated needs the mocks that are patched. Being required to add the args to the test function anyway is annoying. It's especially bad if trying to decorate an entire test suite, as every test would need the args. Move the definition to a separate module to keep things cleaner.
* | Merge remote-tracking branch 'origin/master' into ↵Gravatar MarkKoz2020-06-02-11/+23
|\ \ | | | | | | | | | bug/filters/928/non-ascii-token
| * \ Merge branch 'master' into ban-kick-reason-lengthGravatar Mark2020-05-30-11/+19
| |\ \
| | * | MockBot needs to be aware of redis_readyGravatar Leon Sandøy2020-05-24-1/+1
| | | | | | | | | | | | | | | | | | | | Forgot to update the additional_spec_asyncs when changing the name of this Bot attribute to be public.
| | * | Remove redis session mock from MockBotGravatar MarkKoz2020-05-23-16/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It's not feasible to mock it because all the commands return futures rather than being coroutines, so they cannot automatically be turned into AsyncMocks. Furthermore, no code should ever use the redis session directly besides RedisCache. Since the tests for RedisCache already use fakeredis, there's no use in trying to mock redis in MockBot.
| | * | Finish .set and .get, and add tests.Gravatar Leon Sandøy2020-05-23-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The .set and .get will accept ints, floats, and strings. These will be converted into "typestrings", which is basically just a simple format that's been invented for this object. For example, an int looks like `b"i|2423"`. Note how it is still stored as a bytestring (like everything in Redis), but because of this prefix we are able to coerce it into the type we want on the way out of the db.
| | * | Use autospecced mocks in MockBot for the stats and aiohttp sessionGravatar MarkKoz2020-05-22-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | This will help catch anything that tries to get/set an attribute/method which doesn't exist. It'll also catch missing/too many parameters being passed to methods.
| | * | Properly mock the redis pool in MockBotGravatar MarkKoz2020-05-22-0/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Because some of the redis pool/connection methods return futures rather than being coroutines, the redis pool had to be mocked using the CustomMockMixin so it could take advantage of `additional_spec_asyncs` to use AsyncMocks for these future-returning methods.
| | * | Fix unawaited coro warning when instantiating Bot for MockBot's specGravatar MarkKoz2020-05-22-10/+14
| | |/ | | | | | | | | | | | | | | | | | | | | | The fix is to mock the loop and pass it to the Bot. It will then set it as `self.loop` rather than trying to get an event loop from asyncio. The `create_task` patch has been moved to this loop mock rather than being done in MockBot to ensure that it applies to anything calling it when instantiating the Bot.
| * | Merge branch 'master' into ban-kick-reason-lengthGravatar ks1292020-05-20-1/+22
| |\|
| * | (Test Helpers): Added `__ge__` function to `MockRole` for comparing.Gravatar ks1292020-04-15-0/+4
| | |
* | | Correct the return type annotation for the autospec decoratorGravatar MarkKoz2020-05-11-2/+2
| | |
* | | Fix autospec decorator when used with multiple attributesGravatar MarkKoz2020-05-11-16/+12
| | | | | | | | | | | | | | | | | | | | | | | | The original approach of messing with the `attribute_name` didn't work for reasons I won't discuss here (would require knowledge of patcher internals). The new approach doesn't use patch.multiple but mimics it by applying multiple patch decorators to the function. As a consequence, this can no longer be used as a context manager.
* | | Allow using arbitrary parameter names with the autospec decoratorGravatar MarkKoz2020-05-11-2/+15
| | | | | | | | | | | | | | | This gives the caller more flexibility. Sometimes attribute names are too long or they don't follow a naming scheme accepted by the linter.
* | | Add a test helper function to patch multiple attributes with autospecsGravatar MarkKoz2020-05-11-0/+9
| |/ |/| | | | | | | | | This helper reduces redundancy/boilerplate by setting default values. It also has the consequence of shortening the length of the invocation, which makes it faster to use and easier to read.
* | Add mock for discord.DMChannelsGravatar Sebastiaan Zeeff2020-04-27-0/+21
| |
* | Remove vestigial kwargs from MockTextChannel.__init__Gravatar Sebastiaan Zeeff2020-04-23-1/+1
|/
* Migrate syncers test suite to Python 3.8Gravatar Sebastiaan Zeeff2020-02-24-3/+1
| | | | 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.
* Merge branch 'master' into python38-migrationGravatar Sebastiaan Zeeff2020-02-24-6/+29
|\
| * Tests: fix unawaited error for MockAPIClientGravatar MarkKoz2020-02-12-5/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This error is due to the use of an actual instance of APIClient as the spec for the mock. recreate() is called in __init__ which in turn creates a task for the _create_session coroutine. The approach to the solution is to use the type for the spec rather than and instance, thus avoiding any call of __init__. However, without an instance, instance attributes will not be included in the spec. Therefore, they are defined as class attributes on the actual APIClient class definition and given default values. Alternatively, a subclass of APIClient could have been made in the tests.helpers module to define those class attributes. However, it seems easier to maintain if the attributes are in the original class definition.
| * Tests: use objects for colour and permissions of MockRoleGravatar MarkKoz2020-02-12-1/+13
| | | | | | | | | | Instances of discord.Colour and discord.Permissions will be created by default or when ints are given as values for those attributes.
| * Tests: add a return value for MockReaction.__str__Gravatar MarkKoz2020-02-12-0/+1
| |
| * Tests: add a MockAPIClientGravatar MarkKoz2020-02-12-0/+18
| |
* | Use unittest's AsyncMock instead of our AsyncMockGravatar Sebastiaan Zeeff2020-02-23-128/+62
| | | | | | | | | | | | Python 3.8 introduced an `unittest.mock.AsyncMock` class that can be used to mock coroutines and other types of asynchronous operations like async iterators and async context managers. As we were using our custom, but limited, AsyncMock, I have replaced our mock with unittest's AsyncMock. Since Python 3.8 also introduces a different way of automatically detecting which attributes should be mocked with an AsyncMock, I've changed our CustomMockMixin to use this new method as well. Together with a couple other small changes, this means that our Custom Mocks now use a lazy method of detecting coroutine attributes, which significantly speeds up the test suite.
* | Use IsolatedAsyncioTestCase instead of async_testGravatar Sebastiaan Zeeff2020-02-23-17/+0
|/ | | | Since we upgraded to Python 3.8, we can now use the new IsolatedAsyncioTestCase test class to use coroutine-based test methods instead of our own, custom async_test decorator. I have changed the base class for all of our test classes that use coroutine-based test methods and removed the now obsolete decorator from our helpers.
* Change all Bot imports to use the subclassGravatar MarkKoz2019-12-07-1/+3
|
* Add MockAsyncWebhook to mock `discord.Webhook` objectsGravatar Sebastiaan Zeeff2019-11-15-0/+21
| | | | | | | I have added a mock type to mock `discord.Webhook` instances. Note that the current type is specifically meant to mock webhooks that use an AsyncAdaptor and therefore has AsyncMock/coroutine mocks for the "maybe-coroutine" methods specified in the `discord.py` docs.
* Adjust MockReaction for new AsyncIteratorMock protocolGravatar Sebastiaan Zeeff2019-11-15-3/+1
| | | | | The new AsyncIteratorMock no longer needs an additional method to be used with a Mock object.
* Add MockUser to mock `discord.User` objectsGravatar Sebastiaan Zeeff2019-11-15-0/+19
| | | | | | | | I have added a special mock that follows the specifications of a `discord.User` instance. This is useful, since `Users` have less attributes available than `discord.Members`. Since this difference in availability of information can be important, we should not use a `MockMember` to mock a `discord.user`.
* Add `return_value` support and assertions to AsyncIteratorMockGravatar Sebastiaan Zeeff2019-11-15-4/+54
| | | | | | | | | | | The AsyncIteratorMock included in Python 3.8 will work similarly to the mocks of callabes. This means that it allows you to set the items it will yield using the `return_value` attribute. It will also have support for the common Mock-specific assertions. This commit introduces some backports of those features in a slightly simplified way to make the transition to Python 3.8 easier in the future.
* Add MockAttachment type and attachments default for MockMessageGravatar Sebastiaan Zeeff2019-11-14-1/+16
| | | | | | | | | | | | | As stated from the start, our intention is to add custom mock types as we need them for testing. While writing tests for DuckPond, I noticed that we did not have a mock type for Attachments, so I added one with this commit. In addition, I think it's a very sensible for MockMessage to have an empty list as a default value for the `attachements` attribute. This is equal to what `discord.Message` returns for a message without attachments and makes sure that if you don't explicitely add an attachment to a message, `MockMessage.attachments` tests as falsey.
* Add bot=False default value to MockMemberGravatar Sebastiaan Zeeff2019-11-14-1/+1
| | | | | | | | | | | | | | | | | By default, a mocked value is considered `truthy` in Python, like all non-empty/non-zero/non-None values in Python. This means that if an attribute is not explicitly set on a mock, it will evaluate at as truthy in a boolean context, since the mock will provide a truthy mocked value by default. This is not the best default value for the `bot` attribute of our MockMember type, since members are rarely bots. It makes much more intuitive sense to me to consider a member to not be a bot, unless we explicitly set `bot=True`. This commit sets that sensible default value that can be overwritten by passing `bot=False` to the constructor or setting the `object.bot` attribute to `False` after the creation of the mock.
* Merging in masterGravatar Leon Sandøy2019-11-13-60/+55
|\