aboutsummaryrefslogtreecommitdiffstats
path: root/test/lib/test_naming_policy.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/lib/test_naming_policy.py')
-rw-r--r--test/lib/test_naming_policy.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/test/lib/test_naming_policy.py b/test/lib/test_naming_policy.py
new file mode 100644
index 0000000..763537b
--- /dev/null
+++ b/test/lib/test_naming_policy.py
@@ -0,0 +1,86 @@
+"""
+
+Part of the bsie test suite.
+A copy of the license is provided with the project.
+Author: Matthias Baumgartner, 2022
+"""
+# standard imports
+import unittest
+
+# bsie imports
+from bsie.utils import ns, errors
+from bsie.utils.bsfs import URI
+from bsie.utils.node import Node
+
+# objects to test
+from bsie.lib.naming_policy import NamingPolicy, NamingPolicyIterator, DefaultNamingPolicy
+
+
+
+## code ##
+
+class TestDefaultNamingPolicy(unittest.TestCase):
+
+ def test_handle_node(self):
+ # setup
+ policy = DefaultNamingPolicy('http://example.com', 'me')
+ # handle_node doesn't modify existing uris
+ self.assertEqual(policy.handle_node(
+ Node(ns.bsfs.Entity, uri='http://example.com/you/foo#bar')).uri,
+ URI('http://example.com/you/foo#bar'))
+ # processes bsfs:File
+ self.assertEqual(policy.handle_node(
+ Node(ns.bsfs.File, ucid='abc123cba')).uri,
+ URI('http://example.com/me/file#abc123cba'))
+ # raises an exception on unknown types
+ self.assertRaises(errors.ProgrammingError, policy.handle_node,
+ Node(ns.bsfs.Entity, ucid='abc123cba', size=123))
+
+ def test_name_file(self):
+ # setup
+ policy = DefaultNamingPolicy('http://example.com', 'me')
+ # name_file uses ucid
+ self.assertEqual(policy.name_file(
+ Node(ns.bsfs.File, ucid='123abc321')).uri,
+ URI('http://example.com/me/file#123abc321'))
+ # name_file falls back to a random guid
+ self.assertTrue(policy.name_file(
+ Node(ns.bsfs.File)).uri.startswith('http://example.com/me/file#'))
+
+
+class TestNamingPolicyIterator(unittest.TestCase):
+
+ def test_call(self): # NOTE: We test NamingPolicy.__call__ here
+ # setup
+ policy = DefaultNamingPolicy('http://example.com', 'me')
+ # call accepts list
+ triples = [('node', 'pred', 'value'), ('node', 'pred', 'value')]
+ it = policy(triples)
+ self.assertIsInstance(it, NamingPolicyIterator)
+ self.assertEqual(it._iterable, triples)
+ self.assertEqual(it._policy, policy)
+ # call accepts iterator
+ triples = iter([('node', 'pred', 'value'), ('node', 'pred', 'value')])
+ it = policy(triples)
+ self.assertIsInstance(it, NamingPolicyIterator)
+ self.assertEqual(it._iterable, triples)
+ self.assertEqual(it._policy, policy)
+
+ def test_iter(self):
+ # setup
+ policy = DefaultNamingPolicy('http://example.com', 'me')
+ triples = [
+ (Node(ns.bsfs.File, ucid='foo'), 'predA', 'hello'),
+ ]
+ # handles nodes, handles values, ignores predicate
+ self.assertListEqual(list(policy(triples)), [
+ (Node(ns.bsfs.File, uri='http://example.com/me/file#foo'), 'predA', 'hello'),
+ ])
+
+
+## main ##
+
+if __name__ == '__main__':
+ unittest.main()
+
+## EOF ##