diff options
author | Matthias Baumgartner <dev@igsor.net> | 2023-07-26 12:48:54 +0200 |
---|---|---|
committer | Matthias Baumgartner <dev@igsor.net> | 2023-07-26 12:48:54 +0200 |
commit | d6a5c0f596a212f0e1d4e4b351b5b0e6857d74f7 (patch) | |
tree | 645c6fe6b120bb4759b7ac07b4799ffec3bfb4bf /test/lib | |
parent | b1ee4452c0e4b820efe69e428e7eaa54cf87ae16 (diff) | |
download | bsie-d6a5c0f596a212f0e1d4e4b351b5b0e6857d74f7.tar.gz bsie-d6a5c0f596a212f0e1d4e4b351b5b0e6857d74f7.tar.bz2 bsie-d6a5c0f596a212f0e1d4e4b351b5b0e6857d74f7.zip |
refactored naming policy into uri matcher
Diffstat (limited to 'test/lib')
-rw-r--r-- | test/lib/test_bsie.py | 24 | ||||
-rw-r--r-- | test/lib/test_naming_policy.py | 158 | ||||
-rw-r--r-- | test/lib/test_pipeline.py | 5 |
3 files changed, 17 insertions, 170 deletions
diff --git a/test/lib/test_bsie.py b/test/lib/test_bsie.py index 6586e58..a154477 100644 --- a/test/lib/test_bsie.py +++ b/test/lib/test_bsie.py @@ -6,9 +6,10 @@ import unittest # bsie imports from bsie.extractor import ExtractorBuilder from bsie.extractor.base import SCHEMA_PREAMBLE -from bsie.lib import PipelineBuilder, DefaultNamingPolicy +from bsie.lib import PipelineBuilder +from bsie.matcher import nodes, DefaultMatcher from bsie.reader import ReaderBuilder -from bsie.utils import bsfs, node, ns +from bsie.utils import bsfs, ns # objects to test from bsie.lib.bsie import BSIE @@ -35,13 +36,13 @@ class TestBSIE(unittest.TestCase): )}, ]) # build pipeline - self.naming_policy = DefaultNamingPolicy(host='http://example.com/local', user='me') + self.matcher = DefaultMatcher(host='http://example.com/local', user='me') pbuild = PipelineBuilder(rbuild, ebuild) self.pipeline = pbuild.build() def test_construction(self): # only pipeline and naming policy - lib = BSIE(self.pipeline, self.naming_policy) + lib = BSIE(self.pipeline, self.matcher) self.assertSetEqual(set(lib.principals), { ns.bse.filename, ns.bse.dirname, @@ -71,7 +72,7 @@ class TestBSIE(unittest.TestCase): ''')) # specify collect - lib = BSIE(self.pipeline, self.naming_policy, collect={ + lib = BSIE(self.pipeline, self.matcher, collect={ ns.bse.filesize, ns.bse.author, ns.bse.inexistent, @@ -92,7 +93,7 @@ class TestBSIE(unittest.TestCase): bsfs:unique "true"^^xsd:boolean . ''')) # empty collect is disregarded - lib = BSIE(self.pipeline, self.naming_policy, collect={}) + lib = BSIE(self.pipeline, self.matcher, collect={}) self.assertSetEqual(set(lib.principals), { ns.bse.filename, ns.bse.dirname, @@ -123,7 +124,7 @@ class TestBSIE(unittest.TestCase): ''')) # specify discard - lib = BSIE(self.pipeline, self.naming_policy, discard={ + lib = BSIE(self.pipeline, self.matcher, discard={ ns.bse.filesize, ns.bse.filename, ns.bse.inexistent, @@ -151,7 +152,7 @@ class TestBSIE(unittest.TestCase): ''')) # specify collect and discard - lib = BSIE(self.pipeline, self.naming_policy, + lib = BSIE(self.pipeline, self.matcher, collect={ns.bse.filesize, ns.bse.author, ns.bse.foo, ns.bse.bar}, discard={ns.bse.author, ns.bse.foo, ns.bse.foobar}, ) @@ -168,7 +169,7 @@ class TestBSIE(unittest.TestCase): def test_from_file(self): # setup - lib = BSIE(self.pipeline, self.naming_policy) + lib = BSIE(self.pipeline, self.matcher) self.assertSetEqual(set(lib.principals), { ns.bse.filesize, ns.bse.filename, @@ -176,7 +177,10 @@ class TestBSIE(unittest.TestCase): ns.bse.author, }) content_hash = 'a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447' - subject = node.Node(ns.bsn.Entity, uri=f'http://example.com/local/me/file#{content_hash}') + subject = nodes.Entity( + uri=f'http://example.com/local/me/file#{content_hash}', + ucid=content_hash, + ) testfile = os.path.join(os.path.dirname(__file__), 'testfile.t') # from_file extracts all available triples diff --git a/test/lib/test_naming_policy.py b/test/lib/test_naming_policy.py deleted file mode 100644 index a078fbd..0000000 --- a/test/lib/test_naming_policy.py +++ /dev/null @@ -1,158 +0,0 @@ - -# 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.bsn.Invalid, uri='http://example.com/you/foo#bar')).uri, - URI('http://example.com/you/foo#bar')) - # processes bsn:Entity - self.assertEqual(policy.handle_node( - Node(ns.bsn.Entity, ucid='abc123cba')).uri, - URI('http://example.com/me/file#abc123cba')) - # processes bsn:Preview - self.assertEqual(policy.handle_node( - Node(ns.bsn.Preview, ucid='abc123cba', size=123)).uri, - URI('http://example.com/me/preview#abc123cba_s123')) - # processes bsn:Tag - self.assertEqual(policy.handle_node( - Node(ns.bsn.Tag, label='hello')).uri, - URI('http://example.com/me/tag#hello')) - # processes bsn:Face - self.assertEqual(policy.handle_node( - Node(ns.bsn.Face, ucid='hello')).uri, - URI('http://example.com/me/face#hello')) - # raises an exception on unknown types - self.assertRaises(errors.ProgrammingError, policy.handle_node, - Node(ns.bsn.Invalid, ucid='abc123cba', size=123)) - - def test_name_entity(self): - # setup - policy = DefaultNamingPolicy('http://example.com', 'me') - # name_entity uses ucid - self.assertEqual(policy.name_entity( - Node(ns.bsn.Entity, ucid='123abc321')).uri, - URI('http://example.com/me/file#123abc321')) - # name_entity falls back to a random guid - self.assertTrue(policy.name_entity( - Node(ns.bsn.Entity)).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.bsn.Preview, ucid='123abc321')).uri, - URI('http://example.com/me/preview#123abc321')) - self.assertEqual(policy.name_preview( - Node(ns.bsn.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.bsn.Preview, source=Node(ns.bsn.Entity, ucid='123file321'))).uri, - URI('http://example.com/me/preview#123file321')) - self.assertEqual(policy.name_preview( - Node(ns.bsn.Preview, source=Node(ns.bsn.Entity, 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.bsn.Preview)).uri.startswith('http://example.com/me/preview#')) - self.assertTrue(policy.name_preview( - Node(ns.bsn.Preview, size=200)).uri.startswith('http://example.com/me/preview#')) - self.assertTrue(policy.name_preview( - Node(ns.bsn.Preview, size=200)).uri.endswith('_s200')) - - def test_name_tag(self): - # setup - policy = DefaultNamingPolicy('http://example.com', 'me') - # name_tag uses label - self.assertEqual(policy.name_tag( - Node(ns.bsn.Tag, label='hello')).uri, - URI('http://example.com/me/tag#hello')) - # name_tag matches the label - self.assertEqual( - policy.name_tag(Node(ns.bsn.Tag, label='world')), - policy.name_tag(Node(ns.bsn.Tag, label='world')), - ) - self.assertNotEqual( - policy.name_tag(Node(ns.bsn.Tag, label='hello')), - policy.name_tag(Node(ns.bsn.Tag, label='world')), - ) - # label can include characters that are not valid for an uri - self.assertEqual(policy.name_tag( - Node(ns.bsn.Preview, label='hello world { foo bar ] ')).uri, - URI('http://example.com/me/tag#hello%20world%20%7B%20foo%20bar%20%5D%20')) - # name_tag falls back to a random guid - self.assertTrue(policy.name_tag( - Node(ns.bsn.Tag,)).uri.startswith('http://example.com/me/tag#')) - - def test_name_face(self): - # setup - policy = DefaultNamingPolicy('http://example.com', 'me') - # name_face uses ucid - self.assertEqual(policy.name_face( - Node(ns.bsn.Face, ucid='hello_world')).uri, - URI('http://example.com/me/face#hello_world')) - # name_face falls back to a random guid - self.assertTrue(policy.name_face( - Node(ns.bsn.Face)).uri.startswith('http://example.com/me/face#')) - - -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.bsn.Entity, ucid='foo'), 'predA', 'hello'), - (Node(ns.bsn.Preview, ucid='bar'), 'predB', 1234), - (Node(ns.bsn.Preview, ucid='hello'), 'predC', Node(ns.bsn.Entity, ucid='world')) - ] - # handles nodes, handles values, ignores predicate - self.assertListEqual(list(policy(triples)), [ - (Node(ns.bsn.Entity, uri='http://example.com/me/file#foo'), 'predA', 'hello'), - (Node(ns.bsn.Preview, uri='http://example.com/me/preview#bar'), 'predB', 1234), - (Node(ns.bsn.Preview, uri='http://example.com/me/preview#hello'), 'predC', - Node(ns.bsn.Entity, uri='http://example.com/me/file#world')), - ]) - - -## main ## - -if __name__ == '__main__': - unittest.main() - -## EOF ## diff --git a/test/lib/test_pipeline.py b/test/lib/test_pipeline.py index 8d836fd..05c6768 100644 --- a/test/lib/test_pipeline.py +++ b/test/lib/test_pipeline.py @@ -5,7 +5,8 @@ import os import unittest # bsie imports -from bsie.utils import bsfs, errors, node, ns +from bsie.matcher import nodes +from bsie.utils import bsfs, errors, ns import bsie.extractor.generic.constant import bsie.extractor.generic.path import bsie.extractor.generic.stat @@ -84,7 +85,7 @@ class TestPipeline(unittest.TestCase): pipeline = Pipeline(self.ext2rdr) # build objects for tests content_hash = 'a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447' - subject = node.Node(ns.bsn.Entity, ucid=content_hash) + subject = nodes.Entity(ucid=content_hash) testfile = os.path.join(os.path.dirname(__file__), 'testfile.t') p_filename = pipeline.schema.predicate(ns.bse.filename) p_dirname = pipeline.schema.predicate(ns.bse.dirname) |