""" 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')) # processes bsfs:Preview self.assertEqual(policy.handle_node( Node(ns.bsfs.Preview, ucid='abc123cba', size=123)).uri, URI('http://example.com/me/preview#abc123cba_s123')) # 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#')) def test_name_preview(self): # setup policy = DefaultNamingPolicy('http://example.com', 'me') # name_preview uses ucid self.assertEqual(policy.name_preview( Node(ns.bsfs.Preview, ucid='123abc321')).uri, URI('http://example.com/me/preview#123abc321')) self.assertEqual(policy.name_preview( Node(ns.bsfs.Preview, ucid='123abc321', size=400)).uri, URI('http://example.com/me/preview#123abc321_s400')) # name_preview uses source self.assertEqual(policy.name_preview( Node(ns.bsfs.Preview, source=Node(ns.bsfs.File, ucid='123file321'))).uri, URI('http://example.com/me/preview#123file321')) self.assertEqual(policy.name_preview( Node(ns.bsfs.Preview, source=Node(ns.bsfs.File, ucid='123file321'), size=300)).uri, URI('http://example.com/me/preview#123file321_s300')) # name_preview falls back to a random guid self.assertTrue(policy.name_preview( Node(ns.bsfs.Preview)).uri.startswith('http://example.com/me/preview#')) self.assertTrue(policy.name_preview( Node(ns.bsfs.Preview, size=200)).uri.startswith('http://example.com/me/preview#')) self.assertTrue(policy.name_preview( Node(ns.bsfs.Preview, size=200)).uri.endswith('_s200')) 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'), (Node(ns.bsfs.Preview, ucid='bar'), 'predB', 1234), (Node(ns.bsfs.Preview, ucid='hello'), 'predC', Node(ns.bsfs.File, ucid='world')) ] # handles nodes, handles values, ignores predicate self.assertListEqual(list(policy(triples)), [ (Node(ns.bsfs.File, uri='http://example.com/me/file#foo'), 'predA', 'hello'), (Node(ns.bsfs.Preview, uri='http://example.com/me/preview#bar'), 'predB', 1234), (Node(ns.bsfs.Preview, uri='http://example.com/me/preview#hello'), 'predC', Node(ns.bsfs.File, uri='http://example.com/me/file#world')), ]) ## main ## if __name__ == '__main__': unittest.main() ## EOF ##