aboutsummaryrefslogtreecommitdiffstats
path: root/test/lib/test_naming_policy.py
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-02-08 17:44:00 +0100
committerMatthias Baumgartner <dev@igsor.net>2023-02-08 17:44:00 +0100
commit9c26a5ef759b010d8cf4384b0515cc188b885d81 (patch)
treedfad86871856e8be5807b269e2fe6d2e6971fa9f /test/lib/test_naming_policy.py
parent05a841215c82ef40d4679dfc4d2c26572bd4d349 (diff)
downloadbsie-9c26a5ef759b010d8cf4384b0515cc188b885d81.tar.gz
bsie-9c26a5ef759b010d8cf4384b0515cc188b885d81.tar.bz2
bsie-9c26a5ef759b010d8cf4384b0515cc188b885d81.zip
node naming policy
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 ##