diff --git a/static/js/pointer.js b/static/js/pointer.js index 451af12dbf..9c6da44cbe 100644 --- a/static/js/pointer.js +++ b/static/js/pointer.js @@ -18,7 +18,7 @@ var pointer_update_in_flight = false; function update_pointer() { if (!pointer_update_in_flight) { pointer_update_in_flight = true; - return channel.put({ + return channel.post({ url: '/json/users/me/pointer', idempotent: true, data: {pointer: pointer.furthest_read}, diff --git a/zerver/tests/test_signup.py b/zerver/tests/test_signup.py index 7fd0a66c03..3a40b5b454 100644 --- a/zerver/tests/test_signup.py +++ b/zerver/tests/test_signup.py @@ -103,6 +103,7 @@ class PublicURLTest(ZulipTestCase): "/json/subscriptions/exists", "/json/subscriptions/property", "/json/fetch_api_key", + "/json/users/me/pointer", "/json/users/me/subscriptions", "/api/v1/users/me/subscriptions", ], diff --git a/zerver/tests/test_unread.py b/zerver/tests/test_unread.py index f46db841f9..acdcccc14f 100644 --- a/zerver/tests/test_unread.py +++ b/zerver/tests/test_unread.py @@ -24,7 +24,7 @@ class PointerTest(ZulipTestCase): self.login("hamlet@zulip.com") self.assertEqual(get_user_profile_by_email("hamlet@zulip.com").pointer, -1) msg_id = self.send_message("othello@zulip.com", "Verona", Recipient.STREAM) - result = self.client_put("/json/users/me/pointer", {"pointer": msg_id}) + result = self.client_post("/json/users/me/pointer", {"pointer": msg_id}) self.assert_json_success(result) self.assertEqual(get_user_profile_by_email("hamlet@zulip.com").pointer, msg_id) @@ -36,8 +36,8 @@ class PointerTest(ZulipTestCase): email = "hamlet@zulip.com" self.assertEqual(get_user_profile_by_email(email).pointer, -1) msg_id = self.send_message("othello@zulip.com", "Verona", Recipient.STREAM) - result = self.client_put("/api/v1/users/me/pointer", {"pointer": msg_id}, - **self.api_auth(email)) + result = self.client_post("/api/v1/users/me/pointer", {"pointer": msg_id}, + **self.api_auth(email)) self.assert_json_success(result) self.assertEqual(get_user_profile_by_email(email).pointer, msg_id) @@ -49,7 +49,7 @@ class PointerTest(ZulipTestCase): """ self.login("hamlet@zulip.com") self.assertEqual(get_user_profile_by_email("hamlet@zulip.com").pointer, -1) - result = self.client_put("/json/users/me/pointer", {"foo": 1}) + result = self.client_post("/json/users/me/pointer", {"foo": 1}) self.assert_json_error(result, "Missing 'pointer' argument") self.assertEqual(get_user_profile_by_email("hamlet@zulip.com").pointer, -1) @@ -61,7 +61,7 @@ class PointerTest(ZulipTestCase): """ self.login("hamlet@zulip.com") self.assertEqual(get_user_profile_by_email("hamlet@zulip.com").pointer, -1) - result = self.client_put("/json/users/me/pointer", {"pointer": "foo"}) + result = self.client_post("/json/users/me/pointer", {"pointer": "foo"}) self.assert_json_error(result, "Bad value for 'pointer': foo") self.assertEqual(get_user_profile_by_email("hamlet@zulip.com").pointer, -1) @@ -73,7 +73,7 @@ class PointerTest(ZulipTestCase): """ self.login("hamlet@zulip.com") self.assertEqual(get_user_profile_by_email("hamlet@zulip.com").pointer, -1) - result = self.client_put("/json/users/me/pointer", {"pointer": -2}) + result = self.client_post("/json/users/me/pointer", {"pointer": -2}) self.assert_json_error(result, "Bad value for 'pointer': -2") self.assertEqual(get_user_profile_by_email("hamlet@zulip.com").pointer, -1) diff --git a/zerver/tests/tests.py b/zerver/tests/tests.py index 090dc0dbcc..78e0541b37 100644 --- a/zerver/tests/tests.py +++ b/zerver/tests/tests.py @@ -1726,7 +1726,7 @@ class GetProfileTest(ZulipTestCase): def common_update_pointer(self, email, pointer): # type: (Text, int) -> None self.login(email) - result = self.client_put("/json/users/me/pointer", {"pointer": pointer}) + result = self.client_post("/json/users/me/pointer", {"pointer": pointer}) self.assert_json_success(result) def common_get_profile(self, email): @@ -1812,7 +1812,7 @@ class GetProfileTest(ZulipTestCase): json = self.common_get_profile("hamlet@zulip.com") self.assertEqual(json["pointer"], id2) # pointer does not move backwards - result = self.client_put("/json/users/me/pointer", {"pointer": 99999999}) + result = self.client_post("/json/users/me/pointer", {"pointer": 99999999}) self.assert_json_error(result, "Invalid message ID") def test_get_all_profiles_avatar_urls(self): diff --git a/zproject/urls.py b/zproject/urls.py index c30b927a70..c6ea2bb59a 100644 --- a/zproject/urls.py +++ b/zproject/urls.py @@ -225,9 +225,12 @@ v1_api_and_json_patterns = [ url(r'^users/me$', rest_dispatch, {'GET': 'zerver.views.users.get_profile_backend', 'DELETE': 'zerver.views.users.deactivate_user_own_backend'}), + # PUT is currently used by mobile apps, we intend to remove the PUT version + # as soon as possible. POST exists to correct the erroneous use of PUT. url(r'^users/me/pointer$', rest_dispatch, {'GET': 'zerver.views.pointer.get_pointer_backend', - 'PUT': 'zerver.views.pointer.update_pointer_backend'}), + 'PUT': 'zerver.views.pointer.update_pointer_backend', + 'POST': 'zerver.views.pointer.update_pointer_backend'}), url(r'^users/me/presence$', rest_dispatch, {'POST': 'zerver.views.presence.update_active_status_backend'}), # Endpoint used by mobile devices to register their push