From 3864bbe0859e6c010a3a796467fd48d896734644 Mon Sep 17 00:00:00 2001 From: Lorenz Diener Date: Sun, 6 May 2018 02:00:18 +0200 Subject: [PATCH] More streaming tests --- tests/cassettes/test_stream_user.yaml | 100 ++++++----- tests/cassettes/test_stream_user_local.yaml | 178 ++++++++++++++++++++ tests/test_streaming.py | 54 +++++- 3 files changed, 284 insertions(+), 48 deletions(-) create mode 100644 tests/cassettes/test_stream_user_local.yaml diff --git a/tests/cassettes/test_stream_user.yaml b/tests/cassettes/test_stream_user.yaml index eb378d2..52174df 100644 --- a/tests/cassettes/test_stream_user.yaml +++ b/tests/cassettes/test_stream_user.yaml @@ -10,17 +10,17 @@ interactions: method: GET uri: http://localhost:3000/api/v1/instance/ response: - body: {string: '{"uri":"localhost:3000","title":"Mastodon","description":"","email":"","version":"2.3.3","urls":{"streaming_api":"ws://localhost:4000"},"stats":{"user_count":2,"status_count":163,"domain_count":0},"thumbnail":"http://localhost:3000/packs/preview.jpg","languages":["en"],"contact_account":null}'} + body: {string: '{"uri":"localhost:3000","title":"Mastodon","description":"","email":"","version":"2.3.3","urls":{"streaming_api":"ws://localhost:4000"},"stats":{"user_count":2,"status_count":171,"domain_count":0},"thumbnail":"http://localhost:3000/packs/preview.jpg","languages":["en"],"contact_account":null}'} headers: Cache-Control: ['max-age=0, private, must-revalidate'] Content-Type: [application/json; charset=utf-8] - ETag: [W/"2cc4eba842d06668a5e9f36dd5e75e0b"] + ETag: [W/"0283a67545a9e43efc083c8db0db67d5"] Transfer-Encoding: [chunked] Vary: ['Accept-Encoding, Origin'] X-Content-Type-Options: [nosniff] X-Frame-Options: [SAMEORIGIN] - X-Request-Id: [58fc9460-3f90-4bdc-bfae-97b4792cdf72] - X-Runtime: ['0.030782'] + X-Request-Id: [20bc305c-8462-4fba-bdac-4e613388a8f7] + X-Runtime: ['0.037274'] X-XSS-Protection: [1; mode=block] content-length: ['293'] status: {code: 200, message: OK} @@ -37,21 +37,21 @@ interactions: method: POST uri: http://localhost:3000/api/v1/statuses response: - body: {string: '{"id":"99979315699876567","created_at":"2018-05-05T23:34:48.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/mastodonpy_test/statuses/99979315699876567","content":"\u003cp\u003eonly - real cars respond.\u003c/p\u003e","url":"http://localhost:3000/@mastodonpy_test/99979315699876567","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py + body: {string: '{"id":"99979409266681372","created_at":"2018-05-05T23:58:36.604Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/mastodonpy_test/statuses/99979409266681372","content":"\u003cp\u003eonly + real cars respond.\u003c/p\u003e","url":"http://localhost:3000/@mastodonpy_test/99979409266681372","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py test suite","website":null},"account":{"id":"1234567890123456","username":"mastodonpy_test","acct":"mastodonpy_test","display_name":"John Lennon","locked":true,"created_at":"2018-04-18T20:04:06.511Z","note":"\u003cp\u003eI - walk funny\u003c/p\u003e","url":"http://localhost:3000/@mastodonpy_test","avatar":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","avatar_static":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","header":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","header_static":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","followers_count":0,"following_count":0,"statuses_count":126},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]}'} + walk funny\u003c/p\u003e","url":"http://localhost:3000/@mastodonpy_test","avatar":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","avatar_static":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","header":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","header_static":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","followers_count":0,"following_count":0,"statuses_count":128},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]}'} headers: Cache-Control: ['max-age=0, private, must-revalidate'] Content-Type: [application/json; charset=utf-8] - ETag: [W/"3c8a52db795c6a852e9e7a21e7d912f4"] + ETag: [W/"3d64477a2e2beb52c14baba51ccd1490"] Transfer-Encoding: [chunked] Vary: ['Accept-Encoding, Origin'] X-Content-Type-Options: [nosniff] X-Frame-Options: [SAMEORIGIN] - X-Request-Id: [1f6725bf-2550-450f-bba5-d3967b33b7dc] - X-Runtime: ['0.147682'] + X-Request-Id: [0eb11335-9d45-4842-800d-dc4a2bb100dd] + X-Runtime: ['0.161381'] X-XSS-Protection: [1; mode=block] content-length: ['1416'] status: {code: 200, message: OK} @@ -68,21 +68,21 @@ interactions: method: POST uri: http://localhost:3000/api/v1/statuses response: - body: {string: '{"id":"99979315714058991","created_at":"2018-05-05T23:34:49.170Z","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/99979315714058991","content":"\u003cp\u003e\u003cspan + body: {string: '{"id":"99979409284606875","created_at":"2018-05-05T23:58:36.908Z","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/99979409284606875","content":"\u003cp\u003e\u003cspan class=\"h-card\"\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\u0026apos;m a jeep\u003c/p\u003e","url":"http://localhost:3000/@admin/99979315714058991","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py - test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"created_at":"2018-04-17T21:40:55.626Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost:3000/@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":39},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[]}'} + beep beep I\u0026apos;m a jeep\u003c/p\u003e","url":"http://localhost:3000/@admin/99979409284606875","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"created_at":"2018-04-17T21:40:55.626Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost:3000/@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":45},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[]}'} headers: Cache-Control: ['max-age=0, private, must-revalidate'] Content-Type: [application/json; charset=utf-8] - ETag: [W/"9852f6d00e1e9011caad26f718aa286a"] + ETag: [W/"cf7a8881dce33f2860b9710db188792e"] Transfer-Encoding: [chunked] Vary: ['Accept-Encoding, Origin'] X-Content-Type-Options: [nosniff] X-Frame-Options: [SAMEORIGIN] - X-Request-Id: [703ca6b3-f3c1-4157-96d0-34c07140c177] - X-Runtime: ['0.348615'] + X-Request-Id: [aa1e3b21-7389-4099-80cd-2e148564b91f] + X-Runtime: ['0.478716'] X-XSS-Protection: [1; mode=block] content-length: ['1476'] status: {code: 200, message: OK} @@ -99,22 +99,48 @@ interactions: method: POST uri: http://localhost:3000/api/v1/statuses response: - body: {string: '{"id":"99979315736933684","created_at":"2018-05-05T23:34:49.488Z","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/99979315736933684","content":"\u003cp\u003eon - the internet, nobody knows you\u0026apos;re a plane\u003c/p\u003e","url":"http://localhost:3000/@admin/99979315736933684","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py - test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"created_at":"2018-04-17T21:40:55.626Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost:3000/@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":40},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]}'} + body: {string: '{"id":"99979409315536647","created_at":"2018-05-05T23:58:37.370Z","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/99979409315536647","content":"\u003cp\u003eon + the internet, nobody knows you\u0026apos;re a plane\u003c/p\u003e","url":"http://localhost:3000/@admin/99979409315536647","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"created_at":"2018-04-17T21:40:55.626Z","note":"\u003cp\u003e\u003c/p\u003e","url":"http://localhost:3000/@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":46},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]}'} headers: Cache-Control: ['max-age=0, private, must-revalidate'] Content-Type: [application/json; charset=utf-8] - ETag: [W/"28991dfce9a4da45ed0bc7c886a05ac7"] + ETag: [W/"9f9d619a35ba2872a5aea194e6f87f60"] Transfer-Encoding: [chunked] Vary: ['Accept-Encoding, Origin'] X-Content-Type-Options: [nosniff] X-Frame-Options: [SAMEORIGIN] - X-Request-Id: [1bc22f75-7163-44f7-9e7f-696b7da28fc8] - X-Runtime: ['0.279044'] + X-Request-Id: [ac2b5974-2346-4bbc-b7e5-4e856736f202] + X-Runtime: ['0.351930'] X-XSS-Protection: [1; mode=block] content-length: ['1175'] status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer __MASTODON_PY_TEST_ACCESS_TOKEN] + Connection: [keep-alive] + Content-Length: ['0'] + User-Agent: [python-requests/2.9.1] + method: DELETE + uri: http://localhost:3000/api/v1/statuses/99979409266681372 + response: + body: {string: '{}'} + headers: + Cache-Control: ['max-age=0, private, must-revalidate'] + Content-Type: [application/json; charset=utf-8] + ETag: [W/"902f10b5792b4c6bb0671da661310919"] + Transfer-Encoding: [chunked] + Vary: ['Accept-Encoding, Origin'] + X-Content-Type-Options: [nosniff] + X-Frame-Options: [SAMEORIGIN] + X-Request-Id: [2750fe2f-27eb-41ac-9dc2-d27dbdb25361] + X-Runtime: ['0.072466'] + X-XSS-Protection: [1; mode=block] + content-length: ['2'] + status: {code: 200, message: OK} - request: body: null headers: @@ -128,28 +154,24 @@ interactions: response: body: {string: 'event: update - data: {"id":"99979315699876567","created_at":"2018-05-05T23:34:48.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/mastodonpy_test/statuses/99979315699876567","content":"

only - real cars respond.

","url":"http://localhost:3000/@mastodonpy_test/99979315699876567","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py + data: {"id":"99979409266681372","created_at":"2018-05-05T23:58:36.604Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"en","uri":"http://localhost:3000/users/mastodonpy_test/statuses/99979409266681372","content":"

only + real cars respond.

","url":"http://localhost:3000/@mastodonpy_test/99979409266681372","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py test suite","website":null},"account":{"id":"1234567890123456","username":"mastodonpy_test","acct":"mastodonpy_test","display_name":"John Lennon","locked":true,"created_at":"2018-04-18T20:04:06.511Z","note":"

I - walk funny

","url":"http://localhost:3000/@mastodonpy_test","avatar":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","avatar_static":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","header":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","header_static":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","followers_count":0,"following_count":0,"statuses_count":126},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]} - - - event: update - - data: {"id":"99979315699876567","created_at":"2018-05-05T23:34:48.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/mastodonpy_test/statuses/99979315699876567","content":"

only - real cars respond.

","url":"http://localhost:3000/@mastodonpy_test/99979315699876567","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py - test suite","website":null},"account":{"id":"1234567890123456","username":"mastodonpy_test","acct":"mastodonpy_test","display_name":"John - Lennon","locked":true,"created_at":"2018-04-18T20:04:06.511Z","note":"

I - walk funny

","url":"http://localhost:3000/@mastodonpy_test","avatar":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","avatar_static":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","header":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","header_static":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","followers_count":0,"following_count":0,"statuses_count":126},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]} + walk funny

","url":"http://localhost:3000/@mastodonpy_test","avatar":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","avatar_static":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","header":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","header_static":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","followers_count":0,"following_count":0,"statuses_count":128},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]} event: notification - data: {"id":"98","type":"mention","created_at":"2018-05-05T23:34:49.249Z","account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"created_at":"2018-04-17T21:40:55.626Z","note":"

","url":"http://localhost:3000/@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":39},"status":{"id":"99979315714058991","created_at":"2018-05-05T23:34:49.170Z","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/99979315714058991","content":"

","url":"http://localhost:3000/@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":45},"status":{"id":"99979409284606875","created_at":"2018-05-05T23:58:36.908Z","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/99979409284606875","content":"

@mastodonpy_test beep beep I'm a jeep

","url":"http://localhost:3000/@admin/99979315714058991","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"reblog":null,"application":{"name":"Mastodon.py - test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"created_at":"2018-04-17T21:40:55.626Z","note":"

","url":"http://localhost:3000/@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":39},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[]}} + mention\">@mastodonpy_test beep beep I'm a jeep

","url":"http://localhost:3000/@admin/99979409284606875","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"1","username":"admin","acct":"admin","display_name":"","locked":false,"created_at":"2018-04-17T21:40:55.626Z","note":"

","url":"http://localhost:3000/@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":45},"media_attachments":[],"mentions":[{"id":"1234567890123456","username":"mastodonpy_test","url":"http://localhost:3000/@mastodonpy_test","acct":"mastodonpy_test"}],"tags":[],"emojis":[]}} + + + event: delete + + data: 99979409266681372 '} @@ -159,9 +181,9 @@ interactions: Access-Control-Allow-Origin: ['*'] Connection: [keep-alive] Content-Type: [text/event-stream] - Date: ['Sat, 05 May 2018 23:34:49 GMT'] + Date: ['Sat, 05 May 2018 23:58:36 GMT'] Transfer-Encoding: [chunked] X-Powered-By: [Express] - X-Request-Id: [6ad697a2-e602-43fd-84b6-7676c3355d8f] + X-Request-Id: [bc14a253-bae4-436f-b7e4-420a9a9378c9] status: {code: 200, message: OK} version: 1 diff --git a/tests/cassettes/test_stream_user_local.yaml b/tests/cassettes/test_stream_user_local.yaml new file mode 100644 index 0000000..0b7b172 --- /dev/null +++ b/tests/cassettes/test_stream_user_local.yaml @@ -0,0 +1,178 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer __MASTODON_PY_TEST_ACCESS_TOKEN] + Connection: [keep-alive] + User-Agent: [python-requests/2.9.1] + method: GET + uri: http://localhost:3000/api/v1/instance/ + response: + body: {string: '{"uri":"localhost:3000","title":"Mastodon","description":"","email":"","version":"2.3.3","urls":{"streaming_api":"ws://localhost:4000"},"stats":{"user_count":2,"status_count":168,"domain_count":0},"thumbnail":"http://localhost:3000/packs/preview.jpg","languages":["en"],"contact_account":null}'} + headers: + Cache-Control: ['max-age=0, private, must-revalidate'] + Content-Type: [application/json; charset=utf-8] + ETag: [W/"9dcdc369320d2f0c962f1a06daed8db9"] + Transfer-Encoding: [chunked] + Vary: ['Accept-Encoding, Origin'] + X-Content-Type-Options: [nosniff] + X-Frame-Options: [SAMEORIGIN] + X-Request-Id: [2429f21b-a558-47f9-8bd3-4d3084a2680b] + X-Runtime: ['0.041377'] + X-XSS-Protection: [1; mode=block] + content-length: ['293'] + status: {code: 200, message: OK} +- request: + body: status=it%27s+cool+guy + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer __MASTODON_PY_TEST_ACCESS_TOKEN] + Connection: [keep-alive] + Content-Length: ['22'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.9.1] + method: POST + uri: http://localhost:3000/api/v1/statuses + response: + body: {string: '{"id":"99979403680236480","created_at":"2018-05-05T23:57:11.361Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"fy","uri":"http://localhost:3000/users/mastodonpy_test/statuses/99979403680236480","content":"\u003cp\u003eit\u0026apos;s + cool guy\u003c/p\u003e","url":"http://localhost:3000/@mastodonpy_test/99979403680236480","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"1234567890123456","username":"mastodonpy_test","acct":"mastodonpy_test","display_name":"John + Lennon","locked":true,"created_at":"2018-04-18T20:04:06.511Z","note":"\u003cp\u003eI + walk funny\u003c/p\u003e","url":"http://localhost:3000/@mastodonpy_test","avatar":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","avatar_static":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","header":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","header_static":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","followers_count":0,"following_count":0,"statuses_count":127},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]}'} + headers: + Cache-Control: ['max-age=0, private, must-revalidate'] + Content-Type: [application/json; charset=utf-8] + ETag: [W/"121605cb0579eff7d8201d992e4d2cb1"] + Transfer-Encoding: [chunked] + Vary: ['Accept-Encoding, Origin'] + X-Content-Type-Options: [nosniff] + X-Frame-Options: [SAMEORIGIN] + X-Request-Id: [e3123208-a5d0-47b5-82f4-fef3bc5054a5] + X-Runtime: ['0.147603'] + X-XSS-Protection: [1; mode=block] + content-length: ['1416'] + 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: [python-requests/2.9.1] + method: GET + uri: http://localhost:4000/api/v1/streaming/user + response: + body: {string: 'event: update + + data: {"id":"99979403680236480","created_at":"2018-05-05T23:57:11.361Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"fy","uri":"http://localhost:3000/users/mastodonpy_test/statuses/99979403680236480","content":"

it's + cool guy

","url":"http://localhost:3000/@mastodonpy_test/99979403680236480","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"1234567890123456","username":"mastodonpy_test","acct":"mastodonpy_test","display_name":"John + Lennon","locked":true,"created_at":"2018-04-18T20:04:06.511Z","note":"

I + walk funny

","url":"http://localhost:3000/@mastodonpy_test","avatar":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","avatar_static":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","header":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","header_static":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","followers_count":0,"following_count":0,"statuses_count":127},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]} + + +'} + headers: + Access-Control-Allow-Headers: ['Authorization, Accept, Cache-Control'] + Access-Control-Allow-Methods: ['GET, OPTIONS'] + Access-Control-Allow-Origin: ['*'] + Connection: [keep-alive] + Content-Type: [text/event-stream] + Date: ['Sat, 05 May 2018 23:57:11 GMT'] + Transfer-Encoding: [chunked] + X-Powered-By: [Express] + X-Request-Id: [78347150-7ae6-453d-a423-187c71c50b2b] + 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: [python-requests/2.9.1] + method: GET + uri: http://localhost:3000/api/v1/instance/ + response: + body: {string: '{"uri":"localhost:3000","title":"Mastodon","description":"","email":"","version":"2.3.3","urls":{"streaming_api":"ws://localhost:4000"},"stats":{"user_count":2,"status_count":173,"domain_count":0},"thumbnail":"http://localhost:3000/packs/preview.jpg","languages":["en"],"contact_account":null}'} + headers: + Cache-Control: ['max-age=0, private, must-revalidate'] + Content-Type: [application/json; charset=utf-8] + ETag: [W/"4ea0e36d646260365a2d1414798974a6"] + Transfer-Encoding: [chunked] + Vary: ['Accept-Encoding, Origin'] + X-Content-Type-Options: [nosniff] + X-Frame-Options: [SAMEORIGIN] + X-Request-Id: [e8c8246d-d382-41d9-b7f1-d11fb0b74711] + X-Runtime: ['0.455622'] + X-XSS-Protection: [1; mode=block] + content-length: ['293'] + status: {code: 200, message: OK} +- request: + body: status=it%27s+cool+guy + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer __MASTODON_PY_TEST_ACCESS_TOKEN] + Connection: [keep-alive] + Content-Length: ['22'] + Content-Type: [application/x-www-form-urlencoded] + User-Agent: [python-requests/2.9.1] + method: POST + uri: http://localhost:3000/api/v1/statuses + response: + body: {string: '{"id":"99979411114866656","created_at":"2018-05-05T23:59:04.956Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"fy","uri":"http://localhost:3000/users/mastodonpy_test/statuses/99979411114866656","content":"\u003cp\u003eit\u0026apos;s + cool guy\u003c/p\u003e","url":"http://localhost:3000/@mastodonpy_test/99979411114866656","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"1234567890123456","username":"mastodonpy_test","acct":"mastodonpy_test","display_name":"John + Lennon","locked":true,"created_at":"2018-04-18T20:04:06.511Z","note":"\u003cp\u003eI + walk funny\u003c/p\u003e","url":"http://localhost:3000/@mastodonpy_test","avatar":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","avatar_static":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","header":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","header_static":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","followers_count":0,"following_count":0,"statuses_count":128},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]}'} + headers: + Cache-Control: ['max-age=0, private, must-revalidate'] + Content-Type: [application/json; charset=utf-8] + ETag: [W/"37bc69af5d0ef985756917c50ebd21e9"] + Transfer-Encoding: [chunked] + Vary: ['Accept-Encoding, Origin'] + X-Content-Type-Options: [nosniff] + X-Frame-Options: [SAMEORIGIN] + X-Request-Id: [64080bdc-dd95-409c-a2ac-b24b5207ca86] + X-Runtime: ['0.553667'] + X-XSS-Protection: [1; mode=block] + content-length: ['1416'] + 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: [python-requests/2.9.1] + method: GET + uri: http://localhost:4000/api/v1/streaming/user + response: + body: {string: 'event: update + + data: {"id":"99979411114866656","created_at":"2018-05-05T23:59:04.956Z","in_reply_to_id":null,"in_reply_to_account_id":null,"sensitive":false,"spoiler_text":"","visibility":"public","language":"fy","uri":"http://localhost:3000/users/mastodonpy_test/statuses/99979411114866656","content":"

it's + cool guy

","url":"http://localhost:3000/@mastodonpy_test/99979411114866656","reblogs_count":0,"favourites_count":0,"favourited":false,"reblogged":false,"muted":false,"pinned":false,"reblog":null,"application":{"name":"Mastodon.py + test suite","website":null},"account":{"id":"1234567890123456","username":"mastodonpy_test","acct":"mastodonpy_test","display_name":"John + Lennon","locked":true,"created_at":"2018-04-18T20:04:06.511Z","note":"

I + walk funny

","url":"http://localhost:3000/@mastodonpy_test","avatar":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","avatar_static":"http://localhost:3000/system/accounts/avatars/123/456/789/012/345/original/mastodonpyupload_.jpe","header":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","header_static":"http://localhost:3000/system/accounts/headers/123/456/789/012/345/original/mastodonpyupload_.jpe","followers_count":0,"following_count":0,"statuses_count":128},"media_attachments":[],"mentions":[],"tags":[],"emojis":[]} + + +'} + headers: + Access-Control-Allow-Headers: ['Authorization, Accept, Cache-Control'] + Access-Control-Allow-Methods: ['GET, OPTIONS'] + Access-Control-Allow-Origin: ['*'] + Connection: [keep-alive] + Content-Type: [text/event-stream] + Date: ['Sat, 05 May 2018 23:59:05 GMT'] + Transfer-Encoding: [chunked] + X-Powered-By: [Express] + X-Request-Id: [824c3f23-264a-44cd-8c2a-55bf888c5ed3] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/test_streaming.py b/tests/test_streaming.py index 8c2160a..08d05b3 100644 --- a/tests/test_streaming.py +++ b/tests/test_streaming.py @@ -257,9 +257,11 @@ def test_stream_user(api, api2): updates = [] notifications = [] + deletes = [] listener = CallbackStreamListener( update_handler = lambda x: updates.append(x), - notification_handler = lambda x: notifications.append(x) + notification_handler = lambda x: notifications.append(x), + delete_handler = lambda x: deletes.append(x) ) posted = [] @@ -268,6 +270,46 @@ def test_stream_user(api, api2): posted.append(api.status_post("only real cars respond.")) posted.append(api2.status_post("@mastodonpy_test beep beep I'm a jeep")) posted.append(api2.status_post("on the internet, nobody knows you're a plane")) + time.sleep(1) + api.status_delete(posted[0]) + time.sleep(2) + streamingClose() + + t = threading.Thread(args=(), target=do_activities) + t.start() + + stream = None + try: + stream = api.stream_user(listener, run_async=True) + time.sleep(13) + finally: + if stream != None: + stream.close() + + assert len(updates) == 1 + assert len(notifications) == 1 + assert len(deletes) == 1 + + assert updates[0].id == posted[0].id + assert deletes[0] == posted[0].id + assert notifications[0].status.id == posted[1].id + + t.join() + +@pytest.mark.vcr(match_on=['path']) +def test_stream_user_local(api, api2): + patchStreaming() + + updates = [] + notifications = [] + listener = CallbackStreamListener( + local_update_handler = lambda x: updates.append(x), + ) + + posted = [] + def do_activities(): + time.sleep(5) + posted.append(api.status_post("it's cool guy")) time.sleep(3) streamingClose() @@ -282,13 +324,7 @@ def test_stream_user(api, api2): if stream != None: stream.close() - assert len(updates) == 2 - assert len(notifications) == 1 - + assert len(updates) == 1 assert updates[0].id == posted[0].id - assert updates[1].id == posted[0].id - assert notifications[0].status.id == posted[1].id - t.join() - - \ No newline at end of file + t.join() \ No newline at end of file