""" Part of the bsfs test suite. A copy of the license is provided with the project. Author: Matthias Baumgartner, 2022 """ # imports import unittest # bsie imports from bsfs import schema as bsc from bsfs.namespace import ns from bsfs.query import ast from bsfs.triple_store import SparqlStore from bsfs.utils import URI # objects to test from bsfs.graph.ac.null import NullAC ## code ## class TestNullAC(unittest.TestCase): def setUp(self): self.backend = SparqlStore() self.backend.schema = bsc.from_string(''' prefix rdfs: prefix xsd: prefix bsfs: prefix bsm: prefix bse: bsfs:Entity rdfs:subClassOf bsfs:Node . bsfs:Tag rdfs:subClassOf bsfs:Node . xsd:string rdfs:subClassOf bsfs:Literal . bsfs:Number rdfs:subClassOf bsfs:Literal . xsd:integer rdfs:subClassOf bsfs:Number . # predicates mandated by Nodes bsm:t_created rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:Node ; rdfs:range xsd:integer ; bsfs:unique "true"^^xsd:boolean . # additionally defined predicates bse:tag rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:Entity ; rdfs:range bsfs:Tag ; bsfs:unique "false"^^xsd:boolean . bse:author rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . bse:filesize rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:Entity ; rdfs:range xsd:integer ; bsfs:unique "false"^^xsd:boolean . ''') self.user = URI('http://www.example.com/me') self.p_author = self.backend.schema.predicate(ns.bse.author) self.p_filesize = self.backend.schema.predicate(ns.bse.filesize) self.p_tag = self.backend.schema.predicate(ns.bse.tag) self.p_created = self.backend.schema.predicate(ns.bsm.t_created) self.ent_type = self.backend.schema.node(ns.bsfs.Entity) self.ent_ids = {URI('http://www.example.com/me/entity#1234'), URI('http://www.example.com/me/entity#4321')} def test_is_protected_predicate(self): ac = NullAC(self.backend, self.user) self.assertTrue(ac.is_protected_predicate(self.p_created)) self.assertFalse(ac.is_protected_predicate(self.p_filesize)) self.assertFalse(ac.is_protected_predicate(self.p_author)) self.assertFalse(ac.is_protected_predicate(self.p_tag)) def test_create(self): ac = NullAC(self.backend, self.user) self.assertEqual(None, ac.create(self.ent_type, self.ent_ids)) def test_link_from_node(self): ac = NullAC(self.backend, self.user) self.assertSetEqual(self.ent_ids, ac.link_from_node(self.ent_type, self.ent_ids)) def test_link_to_node(self): ac = NullAC(self.backend, self.user) self.assertSetEqual(self.ent_ids, ac.link_to_node(self.ent_type, self.ent_ids)) def test_write_literal(self): ac = NullAC(self.backend, self.user) self.assertSetEqual(self.ent_ids, ac.write_literal(self.ent_type, self.ent_ids)) def test_createable(self): ac = NullAC(self.backend, self.user) self.assertSetEqual(self.ent_ids, ac.createable(self.ent_type, self.ent_ids)) def test_filter_read(self): query = ast.filter.Or( ast.filter.Any(ns.bse.tag, ast.filter.Is('http://example.com/tag#1234')), ast.filter.Any(ns.bse.tag, ast.filter.Is('http://example.com/tag#4321')), ast.filter.Any(ns.bse.author, ast.filter.Equals('Me, Myself, and I'))) ac = NullAC(self.backend, self.user) self.assertEqual(query, ac.filter_read(self.ent_type, query)) return query ## main ## if __name__ == '__main__': unittest.main() ## EOF ##