summary refs log tree commit diff
path: root/tests/events/test_events.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/events/test_events.py')
-rw-r--r--tests/events/test_events.py172
1 files changed, 172 insertions, 0 deletions
diff --git a/tests/events/test_events.py b/tests/events/test_events.py
new file mode 100644
index 0000000000..11d3d09c96
--- /dev/null
+++ b/tests/events/test_events.py
@@ -0,0 +1,172 @@
+# -*- coding: utf-8 -*-
+from synapse.api.events import SynapseEvent
+
+import unittest
+
+
+class SynapseTemplateCheckTestCase(unittest.TestCase):
+
+    def setUp(self):
+        pass
+
+    def tearDown(self):
+        pass
+
+    def test_top_level_keys(self):
+        template = {
+            "person": {},
+            "friends": ["string"]
+        }
+
+        content = {
+            "person": {"name": "bob"},
+            "friends": ["jill", "mike"]
+        }
+
+        event = MockSynapseEvent(template)
+        self.assertTrue(event.check_json(content, raises=False))
+
+        content = {
+            "person": {"name": "bob"},
+            "friends": ["jill"],
+            "enemies": ["mike"]
+        }
+        event = MockSynapseEvent(template)
+        self.assertTrue(event.check_json(content, raises=False))
+
+        content = {
+            "person": {"name": "bob"},
+            # missing friends
+            "enemies": ["mike", "jill"]
+        }
+        self.assertFalse(event.check_json(content, raises=False))
+
+    def test_lists(self):
+        template = {
+            "person": {},
+            "friends": [{"name":"string"}]
+        }
+
+        content = {
+            "person": {"name": "bob"},
+            "friends": ["jill", "mike"]  # should be in objects
+        }
+
+        event = MockSynapseEvent(template)
+        self.assertFalse(event.check_json(content, raises=False))
+
+        content = {
+            "person": {"name": "bob"},
+            "friends": [{"name": "jill"}, {"name": "mike"}]
+        }
+        self.assertTrue(event.check_json(content, raises=False))
+
+    def test_nested_lists(self):
+        template = {
+            "results": {
+                "families": [
+                     {
+                        "name": "string",
+                        "members": [
+                            {}
+                        ]
+                     }
+                ]
+            }
+        }
+
+        content = {
+            "results": {
+                "families": [
+                     {
+                        "name": "Smith",
+                        "members": [
+                            "Alice", "Bob"  # wrong types
+                        ]
+                     }
+                ]
+            }
+        }
+
+        event = MockSynapseEvent(template)
+        self.assertFalse(event.check_json(content, raises=False))
+
+        content = {
+            "results": {
+                "families": [
+                     {
+                        "name": "Smith",
+                        "members": [
+                            {"name": "Alice"}, {"name": "Bob"}
+                        ]
+                     }
+                ]
+            }
+        }
+        self.assertTrue(event.check_json(content, raises=False))
+
+    def test_nested_keys(self):
+        template = {
+            "person": {
+                "attributes": {
+                    "hair": "string",
+                    "eye": "string"
+                },
+                "age": 0,
+                "fav_books": ["string"]
+            }
+        }
+        event = MockSynapseEvent(template)
+
+        content = {
+            "person": {
+                "attributes": {
+                    "hair": "brown",
+                    "eye": "green",
+                    "skin": "purple"
+                },
+                "age": 33,
+                "fav_books": ["lotr", "hobbit"],
+                "fav_music": ["abba", "beatles"]
+            }
+        }
+
+        self.assertTrue(event.check_json(content, raises=False))
+
+        content = {
+            "person": {
+                "attributes": {
+                    "hair": "brown"
+                    # missing eye
+                },
+                "age": 33,
+                "fav_books": ["lotr", "hobbit"],
+                "fav_music": ["abba", "beatles"]
+            }
+        }
+
+        self.assertFalse(event.check_json(content, raises=False))
+
+        content = {
+            "person": {
+                "attributes": {
+                    "hair": "brown",
+                    "eye": "green",
+                    "skin": "purple"
+                },
+                "age": 33,
+                "fav_books": "nothing",  # should be a list
+            }
+        }
+
+        self.assertFalse(event.check_json(content, raises=False))
+
+
+class MockSynapseEvent(SynapseEvent):
+
+    def __init__(self, template):
+        self.template = template
+
+    def get_content_template(self):
+        return self.template
+