|
|
@@ -40,6 +40,7 @@ from synapse.rest.client import ( |
|
|
|
user_directory, |
|
|
|
) |
|
|
|
from synapse.server import HomeServer |
|
|
|
from synapse.storage.databases.main.client_ips import LAST_SEEN_GRANULARITY |
|
|
|
from synapse.types import JsonDict, UserID, create_requester |
|
|
|
from synapse.util import Clock |
|
|
|
|
|
|
@@ -456,6 +457,7 @@ class UsersListTestCase(unittest.HomeserverTestCase): |
|
|
|
servlets = [ |
|
|
|
synapse.rest.admin.register_servlets, |
|
|
|
login.register_servlets, |
|
|
|
room.register_servlets, |
|
|
|
] |
|
|
|
url = "/_synapse/admin/v2/users" |
|
|
|
|
|
|
@@ -506,6 +508,62 @@ class UsersListTestCase(unittest.HomeserverTestCase): |
|
|
|
# Check that all fields are available |
|
|
|
self._check_fields(channel.json_body["users"]) |
|
|
|
|
|
|
|
def test_last_seen(self) -> None: |
|
|
|
""" |
|
|
|
Test that last_seen_ts field is properly working. |
|
|
|
""" |
|
|
|
user1 = self.register_user("u1", "pass") |
|
|
|
user1_token = self.login("u1", "pass") |
|
|
|
user2 = self.register_user("u2", "pass") |
|
|
|
user2_token = self.login("u2", "pass") |
|
|
|
user3 = self.register_user("u3", "pass") |
|
|
|
user3_token = self.login("u3", "pass") |
|
|
|
|
|
|
|
self.helper.create_room_as(self.admin_user, tok=self.admin_user_tok) |
|
|
|
self.reactor.advance(10) |
|
|
|
self.helper.create_room_as(user2, tok=user2_token) |
|
|
|
self.reactor.advance(10) |
|
|
|
self.helper.create_room_as(user1, tok=user1_token) |
|
|
|
self.reactor.advance(10) |
|
|
|
self.helper.create_room_as(user3, tok=user3_token) |
|
|
|
self.reactor.advance(10) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"GET", |
|
|
|
self.url, |
|
|
|
access_token=self.admin_user_tok, |
|
|
|
) |
|
|
|
|
|
|
|
self.assertEqual(200, channel.code, msg=channel.json_body) |
|
|
|
self.assertEqual(4, len(channel.json_body["users"])) |
|
|
|
self.assertEqual(4, channel.json_body["total"]) |
|
|
|
|
|
|
|
admin_last_seen = channel.json_body["users"][0]["last_seen_ts"] |
|
|
|
user1_last_seen = channel.json_body["users"][1]["last_seen_ts"] |
|
|
|
user2_last_seen = channel.json_body["users"][2]["last_seen_ts"] |
|
|
|
user3_last_seen = channel.json_body["users"][3]["last_seen_ts"] |
|
|
|
self.assertTrue(admin_last_seen > 0 and admin_last_seen < 10000) |
|
|
|
self.assertTrue(user2_last_seen > 10000 and user2_last_seen < 20000) |
|
|
|
self.assertTrue(user1_last_seen > 20000 and user1_last_seen < 30000) |
|
|
|
self.assertTrue(user3_last_seen > 30000 and user3_last_seen < 40000) |
|
|
|
|
|
|
|
self._order_test([self.admin_user, user2, user1, user3], "last_seen_ts") |
|
|
|
|
|
|
|
self.reactor.advance(LAST_SEEN_GRANULARITY / 1000) |
|
|
|
self.helper.create_room_as(user1, tok=user1_token) |
|
|
|
self.reactor.advance(10) |
|
|
|
|
|
|
|
channel = self.make_request( |
|
|
|
"GET", |
|
|
|
self.url + "/" + user1, |
|
|
|
access_token=self.admin_user_tok, |
|
|
|
) |
|
|
|
self.assertTrue( |
|
|
|
channel.json_body["last_seen_ts"] > 40000 + LAST_SEEN_GRANULARITY |
|
|
|
) |
|
|
|
|
|
|
|
self._order_test([self.admin_user, user2, user3, user1], "last_seen_ts") |
|
|
|
|
|
|
|
def test_search_term(self) -> None: |
|
|
|
"""Test that searching for a users works correctly""" |
|
|
|
|
|
|
@@ -1135,6 +1193,7 @@ class UsersListTestCase(unittest.HomeserverTestCase): |
|
|
|
self.assertIn("displayname", u) |
|
|
|
self.assertIn("avatar_url", u) |
|
|
|
self.assertIn("creation_ts", u) |
|
|
|
self.assertIn("last_seen_ts", u) |
|
|
|
|
|
|
|
def _create_users(self, number_users: int) -> None: |
|
|
|
""" |
|
|
@@ -3035,6 +3094,7 @@ class UserRestTestCase(unittest.HomeserverTestCase): |
|
|
|
self.assertIn("consent_version", content) |
|
|
|
self.assertIn("consent_ts", content) |
|
|
|
self.assertIn("external_ids", content) |
|
|
|
self.assertIn("last_seen_ts", content) |
|
|
|
|
|
|
|
# This key was removed intentionally. Ensure it is not accidentally re-included. |
|
|
|
self.assertNotIn("password_hash", content) |
|
|
|