Skip to content
Snippets Groups Projects
test_profile.py 3.48 KiB
Newer Older
  • Learn to ignore specific revisions
  • matrix.org's avatar
    matrix.org committed
    # -*- 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")