From 3864bbe0859e6c010a3a796467fd48d896734644 Mon Sep 17 00:00:00 2001
From: Lorenz Diener only
- real cars respond. only
+ real cars respond. I
- walk funny
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":[]} + data: {"id":"101","type":"mention","created_at":"2018-05-05T23:58:37.010Z","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},"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/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: notification + event: delete - 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":"@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":[]}} + 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,7 +270,9 @@ 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(3) + time.sleep(1) + api.status_delete(posted[0]) + time.sleep(2) streamingClose() t = threading.Thread(args=(), target=do_activities) @@ -282,13 +286,45 @@ def test_stream_user(api, api2): if stream != None: stream.close() - assert len(updates) == 2 + assert len(updates) == 1 assert len(notifications) == 1 + assert len(deletes) == 1 assert updates[0].id == posted[0].id - assert updates[1].id == posted[0].id + assert deletes[0] == posted[0].id assert notifications[0].status.id == posted[1].id t.join() - \ No newline at end of file +@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() + + 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 updates[0].id == posted[0].id + + t.join() \ No newline at end of file -- cgit v1.2.3