summary refs log tree commit diff
path: root/tests/handlers/test_profile.py
diff options
context:
space:
mode:
authormatrix.org <matrix@matrix.org>2014-08-12 15:10:52 +0100
committermatrix.org <matrix@matrix.org>2014-08-12 15:10:52 +0100
commit4f475c7697722e946e39e42f38f3dd03a95d8765 (patch)
tree076d96d3809fb836c7245fd9f7960e7b75888a77 /tests/handlers/test_profile.py
downloadsynapse-4f475c7697722e946e39e42f38f3dd03a95d8765.tar.xz
Reference Matrix Home Server
Diffstat (limited to 'tests/handlers/test_profile.py')
-rw-r--r--tests/handlers/test_profile.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/tests/handlers/test_profile.py b/tests/handlers/test_profile.py
new file mode 100644
index 0000000000..a4408e9fd3
--- /dev/null
+++ b/tests/handlers/test_profile.py
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+
+from twisted.trial import unittest
+from twisted.internet import defer
+
+from mock import Mock
+import logging
+
+from synapse.api.errors import AuthError
+from synapse.server import HomeServer
+from synapse.handlers.profile import ProfileHandler
+
+
+logging.getLogger().addHandler(logging.NullHandler())
+
+
+class ProfileHandlers(object):
+    def __init__(self, hs):
+        self.profile_handler = ProfileHandler(hs)
+
+
+class ProfileTestCase(unittest.TestCase):
+    """ Tests profile management. """
+
+    def setUp(self):
+        self.mock_client = Mock(spec=[
+            "get_json",
+        ])
+
+        hs = HomeServer("test",
+                db_pool=None,
+                http_client=self.mock_client,
+                datastore=Mock(spec=[
+                    "get_profile_displayname",
+                    "set_profile_displayname",
+                    "get_profile_avatar_url",
+                    "set_profile_avatar_url",
+                ]),
+                handlers=None,
+                http_server=Mock(),
+            )
+        hs.handlers = ProfileHandlers(hs)
+
+        self.datastore = hs.get_datastore()
+
+        self.frank = hs.parse_userid("@1234ABCD:test")
+        self.bob   = hs.parse_userid("@4567:test")
+        self.alice = hs.parse_userid("@alice:remote")
+
+        self.handler = hs.get_handlers().profile_handler
+
+        # TODO(paul): Icky signal declarings.. booo
+        hs.get_distributor().declare("changed_presencelike_data")
+
+    @defer.inlineCallbacks
+    def test_get_my_name(self):
+        mocked_get = self.datastore.get_profile_displayname
+        mocked_get.return_value = defer.succeed("Frank")
+
+        displayname = yield self.handler.get_displayname(self.frank)
+
+        self.assertEquals("Frank", displayname)
+        mocked_get.assert_called_with("1234ABCD")
+
+    @defer.inlineCallbacks
+    def test_set_my_name(self):
+        mocked_set = self.datastore.set_profile_displayname
+        mocked_set.return_value = defer.succeed(())
+
+        yield self.handler.set_displayname(self.frank, self.frank, "Frank Jr.")
+
+        mocked_set.assert_called_with("1234ABCD", "Frank Jr.")
+
+    @defer.inlineCallbacks
+    def test_set_my_name_noauth(self):
+        d = self.handler.set_displayname(self.frank, self.bob, "Frank Jr.")
+
+        yield self.assertFailure(d, AuthError)
+
+    @defer.inlineCallbacks
+    def test_get_other_name(self):
+        self.mock_client.get_json.return_value = defer.succeed(
+                {"displayname": "Alice"})
+
+        displayname = yield self.handler.get_displayname(self.alice)
+
+        self.assertEquals(displayname, "Alice")
+        self.mock_client.get_json.assert_called_with(
+            destination="remote",
+            path="/matrix/client/api/v1/profile/@alice:remote/displayname"
+                "?local_only=1"
+        )
+
+    @defer.inlineCallbacks
+    def test_get_my_avatar(self):
+        mocked_get = self.datastore.get_profile_avatar_url
+        mocked_get.return_value = defer.succeed("http://my.server/me.png")
+
+        avatar_url = yield self.handler.get_avatar_url(self.frank)
+
+        self.assertEquals("http://my.server/me.png", avatar_url)
+        mocked_get.assert_called_with("1234ABCD")
+
+    @defer.inlineCallbacks
+    def test_set_my_avatar(self):
+        mocked_set = self.datastore.set_profile_avatar_url
+        mocked_set.return_value = defer.succeed(())
+
+        yield self.handler.set_avatar_url(self.frank, self.frank, 
+                "http://my.server/pic.gif")
+
+        mocked_set.assert_called_with("1234ABCD", "http://my.server/pic.gif")