summary refs log tree commit diff
path: root/tests/rulecheck
diff options
context:
space:
mode:
authorMichael Kaye <1917473+michaelkaye@users.noreply.github.com>2018-05-09 14:40:18 +0100
committerMichael Kaye <1917473+michaelkaye@users.noreply.github.com>2018-05-09 14:50:48 +0100
commit488ed3e444cf37cb02c67a2569ec9f39c85583c1 (patch)
tree59cc50d66d914f5ba771d1f75c962757ee5c9e30 /tests/rulecheck
parentMerge pull request #3096 from matrix-org/matthew/derive-mxid-from-3pid (diff)
downloadsynapse-488ed3e444cf37cb02c67a2569ec9f39c85583c1.tar.xz
Generic "are users in domain X allowed to invite users in domain Y" logic
Diffstat (limited to 'tests/rulecheck')
-rw-r--r--tests/rulecheck/__init__.py14
-rw-r--r--tests/rulecheck/test_domainrulecheck.py96
2 files changed, 110 insertions, 0 deletions
diff --git a/tests/rulecheck/__init__.py b/tests/rulecheck/__init__.py
new file mode 100644
index 0000000000..a354d38ca8
--- /dev/null
+++ b/tests/rulecheck/__init__.py
@@ -0,0 +1,14 @@
+# -*- coding: utf-8 -*-
+# Copyright 2018 New Vector Ltd
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
diff --git a/tests/rulecheck/test_domainrulecheck.py b/tests/rulecheck/test_domainrulecheck.py
new file mode 100644
index 0000000000..141c8e4445
--- /dev/null
+++ b/tests/rulecheck/test_domainrulecheck.py
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+# Copyright 2018 New Vector Ltd
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+from tests import unittest
+
+from synapse.config._base import ConfigError
+from synapse.rulecheck.domain_rule_checker import DomainRuleChecker
+
+
+class DomainRuleCheckerTestCase(unittest.TestCase):
+
+    def test_allowed(self):
+        config = {
+          "default": False,
+          "domain_mapping": {
+              "source_one": [ "target_one", "target_two" ],
+              "source_two": [ "target_two" ]
+          }
+        }
+        check = DomainRuleChecker(config)
+        self.assertTrue(check.user_may_invite("test:source_one","test:target_one", "room"))
+        self.assertTrue(check.user_may_invite("test:source_one","test:target_two", "room"))
+        self.assertTrue(check.user_may_invite("test:source_two","test:target_two", "room"))
+
+
+    def test_disallowed(self):
+        config = {
+            "default": True,
+            "domain_mapping": {
+                "source_one": [ "target_one", "target_two" ],
+                "source_two": [ "target_two" ]
+            }
+        }
+        check = DomainRuleChecker(config)
+        self.assertFalse(check.user_may_invite("test:source_one","test:target_three", "room"))
+        self.assertFalse(check.user_may_invite("test:source_two","test:target_three", "room"))
+        self.assertFalse(check.user_may_invite("test:source_two","test:target_one", "room"))
+
+
+    def test_default_allow(self):
+        config = {
+          "default": True,
+          "domain_mapping": {
+              "source_one": [ "target_one", "target_two" ],
+              "source_two": [ "target_two" ]
+          }
+        }
+        check = DomainRuleChecker(config)
+        self.assertTrue(check.user_may_invite("test:source_three","test:target_one", "room"))
+
+    def test_default_deny(self):
+        config = {
+          "default": False,
+          "domain_mapping": {
+             "source_one": [ "target_one", "target_two" ],
+             "source_two": [ "target_two" ]
+          }
+        }
+        check = DomainRuleChecker(config)
+        self.assertFalse(check.user_may_invite("test:source_three","test:target_one", "room"))
+
+
+    def test_config_parse(self):
+        config = {
+          "default": False,
+          "domain_mapping": {
+              "source_one": [ "target_one", "target_two" ],
+              "source_two": [ "target_two" ]
+          }
+        }
+        self.assertEquals(config, DomainRuleChecker.parse_config(config))
+
+
+    def test_config_parse_failure(self):
+        config = {
+          "domain_mapping": {
+              "source_one": [ "target_one", "target_two" ],
+              "source_two": [ "target_two" ]
+          }
+        }
+        self.assertRaises(ConfigError, DomainRuleChecker.parse_config, config)
+
+