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")
|