Merge commit '3f58fc848' into anoa/dinsic_release_1_31_0
This commit is contained in:
@@ -1445,6 +1445,90 @@ class JoinAliasRoomTestCase(unittest.HomeserverTestCase):
|
||||
self.assertEquals(200, int(channel.result["code"]), msg=channel.result["body"])
|
||||
self.assertEqual(private_room_id, channel.json_body["joined_rooms"][0])
|
||||
|
||||
def test_context_as_non_admin(self):
|
||||
"""
|
||||
Test that, without being admin, one cannot use the context admin API
|
||||
"""
|
||||
# Create a room.
|
||||
user_id = self.register_user("test", "test")
|
||||
user_tok = self.login("test", "test")
|
||||
|
||||
self.register_user("test_2", "test")
|
||||
user_tok_2 = self.login("test_2", "test")
|
||||
|
||||
room_id = self.helper.create_room_as(user_id, tok=user_tok)
|
||||
|
||||
# Populate the room with events.
|
||||
events = []
|
||||
for i in range(30):
|
||||
events.append(
|
||||
self.helper.send_event(
|
||||
room_id, "com.example.test", content={"index": i}, tok=user_tok
|
||||
)
|
||||
)
|
||||
|
||||
# Now attempt to find the context using the admin API without being admin.
|
||||
midway = (len(events) - 1) // 2
|
||||
for tok in [user_tok, user_tok_2]:
|
||||
channel = self.make_request(
|
||||
"GET",
|
||||
"/_synapse/admin/v1/rooms/%s/context/%s"
|
||||
% (room_id, events[midway]["event_id"]),
|
||||
access_token=tok,
|
||||
)
|
||||
self.assertEquals(
|
||||
403, int(channel.result["code"]), msg=channel.result["body"]
|
||||
)
|
||||
self.assertEqual(Codes.FORBIDDEN, channel.json_body["errcode"])
|
||||
|
||||
def test_context_as_admin(self):
|
||||
"""
|
||||
Test that, as admin, we can find the context of an event without having joined the room.
|
||||
"""
|
||||
|
||||
# Create a room. We're not part of it.
|
||||
user_id = self.register_user("test", "test")
|
||||
user_tok = self.login("test", "test")
|
||||
room_id = self.helper.create_room_as(user_id, tok=user_tok)
|
||||
|
||||
# Populate the room with events.
|
||||
events = []
|
||||
for i in range(30):
|
||||
events.append(
|
||||
self.helper.send_event(
|
||||
room_id, "com.example.test", content={"index": i}, tok=user_tok
|
||||
)
|
||||
)
|
||||
|
||||
# Now let's fetch the context for this room.
|
||||
midway = (len(events) - 1) // 2
|
||||
channel = self.make_request(
|
||||
"GET",
|
||||
"/_synapse/admin/v1/rooms/%s/context/%s"
|
||||
% (room_id, events[midway]["event_id"]),
|
||||
access_token=self.admin_user_tok,
|
||||
)
|
||||
self.assertEquals(200, int(channel.result["code"]), msg=channel.result["body"])
|
||||
self.assertEquals(
|
||||
channel.json_body["event"]["event_id"], events[midway]["event_id"]
|
||||
)
|
||||
|
||||
for i, found_event in enumerate(channel.json_body["events_before"]):
|
||||
for j, posted_event in enumerate(events):
|
||||
if found_event["event_id"] == posted_event["event_id"]:
|
||||
self.assertTrue(j < midway)
|
||||
break
|
||||
else:
|
||||
self.fail("Event %s from events_before not found" % j)
|
||||
|
||||
for i, found_event in enumerate(channel.json_body["events_after"]):
|
||||
for j, posted_event in enumerate(events):
|
||||
if found_event["event_id"] == posted_event["event_id"]:
|
||||
self.assertTrue(j > midway)
|
||||
break
|
||||
else:
|
||||
self.fail("Event %s from events_after not found" % j)
|
||||
|
||||
|
||||
class MakeRoomAdminTestCase(unittest.HomeserverTestCase):
|
||||
servlets = [
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
|
||||
from synapse.rest.media.v1.preview_url_resource import (
|
||||
decode_and_calc_og,
|
||||
get_html_media_encoding,
|
||||
summarize_paragraphs,
|
||||
)
|
||||
|
||||
@@ -26,7 +27,7 @@ except ImportError:
|
||||
lxml = None
|
||||
|
||||
|
||||
class PreviewTestCase(unittest.TestCase):
|
||||
class SummarizeTestCase(unittest.TestCase):
|
||||
if not lxml:
|
||||
skip = "url preview feature requires lxml"
|
||||
|
||||
@@ -144,12 +145,12 @@ class PreviewTestCase(unittest.TestCase):
|
||||
)
|
||||
|
||||
|
||||
class PreviewUrlTestCase(unittest.TestCase):
|
||||
class CalcOgTestCase(unittest.TestCase):
|
||||
if not lxml:
|
||||
skip = "url preview feature requires lxml"
|
||||
|
||||
def test_simple(self):
|
||||
html = """
|
||||
html = b"""
|
||||
<html>
|
||||
<head><title>Foo</title></head>
|
||||
<body>
|
||||
@@ -163,7 +164,7 @@ class PreviewUrlTestCase(unittest.TestCase):
|
||||
self.assertEqual(og, {"og:title": "Foo", "og:description": "Some text."})
|
||||
|
||||
def test_comment(self):
|
||||
html = """
|
||||
html = b"""
|
||||
<html>
|
||||
<head><title>Foo</title></head>
|
||||
<body>
|
||||
@@ -178,7 +179,7 @@ class PreviewUrlTestCase(unittest.TestCase):
|
||||
self.assertEqual(og, {"og:title": "Foo", "og:description": "Some text."})
|
||||
|
||||
def test_comment2(self):
|
||||
html = """
|
||||
html = b"""
|
||||
<html>
|
||||
<head><title>Foo</title></head>
|
||||
<body>
|
||||
@@ -202,7 +203,7 @@ class PreviewUrlTestCase(unittest.TestCase):
|
||||
)
|
||||
|
||||
def test_script(self):
|
||||
html = """
|
||||
html = b"""
|
||||
<html>
|
||||
<head><title>Foo</title></head>
|
||||
<body>
|
||||
@@ -217,7 +218,7 @@ class PreviewUrlTestCase(unittest.TestCase):
|
||||
self.assertEqual(og, {"og:title": "Foo", "og:description": "Some text."})
|
||||
|
||||
def test_missing_title(self):
|
||||
html = """
|
||||
html = b"""
|
||||
<html>
|
||||
<body>
|
||||
Some text.
|
||||
@@ -230,7 +231,7 @@ class PreviewUrlTestCase(unittest.TestCase):
|
||||
self.assertEqual(og, {"og:title": None, "og:description": "Some text."})
|
||||
|
||||
def test_h1_as_title(self):
|
||||
html = """
|
||||
html = b"""
|
||||
<html>
|
||||
<meta property="og:description" content="Some text."/>
|
||||
<body>
|
||||
@@ -244,7 +245,7 @@ class PreviewUrlTestCase(unittest.TestCase):
|
||||
self.assertEqual(og, {"og:title": "Title", "og:description": "Some text."})
|
||||
|
||||
def test_missing_title_and_broken_h1(self):
|
||||
html = """
|
||||
html = b"""
|
||||
<html>
|
||||
<body>
|
||||
<h1><a href="foo"/></h1>
|
||||
@@ -258,13 +259,20 @@ class PreviewUrlTestCase(unittest.TestCase):
|
||||
self.assertEqual(og, {"og:title": None, "og:description": "Some text."})
|
||||
|
||||
def test_empty(self):
|
||||
html = ""
|
||||
"""Test a body with no data in it."""
|
||||
html = b""
|
||||
og = decode_and_calc_og(html, "http://example.com/test.html")
|
||||
self.assertEqual(og, {})
|
||||
|
||||
def test_no_tree(self):
|
||||
"""A valid body with no tree in it."""
|
||||
html = b"\x00"
|
||||
og = decode_and_calc_og(html, "http://example.com/test.html")
|
||||
self.assertEqual(og, {})
|
||||
|
||||
def test_invalid_encoding(self):
|
||||
"""An invalid character encoding should be ignored and treated as UTF-8, if possible."""
|
||||
html = """
|
||||
html = b"""
|
||||
<html>
|
||||
<head><title>Foo</title></head>
|
||||
<body>
|
||||
@@ -290,3 +298,76 @@ class PreviewUrlTestCase(unittest.TestCase):
|
||||
"""
|
||||
og = decode_and_calc_og(html, "http://example.com/test.html")
|
||||
self.assertEqual(og, {"og:title": "ÿÿ Foo", "og:description": "Some text."})
|
||||
|
||||
|
||||
class MediaEncodingTestCase(unittest.TestCase):
|
||||
def test_meta_charset(self):
|
||||
"""A character encoding is found via the meta tag."""
|
||||
encoding = get_html_media_encoding(
|
||||
b"""
|
||||
<html>
|
||||
<head><meta charset="ascii">
|
||||
</head>
|
||||
</html>
|
||||
""",
|
||||
"text/html",
|
||||
)
|
||||
self.assertEqual(encoding, "ascii")
|
||||
|
||||
# A less well-formed version.
|
||||
encoding = get_html_media_encoding(
|
||||
b"""
|
||||
<html>
|
||||
<head>< meta charset = ascii>
|
||||
</head>
|
||||
</html>
|
||||
""",
|
||||
"text/html",
|
||||
)
|
||||
self.assertEqual(encoding, "ascii")
|
||||
|
||||
def test_xml_encoding(self):
|
||||
"""A character encoding is found via the meta tag."""
|
||||
encoding = get_html_media_encoding(
|
||||
b"""
|
||||
<?xml version="1.0" encoding="ascii"?>
|
||||
<html>
|
||||
</html>
|
||||
""",
|
||||
"text/html",
|
||||
)
|
||||
self.assertEqual(encoding, "ascii")
|
||||
|
||||
def test_meta_xml_encoding(self):
|
||||
"""Meta tags take precedence over XML encoding."""
|
||||
encoding = get_html_media_encoding(
|
||||
b"""
|
||||
<?xml version="1.0" encoding="ascii"?>
|
||||
<html>
|
||||
<head><meta charset="UTF-16">
|
||||
</head>
|
||||
</html>
|
||||
""",
|
||||
"text/html",
|
||||
)
|
||||
self.assertEqual(encoding, "UTF-16")
|
||||
|
||||
def test_content_type(self):
|
||||
"""A character encoding is found via the Content-Type header."""
|
||||
# Test a few variations of the header.
|
||||
headers = (
|
||||
'text/html; charset="ascii";',
|
||||
"text/html;charset=ascii;",
|
||||
'text/html; charset="ascii"',
|
||||
"text/html; charset=ascii",
|
||||
'text/html; charset="ascii;',
|
||||
'text/html; charset=ascii";',
|
||||
)
|
||||
for header in headers:
|
||||
encoding = get_html_media_encoding(b"", header)
|
||||
self.assertEqual(encoding, "ascii")
|
||||
|
||||
def test_fallback(self):
|
||||
"""A character encoding cannot be found in the body or header."""
|
||||
encoding = get_html_media_encoding(b"", "text/html")
|
||||
self.assertEqual(encoding, "utf-8")
|
||||
|
||||
Reference in New Issue
Block a user