diff --git a/tests/handlers/test_presence.py b/tests/handlers/test_presence.py
index 61e9cc7042..d57ee563c4 100644
--- a/tests/handlers/test_presence.py
+++ b/tests/handlers/test_presence.py
@@ -209,50 +209,34 @@ class PresenceStateTestCase(unittest.TestCase):
class PresenceInvitesTestCase(unittest.TestCase):
""" Tests presence management. """
+ @defer.inlineCallbacks
def setUp(self):
self.mock_http_client = Mock(spec=[])
self.mock_http_client.put_json = DeferredMockCallable()
self.mock_federation_resource = MockHttpResource()
- hs = HomeServer("test",
- clock=MockClock(),
- db_pool=None,
- datastore=Mock(spec=[
- "has_presence_state",
- "allow_presence_visible",
- "add_presence_list_pending",
- "set_presence_list_accepted",
- "get_presence_list",
- "del_presence_list",
+ db_pool = SQLiteMemoryDbPool()
+ yield db_pool.prepare()
- # Bits that Federation needs
- "prep_send_transaction",
- "delivered_txn",
- "get_received_txn_response",
- "set_received_txn_response",
- ]),
- handlers=None,
- resource_for_client=Mock(),
- resource_for_federation=self.mock_federation_resource,
- http_client=self.mock_http_client,
- )
+ hs = HomeServer("test",
+ clock=MockClock(),
+ db_pool=db_pool,
+ handlers=None,
+ resource_for_client=Mock(),
+ resource_for_federation=self.mock_federation_resource,
+ http_client=self.mock_http_client,
+ )
hs.handlers = JustPresenceHandlers(hs)
- self.datastore = hs.get_datastore()
-
- def has_presence_state(user_localpart):
- return defer.succeed(
- user_localpart in ("apple", "banana"))
- self.datastore.has_presence_state = has_presence_state
-
- def get_received_txn_response(*args):
- return defer.succeed(None)
- self.datastore.get_received_txn_response = get_received_txn_response
+ self.store = hs.get_datastore()
# Some local users to test with
self.u_apple = hs.parse_userid("@apple:test")
self.u_banana = hs.parse_userid("@banana:test")
+ yield self.store.create_presence(self.u_apple.localpart)
+ yield self.store.create_presence(self.u_banana.localpart)
+
# ID of a local user that does not exist
self.u_durian = hs.parse_userid("@durian:test")
@@ -275,12 +259,16 @@ class PresenceInvitesTestCase(unittest.TestCase):
yield self.handler.send_invite(
observer_user=self.u_apple, observed_user=self.u_banana)
- self.datastore.add_presence_list_pending.assert_called_with(
- "apple", "@banana:test")
- self.datastore.allow_presence_visible.assert_called_with(
- "banana", "@apple:test")
- self.datastore.set_presence_list_accepted.assert_called_with(
- "apple", "@banana:test")
+ self.assertEquals(
+ [{"observed_user_id": "@banana:test", "accepted": 1}],
+ (yield self.store.get_presence_list(self.u_apple.localpart))
+ )
+ self.assertTrue(
+ (yield self.store.is_presence_visible(
+ observed_localpart=self.u_banana.localpart,
+ observer_userid=self.u_apple.to_string(),
+ ))
+ )
self.mock_start.assert_called_with(
self.u_apple, target_user=self.u_banana)
@@ -290,10 +278,10 @@ class PresenceInvitesTestCase(unittest.TestCase):
yield self.handler.send_invite(
observer_user=self.u_apple, observed_user=self.u_durian)
- self.datastore.add_presence_list_pending.assert_called_with(
- "apple", "@durian:test")
- self.datastore.del_presence_list.assert_called_with(
- "apple", "@durian:test")
+ self.assertEquals(
+ [],
+ (yield self.store.get_presence_list(self.u_apple.localpart))
+ )
@defer.inlineCallbacks
def test_invite_remote(self):
@@ -314,8 +302,10 @@ class PresenceInvitesTestCase(unittest.TestCase):
yield self.handler.send_invite(
observer_user=self.u_apple, observed_user=self.u_cabbage)
- self.datastore.add_presence_list_pending.assert_called_with(
- "apple", "@cabbage:elsewhere")
+ self.assertEquals(
+ [{"observed_user_id": "@cabbage:elsewhere", "accepted": 0}],
+ (yield self.store.get_presence_list(self.u_apple.localpart))
+ )
yield put_json.await_calls()
@@ -347,8 +337,12 @@ class PresenceInvitesTestCase(unittest.TestCase):
)
)
- self.datastore.allow_presence_visible.assert_called_with(
- "apple", "@cabbage:elsewhere")
+ self.assertTrue(
+ (yield self.store.is_presence_visible(
+ observed_localpart=self.u_apple.localpart,
+ observer_userid=self.u_cabbage.to_string(),
+ ))
+ )
yield put_json.await_calls()
@@ -382,6 +376,11 @@ class PresenceInvitesTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_accepted_remote(self):
+ yield self.store.add_presence_list_pending(
+ observer_localpart=self.u_apple.localpart,
+ observed_userid=self.u_cabbage.to_string(),
+ )
+
yield self.mock_federation_resource.trigger("PUT",
"/_matrix/federation/v1/send/1000000/",
_make_edu_json("elsewhere", "m.presence_accept",
@@ -392,14 +391,21 @@ class PresenceInvitesTestCase(unittest.TestCase):
)
)
- self.datastore.set_presence_list_accepted.assert_called_with(
- "apple", "@cabbage:elsewhere")
+ self.assertEquals(
+ [{"observed_user_id": "@cabbage:elsewhere", "accepted": 1}],
+ (yield self.store.get_presence_list(self.u_apple.localpart))
+ )
self.mock_start.assert_called_with(
self.u_apple, target_user=self.u_cabbage)
@defer.inlineCallbacks
def test_denied_remote(self):
+ yield self.store.add_presence_list_pending(
+ observer_localpart=self.u_apple.localpart,
+ observed_userid="@eggplant:elsewhere",
+ )
+
yield self.mock_federation_resource.trigger("PUT",
"/_matrix/federation/v1/send/1000000/",
_make_edu_json("elsewhere", "m.presence_deny",
@@ -410,62 +416,76 @@ class PresenceInvitesTestCase(unittest.TestCase):
)
)
- self.datastore.del_presence_list.assert_called_with(
- "apple", "@eggplant:elsewhere")
+ self.assertEquals(
+ [],
+ (yield self.store.get_presence_list(self.u_apple.localpart))
+ )
@defer.inlineCallbacks
def test_drop_local(self):
+ yield self.store.add_presence_list_pending(
+ observer_localpart=self.u_apple.localpart,
+ observed_userid=self.u_banana.to_string(),
+ )
+ yield self.store.set_presence_list_accepted(
+ observer_localpart=self.u_apple.localpart,
+ observed_userid=self.u_banana.to_string(),
+ )
+
yield self.handler.drop(
- observer_user=self.u_apple, observed_user=self.u_banana)
+ observer_user=self.u_apple,
+ observed_user=self.u_banana,
+ )
- self.datastore.del_presence_list.assert_called_with(
- "apple", "@banana:test")
+ self.assertEquals(
+ [],
+ (yield self.store.get_presence_list(self.u_apple.localpart))
+ )
self.mock_stop.assert_called_with(
self.u_apple, target_user=self.u_banana)
@defer.inlineCallbacks
def test_drop_remote(self):
+ yield self.store.add_presence_list_pending(
+ observer_localpart=self.u_apple.localpart,
+ observed_userid=self.u_cabbage.to_string(),
+ )
+ yield self.store.set_presence_list_accepted(
+ observer_localpart=self.u_apple.localpart,
+ observed_userid=self.u_cabbage.to_string(),
+ )
+
yield self.handler.drop(
- observer_user=self.u_apple, observed_user=self.u_cabbage)
+ observer_user=self.u_apple,
+ observed_user=self.u_cabbage,
+ )
- self.datastore.del_presence_list.assert_called_with(
- "apple", "@cabbage:elsewhere")
+ self.assertEquals(
+ [],
+ (yield self.store.get_presence_list(self.u_apple.localpart))
+ )
@defer.inlineCallbacks
def test_get_presence_list(self):
- self.datastore.get_presence_list.return_value = defer.succeed(
- [{"observed_user_id": "@banana:test"}]
+ yield self.store.add_presence_list_pending(
+ observer_localpart=self.u_apple.localpart,
+ observed_userid=self.u_banana.to_string(),
)
-
- presence = yield self.handler.get_presence_list(
- observer_user=self.u_apple)
-
- self.assertEquals([
- {"observed_user": self.u_banana,
- "presence": OFFLINE},
- ], presence)
-
- self.datastore.get_presence_list.assert_called_with("apple",
- accepted=None
- )
-
- self.datastore.get_presence_list.return_value = defer.succeed(
- [{"observed_user_id": "@banana:test"}]
+ yield self.store.set_presence_list_accepted(
+ observer_localpart=self.u_apple.localpart,
+ observed_userid=self.u_banana.to_string(),
)
presence = yield self.handler.get_presence_list(
- observer_user=self.u_apple, accepted=True
- )
+ observer_user=self.u_apple)
self.assertEquals([
{"observed_user": self.u_banana,
- "presence": OFFLINE},
+ "presence": OFFLINE,
+ "accepted": 1},
], presence)
- self.datastore.get_presence_list.assert_called_with("apple",
- accepted=True)
-
class PresencePushTestCase(unittest.TestCase):
""" Tests steady-state presence status updates.
|