From 30eb63261ca5964222f5a2c5f03d6bd537fac987 Mon Sep 17 00:00:00 2001 From: Lorenz Diener Date: Fri, 11 Oct 2019 21:51:28 +0200 Subject: [PATCH] Implement new notification dismiss behaviour, add test for old behaviour --- mastodon/Mastodon.py | 12 ++- .../cassettes/test_notifications_dismiss.yaml | 73 ++++++++++++++----- tests/test_notifications.py | 8 +- 3 files changed, 69 insertions(+), 24 deletions(-) diff --git a/mastodon/Mastodon.py b/mastodon/Mastodon.py index b34e9d4..91f5125 100644 --- a/mastodon/Mastodon.py +++ b/mastodon/Mastodon.py @@ -1795,15 +1795,19 @@ class Mastodon: self.__api_request('POST', '/api/v1/notifications/clear') - @api_version("1.3.0", "1.3.0", "1.3.0") + @api_version("1.3.0", "2.9.2", "2.9.2") def notifications_dismiss(self, id): """ Deletes a single notification """ id = self.__unpack_id(id) - params = self.__generate_params(locals()) - self.__api_request('POST', '/api/v1/notifications/dismiss', params) - + + if self.verify_minimum_version("2.9.2"): + url = '/api/v1/notifications/{0}/dismiss'.format(str(id)) + return self.__api_request('POST', '/api/v1/notifications/dismiss', params) + else: + params = self.__generate_params(locals()) + self.__api_request('POST', '/api/v1/notifications/dismiss', params) ### # Writing data: Conversations diff --git a/tests/cassettes/test_notifications_dismiss.yaml b/tests/cassettes/test_notifications_dismiss.yaml index 25c31e2..a7af8d2 100644 --- a/tests/cassettes/test_notifications_dismiss.yaml +++ b/tests/cassettes/test_notifications_dismiss.yaml @@ -12,11 +12,11 @@ interactions: method: POST uri: http://localhost:3000/api/v1/statuses response: - body: {string: '{"id":"102317291057725861","created_at":"2019-06-22T21:12:41.706Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost/users/admin/statuses/102317291057725861","url":"http://localhost/@admin/102317291057725861","replies_count":0,"reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"content":"\u003cp\u003e\u003cspan + body: {string: '{"id":"102945481191655042","created_at":"2019-10-11T19:49:42.450Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost/users/admin/statuses/102945481191655042","url":"http://localhost/@admin/102945481191655042","replies_count":0,"reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"content":"\u003cp\u003e\u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost/@mastodonpy_test\" class=\"u-url mention\"\u003e@\u003cspan\u003emastodonpy_test\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e hello!\u003c/p\u003e","reblog":null,"application":{"name":"Mastodon.py test - suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":17,"emojis":[],"fields":[]},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}'} + suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":20,"emojis":[],"fields":[]},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}'} headers: Cache-Control: ['no-cache, no-store'] Content-Type: [application/json; charset=utf-8] @@ -27,8 +27,8 @@ interactions: X-Download-Options: [noopen] X-Frame-Options: [SAMEORIGIN] X-Permitted-Cross-Domain-Policies: [none] - X-Request-Id: [93a5beb9-f93d-4498-a0a6-c08258d72d95] - X-Runtime: ['0.229491'] + X-Request-Id: [116f5b2b-1d95-4382-9c2c-cc392a5f684c] + X-Runtime: ['0.211426'] X-XSS-Protection: [1; mode=block] content-length: ['1488'] status: {code: 200, message: OK} @@ -43,16 +43,22 @@ interactions: method: GET uri: http://localhost:3000/api/v1/notifications response: - body: {string: '[{"id":"112","type":"mention","created_at":"2019-06-22T21:12:41.829Z","account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":17,"emojis":[],"fields":[]},"status":{"id":"102317291057725861","created_at":"2019-06-22T21:12:41.706Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost/users/admin/statuses/102317291057725861","url":"http://localhost/@admin/102317291057725861","replies_count":0,"reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"content":"\u003cp\u003e\u003cspan + body: {string: '[{"id":"124","type":"mention","created_at":"2019-10-11T19:49:42.579Z","account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":20,"emojis":[],"fields":[]},"status":{"id":"102945481191655042","created_at":"2019-10-11T19:49:42.450Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost/users/admin/statuses/102945481191655042","url":"http://localhost/@admin/102945481191655042","replies_count":0,"reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"content":"\u003cp\u003e\u003cspan class=\"h-card\"\u003e\u003ca href=\"http://localhost/@mastodonpy_test\" class=\"u-url mention\"\u003e@\u003cspan\u003emastodonpy_test\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e hello!\u003c/p\u003e","reblog":null,"application":{"name":"Mastodon.py test - suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":17,"emojis":[],"fields":[]},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}}]'} + suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":20,"emojis":[],"fields":[]},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}},{"id":"120","type":"poll","created_at":"2019-06-22T21:18:06.944Z","account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":20,"emojis":[],"fields":[]},"status":{"id":"102317292327454763","created_at":"2019-06-22T21:13:01.083Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost/users/admin/statuses/102317292327454763","url":"http://localhost/@admin/102317292327454763","replies_count":0,"reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"content":"\u003cp\u003enice\u003c/p\u003e","reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":20,"emojis":[],"fields":[]},"media_attachments":[],"mentions":[],"tags":[],"emojis":[],"card":null,"poll":{"id":"16","expires_at":"2019-06-22T21:18:01.074Z","expired":true,"multiple":false,"votes_count":1,"voted":true,"options":[{"title":"four + twenty","votes_count":0},{"title":"sixty-nine","votes_count":1}],"emojis":[]}}},{"id":"115","type":"mention","created_at":"2019-06-22T21:13:26.829Z","account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":20,"emojis":[],"fields":[]},"status":{"id":"102317294005876209","created_at":"2019-06-22T21:13:26.706Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost/users/admin/statuses/102317294005876209","url":"http://localhost/@admin/102317294005876209","replies_count":0,"reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"content":"\u003cp\u003e\u003cspan + class=\"h-card\"\u003e\u003ca href=\"http://localhost/@mastodonpy_test\" class=\"u-url + mention\"\u003e@\u003cspan\u003emastodonpy_test\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e + beep beep I\u0026apos;m a jeep\u003c/p\u003e","reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":20,"emojis":[],"fields":[]},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}}]'} headers: Cache-Control: ['no-cache, no-store'] Content-Type: [application/json; charset=utf-8] - Link: ['; rel="next", - ; rel="prev"'] + Link: ['; rel="next", + ; rel="prev"'] Referrer-Policy: [strict-origin-when-cross-origin] Transfer-Encoding: [chunked] Vary: ['Accept-Encoding, Origin'] @@ -60,13 +66,42 @@ interactions: X-Download-Options: [noopen] X-Frame-Options: [SAMEORIGIN] X-Permitted-Cross-Domain-Policies: [none] - X-Request-Id: [a381923e-e73f-479f-acea-eae201792ae7] - X-Runtime: ['0.095464'] + X-Request-Id: [e8ea61bd-7565-4392-9a7a-e6152a5635d1] + X-Runtime: ['0.126201'] X-XSS-Protection: [1; mode=block] - content-length: ['2089'] + content-length: ['6180'] status: {code: 200, message: OK} - request: - body: id=112 + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer __MASTODON_PY_TEST_ACCESS_TOKEN] + Connection: [keep-alive] + User-Agent: [python-requests/2.18.4] + method: GET + uri: http://localhost:3000/api/v1/instance/ + response: + body: {string: '{"uri":"localhost","title":"Mastodon","description":"","email":"","version":"2.9.1","urls":{"streaming_api":"ws://localhost:4000"},"stats":{"user_count":3,"status_count":21,"domain_count":0},"thumbnail":"http://localhost/packs/media/images/preview-9a17d32fc48369e8ccd910a75260e67d.jpg","languages":["en"],"registrations":true,"contact_account":null}'} + headers: + Cache-Control: ['max-age=300, public'] + Content-Type: [application/json; charset=utf-8] + Date: ['Fri, 11 Oct 2019 19:49:42 GMT'] + ETag: [W/"b6028559f8312dda8add94d97903ca58"] + Referrer-Policy: [strict-origin-when-cross-origin] + Transfer-Encoding: [chunked] + Vary: ['Accept-Encoding, Origin'] + X-Content-Type-Options: [nosniff] + X-Download-Options: [noopen] + X-Frame-Options: [SAMEORIGIN] + X-Permitted-Cross-Domain-Policies: [none] + X-Request-Id: [866137ef-767a-4738-aaf8-687d0b5f6062] + X-Runtime: ['0.054816'] + X-XSS-Protection: [1; mode=block] + content-length: ['349'] + status: {code: 200, message: OK} +- request: + body: id=124 headers: Accept: ['*/*'] Accept-Encoding: ['gzip, deflate'] @@ -89,8 +124,8 @@ interactions: X-Download-Options: [noopen] X-Frame-Options: [SAMEORIGIN] X-Permitted-Cross-Domain-Policies: [none] - X-Request-Id: [6d7d73d4-f824-4b47-805f-1552bc92f7d8] - X-Runtime: ['0.041361'] + X-Request-Id: [3e179fba-39e7-4e2c-b58e-db7dc3fa2f03] + X-Runtime: ['0.038802'] X-XSS-Protection: [1; mode=block] content-length: ['2'] status: {code: 200, message: OK} @@ -104,10 +139,10 @@ interactions: Content-Length: ['0'] User-Agent: [python-requests/2.18.4] method: DELETE - uri: http://localhost:3000/api/v1/statuses/102317291057725861 + uri: http://localhost:3000/api/v1/statuses/102945481191655042 response: - body: {string: '{"id":"102317291057725861","created_at":"2019-06-22T21:12:41.706Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost/users/admin/statuses/102317291057725861","url":"http://localhost/@admin/102317291057725861","replies_count":0,"reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"text":"@mastodonpy_test - hello!","reblog":null,"application":{"name":"Mastodon.py test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":17,"emojis":[],"fields":[]},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}'} + body: {string: '{"id":"102945481191655042","created_at":"2019-10-11T19:49:42.450Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost/users/admin/statuses/102945481191655042","url":"http://localhost/@admin/102945481191655042","replies_count":0,"reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"text":"@mastodonpy_test + hello!","reblog":null,"application":{"name":"Mastodon.py test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"bot":false,"created_at":"2019-06-22T12:42:50.096Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost/@admin","avatar":"http://localhost/avatars/original/missing.png","avatar_static":"http://localhost/avatars/original/missing.png","header":"http://localhost/headers/original/missing.png","header_static":"http://localhost/headers/original/missing.png","followers_count":2,"following_count":1,"statuses_count":20,"emojis":[],"fields":[]},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[],"card":null,"poll":null}'} headers: Cache-Control: ['no-cache, no-store'] Content-Type: [application/json; charset=utf-8] @@ -118,8 +153,8 @@ interactions: X-Download-Options: [noopen] X-Frame-Options: [SAMEORIGIN] X-Permitted-Cross-Domain-Policies: [none] - X-Request-Id: [d8419c44-3f0a-4c22-b486-fe69128ad00a] - X-Runtime: ['0.137253'] + X-Request-Id: [881b7e0e-4ee4-485c-9b01-746d55c0d4f7] + X-Runtime: ['0.070719'] X-XSS-Protection: [1; mode=block] content-length: ['1281'] status: {code: 200, message: OK} diff --git a/tests/test_notifications.py b/tests/test_notifications.py index 87c898a..3032519 100644 --- a/tests/test_notifications.py +++ b/tests/test_notifications.py @@ -1,4 +1,5 @@ import pytest +import vcr @pytest.fixture() def mention(api2): @@ -14,7 +15,12 @@ def test_notifications(api, mention): @pytest.mark.vcr() def test_notifications_dismiss(api, mention): notifications = api.notifications() - api.notifications_dismiss(notifications[0]) + api.notifications_dismiss(notifications[0]) # TODO possibly verify that this returns a notif dict + +def test_notifications_dismiss_pre_2_9_2(api, mention): + with vcr.use_cassette('test_notifications_dismiss.yaml', cassette_library_dir='tests/cassettes_pre_2_9_2', record_mode='none'): + notifications = api.notifications() + api.notifications_dismiss(notifications[0]) @pytest.mark.vcr() def test_notifications_clear(api):