aboutsummaryrefslogtreecommitdiffstats
path: root/test/graph/test_nodes.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/graph/test_nodes.py')
-rw-r--r--test/graph/test_nodes.py95
1 files changed, 91 insertions, 4 deletions
diff --git a/test/graph/test_nodes.py b/test/graph/test_nodes.py
index 2870f35..a4e07ee 100644
--- a/test/graph/test_nodes.py
+++ b/test/graph/test_nodes.py
@@ -9,8 +9,8 @@ import rdflib
import unittest
# bsie imports
-from bsfs import schema as _schema
-from bsfs.namespace import ns
+from bsfs import schema as bsc
+from bsfs.namespace import Namespace, ns
from bsfs.triple_store.sparql import SparqlStore
from bsfs.utils import errors, URI
@@ -20,11 +20,13 @@ from bsfs.graph.nodes import Nodes
## code ##
+bst = Namespace('http://bsfs.ai/schema/Tag')
+
class TestNodes(unittest.TestCase):
def setUp(self):
# initialize backend
self.backend = SparqlStore()
- self.backend.schema = _schema.from_string('''
+ self.backend.schema = bsc.from_string('''
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
@@ -67,6 +69,11 @@ class TestNodes(unittest.TestCase):
rdfs:range bsfs:User ;
bsfs:unique "true"^^xsd:boolean .
+ bst:label rdfs:subClassOf bsfs:Predicate ;
+ rdfs:domain bsfs:Tag ;
+ rdfs:range xsd:string ;
+ bsfs:unique "true"^^xsd:boolean .
+
bst:representative rdfs:subClassOf bsfs:Predicate ;
rdfs:domain bsfs:Tag ;
rdfs:range bsfs:Entity ;
@@ -89,7 +96,8 @@ class TestNodes(unittest.TestCase):
(rdflib.URIRef(ns.bse.filesize), rdflib.RDFS.subClassOf, rdflib.URIRef(ns.bsfs.Predicate)),
(rdflib.URIRef(ns.bse.tag), rdflib.RDFS.subClassOf, rdflib.URIRef(ns.bsfs.Predicate)),
(rdflib.URIRef(ns.bse.author), rdflib.RDFS.subClassOf, rdflib.URIRef(ns.bsfs.Predicate)),
- (rdflib.URIRef('http://bsfs.ai/schema/Tag#representative'), rdflib.RDFS.subClassOf, rdflib.URIRef(ns.bsfs.Predicate)),
+ (rdflib.URIRef(bst.representative), rdflib.RDFS.subClassOf, rdflib.URIRef(ns.bsfs.Predicate)),
+ (rdflib.URIRef(bst.label), rdflib.RDFS.subClassOf, rdflib.URIRef(ns.bsfs.Predicate)),
}
# Nodes constructor args
self.user = URI('http://example.com/me')
@@ -371,6 +379,85 @@ class TestNodes(unittest.TestCase):
(self.p_author.uri, Nodes(self.backend, self.user, self.user_type, {URI('http://example.com/me/user#1234'), URI('http://example.com/me/user#4321')}))))
self.assertSetEqual(curr, set(self.backend._graph))
+ def test_fetch(self):
+ # setup: add some instances
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}) \
+ .set(ns.bse.comment, 'hello world') \
+ .set(ns.bse.filesize, 1234) \
+ .set(ns.bse.tag, Nodes(self.backend, self.user, self.tag_type, {'http://example.com/me/tag#1234'}))
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#4321'}) \
+ .set(ns.bse.filesize, 4321) \
+ .set(ns.bse.tag, Nodes(self.backend, self.user, self.tag_type, {'http://example.com/me/tag#4321'}))
+ Nodes(self.backend, self.user, self.tag_type, {'http://example.com/me/tag#1234'}) \
+ .set(bst.label, 'tag_label_1234')
+ Nodes(self.backend, self.user, self.tag_type, {'http://example.com/me/tag#4321'}) \
+ .set(bst.label, 'tag_label_4321')
+ # setup: get nodes instance
+ nodes = Nodes(self.backend, self.user, self.ent_type, self.ent_ids)
+ # must pass at least one path
+ self.assertRaises(AttributeError, nodes.get)
+ # view must be list or dict
+ self.assertRaises(ValueError, nodes.get, ns.bse.filesize, view='hello')
+ self.assertRaises(ValueError, nodes.get, ns.bse.filesize, view=1234)
+ self.assertRaises(ValueError, nodes.get, ns.bse.filesize, view=tuple)
+ # can pass path as URI
+ self.assertDictEqual(nodes.get(ns.bse.filesize), {
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}): 1234,
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#4321'}): 4321,
+ })
+ # can pass path as sequence of URI
+ self.assertDictEqual(nodes.get((ns.bse.tag, bst.label)), {
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}): {'tag_label_1234'},
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#4321'}): {'tag_label_4321'},
+ })
+ # get returns the same path that was passed
+ self.assertCountEqual(list(nodes.get((ns.bse.tag, bst.label), path=False, view=list)), [
+ (Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}), (ns.bse.tag, bst.label), 'tag_label_1234'),
+ (Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#4321'}), (ns.bse.tag, bst.label), 'tag_label_4321'),
+ ])
+ self.assertCountEqual(list(nodes.get([ns.bse.tag, bst.label], path=False, view=list)), [
+ (Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}), [ns.bse.tag, bst.label], 'tag_label_1234'),
+ (Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#4321'}), [ns.bse.tag, bst.label], 'tag_label_4321'),
+ ])
+ # paths must be URI or sequence thereof
+ self.assertRaises(TypeError, nodes.get, 1234)
+ self.assertRaises(TypeError, nodes.get, (ns.bse.tag, 1234))
+ self.assertRaises(TypeError, nodes.get, (1234, ns.bse.tag))
+ self.assertRaises(errors.ConsistencyError, nodes.get, 'hello world')
+ self.assertRaises(errors.ConsistencyError, nodes.get, ns.bse.invalid)
+ self.assertRaises(errors.ConsistencyError, nodes.get, (ns.bse.tag, bst.invalid))
+ # can pass multiple paths
+ self.assertDictEqual(nodes.get(ns.bse.filesize, (ns.bse.tag, bst.label)), {
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}): {
+ ns.bse.filesize: 1234,
+ (ns.bse.tag, bst.label): {'tag_label_1234'},
+ },
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#4321'}): {
+ ns.bse.filesize: 4321,
+ (ns.bse.tag, bst.label): {'tag_label_4321'},
+ },
+ })
+ # get respects view
+ self.assertDictEqual(nodes.get(ns.bse.filesize, view=dict), {
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}): 1234,
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#4321'}): 4321,
+ })
+ self.assertSetEqual(set(nodes.get(ns.bse.filesize, view=list)), {
+ (Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}), 1234),
+ (Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#4321'}), 4321),
+ })
+ # get returns Nodes instance when fetching a node
+ self.assertDictEqual(nodes.get(ns.bse.tag), {
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}):
+ {Nodes(self.backend, self.user, self.tag_type, {'http://example.com/me/tag#1234'})},
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#4321'}):
+ {Nodes(self.backend, self.user, self.tag_type, {'http://example.com/me/tag#4321'})},
+ })
+ # get returns a value when fetching a value and omits missing values
+ self.assertDictEqual(nodes.get(ns.bse.comment), {
+ Nodes(self.backend, self.user, self.ent_type, {'http://example.com/me/entity#1234'}): {'hello world'},
+ })
+
## main ##