aboutsummaryrefslogtreecommitdiffstats
path: root/tests/base.py (unfollow)
Commit message (Collapse)AuthorLines
2019-10-11Update README.mdGravatar Sebastiaan Zeeff-8/+7
2019-10-11Make textual changes to testing guideGravatar Sebastiaan Zeeff-20/+34
I've made some textual changes to the testing guidelines defined in README.md.
2019-10-11Change pipeline testrunner to xmlrunnerGravatar Sebastiaan Zeeff-17/+31
I have change the testrunner from `unittest` to `xmlrunner` in the Azure pipeline to be able to publish our test results on Azure. This is the same runner as `site` uses to generate XML reports. In addition, I've cleaned up some small mistakes in docstrings and `README.md`.
2019-10-11Add tests for tests.baseGravatar Sebastiaan Zeeff-11/+31
I forgot to test some aspects of the `tests.base` module, including some branches of the `self.assertNotLogs` method. I've corrected that by including a couple of tests. I also removed the test result publishing from the Azure pipeline, since I've not configured an XML test runner yet. The coverage report is still published, of course and test output will be available in standard out, so information is readily available.
2019-10-11Migrate pytest to unittestGravatar Sebastiaan Zeeff-1285/+1567
After a discussion in the core developers channel, we have decided to migrate from `pytest` to `unittest` as the testing framework. This commit sets up the repository to use `unittest` and migrates the first couple of tests files to the new framework. What I have done to migrate to `unitest`: - Removed all `pytest` test files, since they are incompatible. - Removed `pytest`-related dependencies from the Pipfile. - Added `coverage.py` to the Pipfile dev-packages and relocked. - Added convenience scripts to Pipfile for running the test suite. - Adjust to `azure-pipelines.yml` to use `coverage.py` and `unittest`. - Migrated four test files from `pytest` to `unittest` format. In addition, I've added five helper Mock subclasses in `helpers.py` and created a `TestCase` subclass in `base.py` to add an assertion that asserts that no log records were logged within the context of the context manager. Obviously, these new utility functions and classes are fully tested in their respective `test_` files. Finally, I've started with an introductory guide for writing tests for our bot in `README.md`.
2019-10-08Ensure display name changes are loggedGravatar Sebastiaan Zeeff-1/+6
https://github.com/python-discord/bot/issues/489 Recently, we discovered that not all display name changes were logged to the #user-log channel. This problem was caused by the `old_value` or the `new_value` showing up as `None` when a user sets or removes a guild-specific nickname. Since we ignore changes where one of the two values is `None`, we did not log these `None->nick` or `nick->None` events. Since we are mainly interested in the display name of the user, and the display name is equal to the user's guild-specific nickname if they have set one and otherwise their username, I made the following changes: - Add logging of changes in the display names of members. - Ignore nick-specific changes completely, since these changes are already captured by the changes in the display name we now log. This closes #489
2019-10-08Show infraction reason when the bot is the actorGravatar Sebastiaan Zeeff-1/+5
https://github.com/python-discord/bot/issues/476 We recently decided to hide the reason in the confirmation message the bot sends after applying an infraction. In most situations, this makes sense, since the message containing the invocation command already contains the reason. However, if the infraction was triggered by the bot itself (e.g., an antispam trigger), this means that we're missing information that provides context to the infraction. This commit adds the reason back to the confirmation message, but only if the actor of the infraction was the bot itself. Closes #476
2019-10-08Set bot as actor of antispam infractionsGravatar Sebastiaan Zeeff-1/+3
As mentioned in #476, the bot currently sets the actor of infractions applied due to an antispam rule trigger to the offending member. The reason is that we get a `Context` object from the message that triggered the antispam rule, which was sent by the offender. I've changed it by patching both available author attributes, `Context.author` and `Context.message.author` with the bot user.
2019-10-07Only allow members currently in the guild to be warnedGravatar MarkKoz-1/+1
2019-10-07Update the nickname policy URLGravatar Mark-1/+1
Co-Authored-By: Sebastiaan Zeeff <[email protected]>
2019-10-06Update max threshold for attachmentsGravatar Derek-1/+1
2019-10-04Make categories class attributes and support descriptionsGravatar MarkKoz-5/+20
* Document support for custom categories.
2019-10-04Fix error when symbol_id cannot be found in doc HTMLGravatar MarkKoz-0/+3
2019-10-04Adjust verbiage of totals for watch commandsGravatar MarkKoz-2/+2
2019-10-04Show previous watch reason and total after invoking watch commandGravatar MarkKoz-2/+39
2019-10-04Wait until the bot is ready before reschedule infractionsGravatar MarkKoz-0/+2
2019-10-03Improve readabilityGravatar Ben Diller-0/+1
Co-Authored-By: Mark <[email protected]>
2019-10-03Move asyncio.sleep() to avoid disturbing function signatures.Gravatar bendiller-16/+13
2019-10-03Fix rescheduling of infractions when cog is reloadedGravatar MarkKoz-3/+5
2019-10-03Make warns, notes, and kicks always inactive Gravatar Mark-4/+4
It doesn't make sense for these types of infractions to be "active". Co-Authored-By: Sebastiaan Zeeff <[email protected]>
2019-10-03Add note instead of failure to mod log during pardon when ban not foundGravatar MarkKoz-2/+7
2019-10-03Check if tzinfo is None in ISODateTime testGravatar Sebastiaan Zeeff-1/+3
As we have decided that the converter should return naive datetime objects, we should explicitly test that datetime strings with a timezone offset are still converted to a naive datetime object. I have done this by adding a `tzinfo is None` assertion.
2019-10-02Add sleep(3) between retries, with bot indicating typing during sleepGravatar bendiller-4/+9
2019-10-02Add logging for invalid response (after all retries are exhausted)Gravatar bendiller-1/+3
2019-10-02Mention moderators in the mod log when an infraction fails to expireGravatar MarkKoz-1/+7
2019-10-02Swap arguments for post_infraction callsGravatar Mark-2/+2
Co-Authored-By: Sebastiaan Zeeff <[email protected]>
2019-10-03Fix mutes not being re-applied on rejoins.Gravatar scragly-5/+42
2019-10-02Remove __all__ definition from moderation subpackageGravatar MarkKoz-3/+0
2019-10-02Rename parameters to stop shadowing type built-inGravatar MarkKoz-15/+10
Co-Authored-By: scragly <[email protected]>
2019-10-02Format duration units as a list in management doctsringsGravatar Mark-2/+9
Co-Authored-By: scragly <[email protected]>
2019-10-02Format duration units as a list in infractions doctsringsGravatar Mark-9/+37
Co-Authored-By: scragly <[email protected]>
2019-10-02Make ISODateTime return tz-unaware datetimeGravatar Sebastiaan Zeeff-1/+33
The parser we use, `dateutil.parsers.isoparse` returns a timezone- aware or timezone-unaware `datetime` object depending on whether or not the datetime string included a timezone offset specification. Since we can't compare tz-aware objects to tz-unaware objects it's better to make sure our converter is consistent in the type it will return. For now, I've chosen to return tz-unaware datetime objects, since `discord.py` also returns tz-unaware datetime objects when accessing datetime-related attributes of objects. Since we're likely to compare "our" datetime objects to discord.py-provided datetime objects, I think that's the most parsimonious option for now. Note: It's probably a good idea to open a larger discussion about using timezone-aware datetime objects throughout the library to avoid a UTC-time being interpreted as localtime. This will require a broader discussion than this commit/PR allows, though.
2019-10-02Remove angle brackets from ISODateTime docstringGravatar Sebastiaan Zeeff-1/+1
This commit removes the angle brackets from the url in the docstring of `ISODateTime.convert`. The reason: it's ugly.
2019-10-02Apply docstring review suggestionGravatar Sebastiaan Zeeff-1/+1
Co-Authored-By: Mark <[email protected]>
2019-10-02Fix `cog_unload` bug in WatchChannel ABCGravatar Sebastiaan Zeeff-1/+1
https://github.com/python-discord/bot/issues/482 There was small bug in the `cog_unload` method of the WatchChannel ABC in `bot.cogs.watchchannels.watchchannel`. The problem was that it tries to check if the Task assigned to `self._consume_task` is done by accessing its `done` method. However, if a watch channel has not yet relayed messages after the bot has started, it will not have a consumption task yet, meaning this `_consume_task` attribute will be assigned to `None`. The solution is to change the `if` condition to: `if self._consume_task and not self._consume_task.done():` This commit closes #482
2019-10-01Add help category for Infractions and ModManagement cogsGravatar MarkKoz-8/+31
The two cogs will be listed under the same category in the help output.
2019-10-01Use has_active_infraction util function in superstarifyGravatar MarkKoz-19/+15
* Rename already_has_active_infraction to has_active_infraction * Fit some lines in utils to 100 columns
2019-10-01Add an optional icon_url parameter with a default to notify_infractionGravatar MarkKoz-3/+3
2019-10-01Tidy up importsGravatar MarkKoz-95/+96
* Remove redundant discord.Colour() usage * Fix type annotation of colour parameter for modlog.send_log_message() * Use a cog check in superstarify to require moderation roles
2019-10-01Use consistent expiration format in superstarifyGravatar MarkKoz-3/+4
2019-10-01Move DM notification functions to moderation utils moduleGravatar MarkKoz-110/+104
2019-10-01Add comments and improve docstrings in the infractions cogGravatar MarkKoz-13/+13
2019-10-01Remove redundant cancel_expiration method and use cancel_taskGravatar MarkKoz-19/+9
* Cancel the task inside deactivate_infraction
2019-10-01Ignore the default unban event in the mod logGravatar MarkKoz-2/+3
* Shorten the mod log footer for pardons
2019-10-01Fix out-of-order and missing arguments for post_infraction callsGravatar MarkKoz-2/+2
2019-10-01Display username in addition to id for unmutes in mod logGravatar MarkKoz-0/+1
2019-10-01Fix string representation of bot user in mod logGravatar MarkKoz-1/+1
2019-10-01Refactor _scheduled_task & remove extraneous DM for expired infractionsGravatar MarkKoz-22/+10
* Use dateutil to parse expiration timestamp
2019-10-01Fix concatenation of log text dictionaryGravatar MarkKoz-2/+2
2019-10-01Add reason for pardons in audit logGravatar MarkKoz-2/+3