aboutsummaryrefslogtreecommitdiffstats
path: root/test/graph/ac/test_null.py
blob: c3df393e7e0d3a41bd02360014361e4ba677ac01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
"""

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: <http://www.w3.org/2000/01/rdf-schema#>
            prefix xsd: <http://www.w3.org/2001/XMLSchema#>

            prefix bsfs: <http://bsfs.ai/schema/>
            prefix bsm: <http://bsfs.ai/schema/Meta#>
            prefix bse: <http://bsfs.ai/schema/Entity#>

            bsfs:Entity rdfs:subClassOf bsfs:Node .
            bsfs:Tag rdfs:subClassOf bsfs:Node .
            xsd:string rdfs:subClassOf bsfs:Literal .
            xsd:integer rdfs:subClassOf bsfs:Literal .

            # 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 ##