diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ed33241..89cba61 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -33,6 +33,7 @@ v2.0.0 (IN PROGRESS) * Add `account_delete_avatar` and `account_delete_header` * Add `statuses` method to retrieve multiple statuses at once * Add automatic conversion of datetime objects to flake IDs for min/max/since_id fields where appropriate +* Add `notifications_unread_count` v1.8.1 ------ diff --git a/mastodon/accounts.py b/mastodon/accounts.py index 838d225..011b9d1 100644 --- a/mastodon/accounts.py +++ b/mastodon/accounts.py @@ -305,8 +305,6 @@ class Mastodon(Internals): """ Follow a remote user with username given in username@domain form. - Returns a :ref:`account dict `. - Deprecated - avoid using this. Currently uses a backwards compat implementation that may or may not work properly. """ try: diff --git a/mastodon/admin.py b/mastodon/admin.py index c4f6bf9..14fb7b8 100644 --- a/mastodon/admin.py +++ b/mastodon/admin.py @@ -32,8 +32,6 @@ class Mastodon(Internals): * Set `invited_by` to an account id to get only accounts invited by this user. * Set `role_ids` to a list of role IDs to get only accounts with those roles. - Returns a list of :ref:`admin account dicts `. - Pagination on this is a bit weird, so I would recommend not doing that and instead manually fetching. """ if role_ids is not None: @@ -107,8 +105,6 @@ class Mastodon(Internals): Deprecated in Mastodon version 3.5.0. - Returns a list of :ref:`admin account dicts `. - Pagination on this is a bit weird, so I would recommend not doing that and instead manually fetching. """ params = self.__generate_params(locals(), ['remote', 'status', 'staff_only'], dateconv=True) @@ -135,7 +131,7 @@ class Mastodon(Internals): @api_version("2.9.1", "2.9.1") def admin_account(self, id: Union[Account, AdminAccount, IdType]) -> AdminAccount: """ - Fetches a single :ref:`admin account dict ` for the user with the given id. + Fetches a single admin account for the user with the given id. """ id = self.__unpack_id(id) return self.__api_request('GET', f'/api/v1/admin/accounts/{id}') @@ -256,8 +252,6 @@ class Mastodon(Internals): Set `resolved` to True to search for resolved reports. `account_id` and `target_account_id` can be used to get reports filed by or about a specific user. - - Returns a list of :ref:`report dicts `. """ if account_id is not None: account_id = self.__unpack_id(account_id) @@ -357,7 +351,7 @@ class Mastodon(Internals): Provide an `id` to fetch a specific domain block based on its database id. - Returns a list of :ref:`admin domain block dicts `, raises a `MastodonAPIError` if the specified block does not exist. + Raises a `MastodonAPIError` if the specified block does not exist. """ if id is not None: id = self.__unpack_id(id) @@ -385,8 +379,6 @@ class Mastodon(Internals): `private_comment` sets a private admin comment for the domain. `public_comment` sets a publicly available comment for this domain, which will be available to local users and may be available to everyone depending on your settings. `obfuscate` censors some part of the domain name. Useful if the domain name contains unwanted words like slurs. - - Returns the new domain block as an :ref:`admin domain block dict `. """ if domain is None: raise MastodonIllegalArgumentError("Must provide a domain to block a domain") @@ -414,7 +406,7 @@ class Mastodon(Internals): `public_comment` sets a publicly available comment for this domain, which will be available to local users and may be available to everyone depending on your settings. `obfuscate` censors some part of the domain name. Useful if the domain name contains unwanted words like slurs. - Returns the modified domain block as an :ref:`admin domain block dict `, raises a `MastodonAPIError` if the specified block does not exist. + Raises a `MastodonAPIError` if the specified block does not exist. """ if id is None: raise MastodonIllegalArgumentError("Must provide an id to modify the existing moderation actions on a given domain.") @@ -465,8 +457,6 @@ class Mastodon(Internals): There is currently no way to get tag IDs implemented in Mastodon.py, because the Mastodon public API does not implement one. This will be fixed in a future release. - - Returns a list of :ref:`admin measure dicts `. """ params_init = locals() keys = [] @@ -516,8 +506,6 @@ class Mastodon(Internals): There is currently no way to get tag IDs implemented in Mastodon.py, because the Mastodon public API does not implement one. This will be fixed in a future release. - - Returns a list of :ref:`admin dimension dicts `. """ params_init = locals() keys = [] diff --git a/mastodon/hashtags.py b/mastodon/hashtags.py index 8d91de4..0ddc57e 100644 --- a/mastodon/hashtags.py +++ b/mastodon/hashtags.py @@ -16,7 +16,7 @@ class Mastodon(Internals): def featured_tags(self) -> NonPaginatableList[FeaturedTag]: """ Return the hashtags the logged-in user has set to be featured on - their profile as a list of :ref:`featured tag dicts `. + their profile. """ return self.__api_request('GET', '/api/v1/featured_tags') diff --git a/mastodon/instance.py b/mastodon/instance.py index 7e4f650..f9befe2 100644 --- a/mastodon/instance.py +++ b/mastodon/instance.py @@ -163,8 +163,6 @@ class Mastodon(Internals): def announcements(self) -> NonPaginatableList[Announcement]: """ Fetch currently active announcements. - - Returns a list of :ref:`announcement dicts `. """ return self.__api_request('GET', '/api/v1/announcements') diff --git a/mastodon/media.py b/mastodon/media.py index 2cd401e..670dcc9 100644 --- a/mastodon/media.py +++ b/mastodon/media.py @@ -49,14 +49,13 @@ class Mastodon(Internals): Starting with Mastodon 3.2.0, `thumbnail` can be specified in the same way as `media_file` to upload a custom thumbnail image for audio and video files. - Returns a :ref:`media dict `. This contains the id that can be used in - status_post to attach the media file to a toot. - When using the v2 API (post Mastodon version 3.1.4), the `url` in the returned dict will be `null`, since attachments are processed asynchronously. You can fetch an updated dict using `media`. Pass "synchronous" to emulate the old behaviour. Not recommended, inefficient and deprecated, will eat your API quota, you know the deal. + + The returned value (or its id) can be used in a status post as the `media_ids` parameter. """ files = {'file': self.__load_media_file( media_file, mime_type, file_name)} diff --git a/mastodon/notifications.py b/mastodon/notifications.py index 3a9f4a0..1eb4735 100644 --- a/mastodon/notifications.py +++ b/mastodon/notifications.py @@ -3,7 +3,7 @@ from mastodon.errors import MastodonIllegalArgumentError from mastodon.utility import api_version from mastodon.internals import Mastodon as Internals -from mastodon.return_types import Notification, IdType, PaginatableList, Account +from mastodon.return_types import Notification, IdType, PaginatableList, Account, UnreadNotificationsCount from typing import Union, Optional, List class Mastodon(Internals): @@ -36,8 +36,6 @@ class Mastodon(Internals): `exclude_types` to all but mentions. Can be passed an `id` to fetch a single notification. - - Returns a list of :ref:`notification dicts `. """ if mentions_only is not None: if exclude_types is None and types is None: @@ -60,6 +58,14 @@ class Mastodon(Internals): id = self.__unpack_id(id) return self.__api_request('GET', f"/api/v1/notifications/{id}") + # Implement GET /api/v1/notifications/unread_count HTTP/1.1 + @api_version("4.3.0", "4.3.0") + def notifications_unread_count(self) -> UnreadNotificationsCount: + """ + Fetch the number of unread notifications for the logged-in user. + """ + return self.__api_request('GET', '/api/v1/notifications/unread_count') + ### # Writing data: Notifications ### diff --git a/mastodon/push.py b/mastodon/push.py index 614b1d0..baacab7 100644 --- a/mastodon/push.py +++ b/mastodon/push.py @@ -61,8 +61,6 @@ class Mastodon(Internals): * `update_events` controls whether you receive events when a status that the logged in user has boosted has been edited. * `admin_sign_up_events` controls whether you receive events when a new user signs up. * `admin_report_events` controls whether you receive events when a new report is received. - - Returns a :ref:`push subscription dict `. """ if not policy in ['all', 'none', 'follower', 'followed']: raise MastodonIllegalArgumentError("Valid values for policy are 'all', 'none', 'follower' or 'followed'.") diff --git a/mastodon/search.py b/mastodon/search.py index 7a206a0..b8c37c7 100644 --- a/mastodon/search.py +++ b/mastodon/search.py @@ -42,7 +42,7 @@ class Mastodon(Internals): those that have been reviewed by moderators. It is on by default. When using the v1 search API (pre 2.4.1), it is ignored. - Will use search_v1 (no tag dicts in return values) on Mastodon versions before + Will use search_v1 (no tags in return values) on Mastodon versions before 2.4.1), search_v2 otherwise. Parameters other than resolve are only available on Mastodon 2.8.0 or above - this function will throw a MastodonVersionError if you try to use them on versions before that. Note that the cached version @@ -58,9 +58,9 @@ class Mastodon(Internals): def search_v1(self, q: str, resolve: bool = False) -> Search: """ Identical to `search_v2()`, except in that it does not return - tags as :ref:`hashtag dicts `. + tags as objects, and doesn't support most of the new parameters. - Returns a :ref:`search result dict `. + Should really not be used anymore. """ params = self.__generate_params(locals()) if not resolve: @@ -73,12 +73,10 @@ class Mastodon(Internals): min_id: Optional[IdType] = None, max_id: Optional[IdType] = None, exclude_unreviewed: bool = True) -> SearchV2: """ - Identical to `search_v1()`, except in that it returns tags as - :ref:`hashtag dicts `, has more parameters, and resolves by default. + Identical to `search_v1()`, except in that it returns tags as objects, + has more parameters, and resolves by default. For more details documentation, please see `search()` - - Returns a :ref:`search result dict `. """ self.__ensure_search_params_acceptable(account_id, offset, min_id, max_id) params = self.__generate_params(locals(), dateconv=True) diff --git a/mastodon/statuses.py b/mastodon/statuses.py index 9c8111a..bccc126 100644 --- a/mastodon/statuses.py +++ b/mastodon/statuses.py @@ -45,7 +45,7 @@ class Mastodon(Internals): Does not require authentication for publicly visible statuses. This function is deprecated as of 3.0.0 and the endpoint does not - exist anymore - you should just use the "card" field of the status dicts + exist anymore - you should just use the "card" field of the status instead. Mastodon.py will try to mimic the old behaviour, but this is somewhat inefficient and not guaranteed to be the case forever. """ @@ -210,7 +210,7 @@ class Mastodon(Internals): `media_ids` should be a list. (If it's not, the function will turn it into one.) It can contain up to four pieces of media (uploaded via - :ref:`media_post() `). `media_ids` can also be the `media dicts`_ returned + :ref:`media_post() `). `media_ids` can also be the objects returned by :ref:`media_post() ` - they are unpacked automatically. The `sensitive` boolean decides whether or not media attached to the post @@ -245,7 +245,7 @@ class Mastodon(Internals): Pass a datetime as `scheduled_at` to schedule the toot for a specific time (the time must be at least 5 minutes into the future). If this is passed, - status_post returns a :ref:`scheduled status dict ` instead. + status_post returns a `ScheduledStatus` instead. Pass `poll` to attach a poll to the status. An appropriate object can be constructed using :ref:`make_poll() ` . Note that as of Mastodon version @@ -262,7 +262,7 @@ class Mastodon(Internals): **Specific to "fedibird" feature set:**: The `quote_id` parameter is a non-standard extension that specifies the id of a quoted status. - Returns a :ref:`status dict ` with the new status. + Returns the new status. """ return self.__status_internal( status, @@ -344,7 +344,7 @@ class Mastodon(Internals): the users that are being replied to the status text and retains CW and visibility if not explicitly overridden. - Note that `to_status` should be a :ref:`status dict ` and not an ID. + Note that `to_status` must be a `Status` and not just an ID. Set `untag` to True if you want the reply to only go to the user you are replying to, removing every other mentioned user from the diff --git a/srcgen/return_types.json b/srcgen/return_types.json index 1a31426..3b9caa0 100644 --- a/srcgen/return_types.json +++ b/srcgen/return_types.json @@ -9638,7 +9638,7 @@ { "name": "Unread Notifications Count", "python_name": "UnreadNotificationsCount", - "func_call": "TODO_TO_BE_IMPLEMENTED", + "func_call": "mastodon.notifications_unread_count()", "func_call_real": null, "func_call_additional": null, "func_alternate_acc": null, diff --git a/tests/cassettes/test_notifications.yaml b/tests/cassettes/test_notifications.yaml index e194354..5bb150e 100644 --- a/tests/cassettes/test_notifications.yaml +++ b/tests/cassettes/test_notifications.yaml @@ -20,11 +20,11 @@ interactions: uri: http://localhost:3000/api/v1/statuses response: body: - string: '{"id":"113998808834483931","created_at":"2025-02-13T21:56:17.383Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/113998808834483931","url":"http://localhost:3000/@admin/113998808834483931","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"pinned":false,"content":"\u003cp\u003e\u003cspan + string: '{"id":"114007923875989611","created_at":"2025-02-15T12:34:21.888Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/114007923875989611","url":"http://localhost:3000/@admin/114007923875989611","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"pinned":false,"content":"\u003cp\u003e\u003cspan class=\"h-card\" translate=\"no\"\u003e\u003ca href=\"http://localhost:3000/@mastodonpy_test\" class=\"u-url mention\"\u003e@\u003cspan\u003emastodonpy_test\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e hello!\u003c/p\u003e","filtered":[],"reblog":null,"application":{"name":"Mastodon.py - test suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":0,"following_count":0,"statuses_count":1,"last_status_at":"2025-02-13","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}' + test suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}' headers: Cache-Control: - private, no-store @@ -35,14 +35,14 @@ interactions: Content-Type: - application/json; charset=utf-8 ETag: - - W/"09224f7d2e004269da1d638962ce859c" + - W/"0d2682a94ea5b77daa55e5700d2a1639" Referrer-Policy: - strict-origin-when-cross-origin Server-Timing: - - cache_read.active_support;dur=0.05, sql.active_record;dur=10.59, cache_generate.active_support;dur=2.71, - cache_write.active_support;dur=0.11, instantiation.active_record;dur=0.69, - start_processing.action_controller;dur=0.00, transaction.active_record;dur=12.16, - render.active_model_serializers;dur=12.93, process_action.action_controller;dur=54.94 + - cache_read.active_support;dur=0.46, sql.active_record;dur=53.51, cache_generate.active_support;dur=36.16, + cache_write.active_support;dur=1.15, instantiation.active_record;dur=8.74, + start_processing.action_controller;dur=0.01, transaction.active_record;dur=55.39, + render.active_model_serializers;dur=42.33, process_action.action_controller;dur=227.16 X-Content-Type-Options: - nosniff X-Frame-Options: @@ -52,13 +52,13 @@ interactions: X-RateLimit-Limit: - '300' X-RateLimit-Remaining: - - '297' + - '299' X-RateLimit-Reset: - - '2025-02-14T00:00:00.408635Z' + - '2025-02-15T15:00:00.980794Z' X-Request-Id: - - b4f36d58-6eaa-4901-b2dd-ee857cd254c6 + - 99385df2-56f3-4c0d-93a6-3b8c4230d485 X-Runtime: - - '0.069538' + - '0.321928' X-XSS-Protection: - '0' vary: @@ -83,32 +83,47 @@ interactions: uri: http://localhost:3000/api/v1/notifications response: body: - string: '[{"id":"20","type":"mention","created_at":"2025-02-13T21:56:17.717Z","group_key":"ungrouped-20","account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":0,"following_count":0,"statuses_count":1,"last_status_at":"2025-02-13","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"status":{"id":"113998808834483931","created_at":"2025-02-13T21:56:17.383Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/113998808834483931","url":"http://localhost:3000/@admin/113998808834483931","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"content":"\u003cp\u003e\u003cspan + string: '[{"id":"36","type":"mention","created_at":"2025-02-15T12:34:22.380Z","group_key":"ungrouped-36","account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"status":{"id":"114007923875989611","created_at":"2025-02-15T12:34:21.888Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/114007923875989611","url":"http://localhost:3000/@admin/114007923875989611","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"content":"\u003cp\u003e\u003cspan class=\"h-card\" translate=\"no\"\u003e\u003ca href=\"http://localhost:3000/@mastodonpy_test\" class=\"u-url mention\"\u003e@\u003cspan\u003emastodonpy_test\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e hello!\u003c/p\u003e","filtered":[],"reblog":null,"application":{"name":"Mastodon.py - test suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":0,"following_count":0,"statuses_count":1,"last_status_at":"2025-02-13","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}}]' + test suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}},{"id":"35","type":"poll","created_at":"2025-02-13T22:01:54.189Z","group_key":"ungrouped-35","account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"status":{"id":"113998810972107187","created_at":"2025-02-13T21:56:49.999Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/113998810972107187","url":"http://localhost:3000/@admin/113998810972107187","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"content":"\u003cp\u003enice\u003c/p\u003e","filtered":[],"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[],"tags":[],"emojis":[],"card":null,"poll":{"id":"2","expires_at":"2025-02-13T22:01:49.997Z","expired":true,"multiple":false,"votes_count":1,"voters_count":1,"voted":true,"own_votes":[1],"options":[{"title":"four + twenty","votes_count":0},{"title":"sixty-nine","votes_count":1}],"emojis":[]}}},{"id":"32","type":"mention","created_at":"2025-02-13T21:58:34.110Z","group_key":"ungrouped-32","account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"status":{"id":"113998817726451380","created_at":"2025-02-13T21:58:33.064Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"direct","language":"en","uri":"http://localhost:3000/users/admin/statuses/113998817726451380","url":"http://localhost:3000/@admin/113998817726451380","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"content":"\u003cp\u003e\u003cspan + class=\"h-card\" translate=\"no\"\u003e\u003ca href=\"http://localhost:3000/@mastodonpy_test\" + class=\"u-url mention\"\u003e@\u003cspan\u003emastodonpy_test\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e + todo funny text here\u003c/p\u003e","filtered":[],"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}},{"id":"30","type":"mention","created_at":"2025-02-13T21:57:41.476Z","group_key":"ungrouped-30","account":{"id":"113998801391516277","username":"mastodonpy_test_2","acct":"mastodonpy_test_2","display_name":"","locked":false,"bot":false,"discoverable":true,"indexable":true,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@mastodonpy_test_2","uri":"http://localhost:3000/users/mastodonpy_test_2","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":0,"following_count":0,"statuses_count":2,"last_status_at":"2025-02-13","hide_collections":null,"noindex":false,"emojis":[],"roles":[],"fields":[]},"status":{"id":"113998814324184078","created_at":"2025-02-13T21:57:41.150Z","in_reply_to_id":"113998814250739998","in_reply_to_account_id":"113998801242326861","sensitive":false,"spoiler_text":"","visibility":"direct","language":"ja","uri":"http://localhost:3000/users/mastodonpy_test_2/statuses/113998814324184078","url":"http://localhost:3000/@mastodonpy_test_2/113998814324184078","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"content":"\u003cp\u003e\u003cspan + class=\"h-card\" translate=\"no\"\u003e\u003ca href=\"http://localhost:3000/@mastodonpy_test\" + class=\"u-url mention\"\u003e@\u003cspan\u003emastodonpy_test\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e + pssssst!\u003c/p\u003e","filtered":[],"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"113998801391516277","username":"mastodonpy_test_2","acct":"mastodonpy_test_2","display_name":"","locked":false,"bot":false,"discoverable":true,"indexable":true,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@mastodonpy_test_2","uri":"http://localhost:3000/users/mastodonpy_test_2","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":0,"following_count":0,"statuses_count":2,"last_status_at":"2025-02-13","hide_collections":null,"noindex":false,"emojis":[],"roles":[],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}},{"id":"28","type":"mention","created_at":"2025-02-13T21:57:38.145Z","group_key":"ungrouped-28","account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"status":{"id":"113998814106163410","created_at":"2025-02-13T21:57:37.823Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/113998814106163410","url":"http://localhost:3000/@admin/113998814106163410","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"content":"\u003cp\u003e\u003cspan + class=\"h-card\" translate=\"no\"\u003e\u003ca href=\"http://localhost:3000/@mastodonpy_test\" + class=\"u-url mention\"\u003e@\u003cspan\u003emastodonpy_test\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e + beep beep I\u0026#39;m a jeep\u003c/p\u003e","filtered":[],"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}}]' headers: Cache-Control: - private, no-store Content-Length: - - '2654' + - '13277' Content-Security-Policy: - default-src 'none'; frame-ancestors 'none'; form-action 'none' Content-Type: - application/json; charset=utf-8 ETag: - - W/"2182823a710def7f7c79da25f5be23de" + - W/"9e92d438557c09e766c203fa15107b62" Link: - - ; rel="next", ; + - ; rel="next", ; rel="prev" Referrer-Policy: - strict-origin-when-cross-origin Server-Timing: - - cache_read.active_support;dur=0.09, sql.active_record;dur=3.26, cache_generate.active_support;dur=3.42, - cache_write.active_support;dur=0.14, instantiation.active_record;dur=1.19, - start_processing.action_controller;dur=0.01, cache_fetch_hit.active_support;dur=0.00, - render.active_model_serializers;dur=5.10, process_action.action_controller;dur=48.05 + - cache_read.active_support;dur=0.84, sql.active_record;dur=139.59, cache_generate.active_support;dur=34.82, + cache_write.active_support;dur=0.90, instantiation.active_record;dur=7.88, + start_processing.action_controller;dur=0.00, transaction.active_record;dur=11.42, + cache_fetch_hit.active_support;dur=0.02, render.active_model_serializers;dur=27.42, + process_action.action_controller;dur=289.86 X-Content-Type-Options: - nosniff X-Frame-Options: @@ -120,11 +135,11 @@ interactions: X-RateLimit-Remaining: - '299' X-RateLimit-Reset: - - '2025-02-13T22:00:00.485173Z' + - '2025-02-15T12:35:00.150581Z' X-Request-Id: - - f8656e97-dbb3-42ef-80d7-13b0aabfc8e4 + - c6fbdd8c-c91d-49d2-9ee0-cfa96e1bc86c X-Runtime: - - '0.073110' + - '0.367543' X-XSS-Protection: - '0' vary: @@ -146,14 +161,14 @@ interactions: User-Agent: - tests/v311 method: GET - uri: http://localhost:3000/api/v1/notifications/20 + uri: http://localhost:3000/api/v1/notifications/36 response: body: - string: '{"id":"20","type":"mention","created_at":"2025-02-13T21:56:17.717Z","group_key":"ungrouped-20","account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":0,"following_count":0,"statuses_count":1,"last_status_at":"2025-02-13","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"status":{"id":"113998808834483931","created_at":"2025-02-13T21:56:17.383Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/113998808834483931","url":"http://localhost:3000/@admin/113998808834483931","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"content":"\u003cp\u003e\u003cspan + string: '{"id":"36","type":"mention","created_at":"2025-02-15T12:34:22.380Z","group_key":"ungrouped-36","account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"status":{"id":"114007923875989611","created_at":"2025-02-15T12:34:21.888Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/114007923875989611","url":"http://localhost:3000/@admin/114007923875989611","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"content":"\u003cp\u003e\u003cspan class=\"h-card\" translate=\"no\"\u003e\u003ca href=\"http://localhost:3000/@mastodonpy_test\" class=\"u-url mention\"\u003e@\u003cspan\u003emastodonpy_test\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e hello!\u003c/p\u003e","filtered":[],"reblog":null,"application":{"name":"Mastodon.py - test suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":0,"following_count":0,"statuses_count":1,"last_status_at":"2025-02-13","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}}' + test suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":6,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}}' headers: Cache-Control: - private, no-store @@ -164,14 +179,14 @@ interactions: Content-Type: - application/json; charset=utf-8 ETag: - - W/"fe67381c47de18476c7c3f494d5792e5" + - W/"e35bcf37d0e1d8a56cde95fc0c4023e3" Referrer-Policy: - strict-origin-when-cross-origin Server-Timing: - - cache_read.active_support;dur=0.09, sql.active_record;dur=2.82, cache_generate.active_support;dur=2.87, - cache_write.active_support;dur=0.14, instantiation.active_record;dur=0.92, + - cache_read.active_support;dur=0.09, sql.active_record;dur=3.70, cache_generate.active_support;dur=7.35, + cache_write.active_support;dur=0.14, instantiation.active_record;dur=1.12, start_processing.action_controller;dur=0.00, cache_fetch_hit.active_support;dur=0.00, - render.active_model_serializers;dur=20.11, process_action.action_controller;dur=39.76 + render.active_model_serializers;dur=34.83, process_action.action_controller;dur=55.55 X-Content-Type-Options: - nosniff X-Frame-Options: @@ -183,11 +198,70 @@ interactions: X-RateLimit-Remaining: - '299' X-RateLimit-Reset: - - '2025-02-13T22:00:00.590939Z' + - '2025-02-15T12:35:00.668513Z' X-Request-Id: - - 5c62bde5-53c3-4cb2-8a26-5f2e315a1fd1 + - 17e476c9-7c46-42a0-8037-7b44d90d46ec X-Runtime: - - '0.055167' + - '0.076951' + X-XSS-Protection: + - '0' + vary: + - Authorization, Origin + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Authorization: + - Bearer __MASTODON_PY_TEST_ACCESS_TOKEN + Connection: + - keep-alive + User-Agent: + - tests/v311 + method: GET + uri: http://localhost:3000/api/v1/notifications/unread_count + response: + body: + string: '{"count":5}' + headers: + Cache-Control: + - private, no-store + Content-Length: + - '11' + Content-Security-Policy: + - default-src 'none'; frame-ancestors 'none'; form-action 'none' + Content-Type: + - application/json; charset=utf-8 + ETag: + - W/"a7b59f14220279bf034e35863bb5c8f0" + Referrer-Policy: + - strict-origin-when-cross-origin + Server-Timing: + - cache_read.active_support;dur=0.02, sql.active_record;dur=6.49, cache_generate.active_support;dur=0.88, + cache_write.active_support;dur=0.08, instantiation.active_record;dur=0.18, + start_processing.action_controller;dur=0.00, render.active_model_serializers;dur=0.10, + process_action.action_controller;dur=55.96 + X-Content-Type-Options: + - nosniff + X-Frame-Options: + - SAMEORIGIN + X-Permitted-Cross-Domain-Policies: + - none + X-RateLimit-Limit: + - '300' + X-RateLimit-Remaining: + - '299' + X-RateLimit-Reset: + - '2025-02-15T12:35:00.741907Z' + X-Request-Id: + - dbd86f5e-c491-4aa3-a428-038ba9834209 + X-Runtime: + - '0.071118' X-XSS-Protection: - '0' vary: @@ -211,12 +285,12 @@ interactions: User-Agent: - tests/v311 method: DELETE - uri: http://localhost:3000/api/v1/statuses/113998808834483931 + uri: http://localhost:3000/api/v1/statuses/114007923875989611 response: body: - string: '{"id":"113998808834483931","created_at":"2025-02-13T21:56:17.383Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/113998808834483931","url":"http://localhost:3000/@admin/113998808834483931","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"pinned":false,"text":"@mastodonpy_test + string: '{"id":"114007923875989611","created_at":"2025-02-15T12:34:21.888Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/admin/statuses/114007923875989611","url":"http://localhost:3000/@admin/114007923875989611","replies_count":0,"reblogs_count":0,"favourites_count":0,"edited_at":null,"favourited":false,"reblogged":false,"muted":false,"bookmarked":false,"pinned":false,"text":"@mastodonpy_test hello!","filtered":[],"reblog":null,"application":{"name":"Mastodon.py test - suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":0,"following_count":0,"statuses_count":0,"last_status_at":"2025-02-13","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}' + suite","website":null},"account":{"id":"113998800956287197","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"discoverable":null,"indexable":false,"group":false,"created_at":"2025-02-13T00:00:00.000Z","note":"","url":"http://localhost:3000/@admin","uri":"http://localhost:3000/users/admin","avatar":"http://localhost:3000/avatars/original/missing.png","avatar_static":"http://localhost:3000/avatars/original/missing.png","header":"http://localhost:3000/headers/original/missing.png","header_static":"http://localhost:3000/headers/original/missing.png","followers_count":1,"following_count":0,"statuses_count":5,"last_status_at":"2025-02-15","hide_collections":null,"noindex":false,"emojis":[],"roles":[{"id":"3","name":"Owner","color":""}],"fields":[]},"media_attachments":[],"mentions":[{"id":"113998801242326861","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}' headers: Cache-Control: - private, no-store @@ -227,14 +301,14 @@ interactions: Content-Type: - application/json; charset=utf-8 ETag: - - W/"a8f49551581806c5cd61b62aacb999fb" + - W/"eeb757b5b519fba1e4ad662536b433f4" Referrer-Policy: - strict-origin-when-cross-origin Server-Timing: - - cache_read.active_support;dur=0.05, sql.active_record;dur=5.97, cache_generate.active_support;dur=2.50, - cache_write.active_support;dur=0.15, instantiation.active_record;dur=0.84, - start_processing.action_controller;dur=0.00, transaction.active_record;dur=3.42, - render.active_model_serializers;dur=13.17, process_action.action_controller;dur=43.45 + - cache_read.active_support;dur=0.08, sql.active_record;dur=8.60, cache_generate.active_support;dur=4.16, + cache_write.active_support;dur=0.19, instantiation.active_record;dur=1.38, + start_processing.action_controller;dur=0.00, transaction.active_record;dur=4.53, + render.active_model_serializers;dur=61.14, process_action.action_controller;dur=97.75 X-Content-Type-Options: - nosniff X-Frame-Options: @@ -246,11 +320,11 @@ interactions: X-RateLimit-Remaining: - '29' X-RateLimit-Reset: - - '2025-02-13T22:00:00.651352Z' + - '2025-02-15T13:00:00.828004Z' X-Request-Id: - - 54b06215-e8a7-4286-b196-2aa5796f563a + - 3d8a3cdb-d852-439c-8cc7-5cd787f7c749 X-Runtime: - - '0.057846' + - '0.121283' X-XSS-Protection: - '0' vary: diff --git a/tests/test_notifications.py b/tests/test_notifications.py index dd7091e..97afade 100644 --- a/tests/test_notifications.py +++ b/tests/test_notifications.py @@ -15,6 +15,7 @@ def test_notifications(api, mention): notifications = api.notifications() assert api.notifications(notifications[0]) assert notifications[0].status.id == mention.id + assert api.notifications_unread_count().count > 0 @pytest.mark.vcr() def test_notifications_mentions_only(api, mention):