aboutsummaryrefslogtreecommitdiffstats
path: root/test/lib
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-07-26 12:48:54 +0200
committerMatthias Baumgartner <dev@igsor.net>2023-07-26 12:48:54 +0200
commitd6a5c0f596a212f0e1d4e4b351b5b0e6857d74f7 (patch)
tree645c6fe6b120bb4759b7ac07b4799ffec3bfb4bf /test/lib
parentb1ee4452c0e4b820efe69e428e7eaa54cf87ae16 (diff)
downloadbsie-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.py24
-rw-r--r--test/lib/test_naming_policy.py158
-rw-r--r--test/lib/test_pipeline.py5
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)