oldaplib 0.3.30__py3-none-any.whl → 0.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,407 @@
1
+ import json
2
+ import unittest
3
+ from copy import deepcopy
4
+ from pathlib import Path
5
+ from pprint import pprint
6
+ from time import sleep
7
+
8
+ from oldaplib.src.cachesingleton import CacheSingleton, CacheSingletonRedis
9
+ from oldaplib.src.datamodel import DataModel
10
+ from oldaplib.src.dtypes.namespaceiri import NamespaceIRI
11
+ from oldaplib.src.enums.roleattr import RoleAttr
12
+ from oldaplib.src.enums.xsd_datatypes import XsdDatatypes
13
+ from oldaplib.src.hasproperty import HasProperty
14
+ from oldaplib.src.helpers.serializer import serializer
15
+ from oldaplib.src.objectfactory import ResourceInstanceFactory
16
+ from oldaplib.src.role import Role
17
+ from oldaplib.src.connection import Connection
18
+ from oldaplib.src.enums.language import Language
19
+ from oldaplib.src.enums.datapermissions import DataPermission
20
+ from oldaplib.src.helpers.context import Context
21
+ from oldaplib.src.helpers.langstring import LangString
22
+ from oldaplib.src.helpers.oldaperror import OldapErrorInconsistency, OldapErrorNotFound, OldapErrorNoPermission, \
23
+ OldapErrorAlreadyExists, OldapErrorImmutable, OldapErrorInUse, OldapErrorType
24
+ from oldaplib.src.project import Project
25
+ from oldaplib.src.propertyclass import PropertyClass
26
+ from oldaplib.src.resourceclass import ResourceClass
27
+ from oldaplib.src.xsd.iri import Iri
28
+ from oldaplib.src.xsd.xsd_integer import Xsd_integer
29
+ from oldaplib.src.xsd.xsd_qname import Xsd_QName
30
+ from oldaplib.src.xsd.xsd_string import Xsd_string
31
+
32
+
33
+ def find_project_root(current_path):
34
+ # Climb up the directory hierarchy and check for a marker file
35
+ path = Path(current_path).absolute()
36
+ while not (path / 'pyproject.toml').exists():
37
+ if path.parent == path:
38
+ # Root of the filesystem, file not found
39
+ raise RuntimeError('Project root not found')
40
+ path = path.parent
41
+ return path
42
+
43
+
44
+ class TestPermissionSet(unittest.TestCase):
45
+ _connection: Connection
46
+ _unpriv: Connection
47
+
48
+ @classmethod
49
+ def setUpClass(cls):
50
+ cache = CacheSingletonRedis()
51
+ cache.clear()
52
+ super().setUpClass()
53
+ cls._project_root = find_project_root(__file__)
54
+
55
+
56
+ cls._context = Context(name="DEFAULT")
57
+ cls._context['test'] = NamespaceIRI("http://testing.org/datatypes#")
58
+ cls._context.use('test')
59
+
60
+ cls._connection = Connection(userId="rosenth",
61
+ credentials="RioGrande",
62
+ context_name="DEFAULT")
63
+ cls._unpriv = Connection(userId="fornaro",
64
+ credentials="RioGrande",
65
+ context_name="DEFAULT")
66
+
67
+ cls._connection.clear_graph(Xsd_QName('oldap:admin'))
68
+ file = cls._project_root / 'oldaplib' / 'ontologies' / 'admin.trig'
69
+ cls._connection.upload_turtle(file)
70
+
71
+ file = cls._project_root / 'oldaplib' / 'ontologies' / 'admin-testing.trig'
72
+ cls._connection.upload_turtle(file)
73
+
74
+ cls._connection.clear_graph(Xsd_QName('test:test'))
75
+ cls._connection.clear_graph(Xsd_QName('test:onto'))
76
+ cls._connection.clear_graph(Xsd_QName('test:shacl'))
77
+ cls._connection.clear_graph(Xsd_QName('test:lists'))
78
+ cls._connection.clear_graph(Xsd_QName('test:data'))
79
+ file = cls._project_root / 'oldaplib' / 'testdata' / 'connection_test.trig'
80
+ cls._connection.upload_turtle(file)
81
+
82
+ cls._project = Project.read(cls._connection, "test")
83
+ LangString.defaultLanguage = Language.EN
84
+
85
+ @classmethod
86
+ def tearDownClass(cls):
87
+ #cls._connection.clear_graph(Xsd_QName('oldap:admin'))
88
+ #cls._connection.upload_turtle("oldap/ontologies/admin.trig")
89
+ #sleep(1) # upload may take a while...
90
+ pass
91
+
92
+ def test_construct_permissionset(self):
93
+ ps = Role(con=self._connection,
94
+ roleId="test1_ps",
95
+ label=LangString("testPerm@en", "test@Perm@de"),
96
+ comment=LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"),
97
+ definedByProject=Iri('oldap:SystemProject'))
98
+ self.assertEqual(ps.label, LangString("testPerm@en", "test@Perm@de"))
99
+ self.assertEqual(ps.comment, LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"))
100
+ self.assertEqual(ps.definedByProject, Iri('oldap:SystemProject'))
101
+
102
+ def test_deepcopy_permissionset(self):
103
+ ps = Role(con=self._connection,
104
+ roleId="test1_ps",
105
+ label=LangString("testPerm@en", "test@Perm@de"),
106
+ comment=LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"),
107
+ definedByProject=Iri('oldap:SystemProject'))
108
+ ps1 = deepcopy(ps)
109
+ self.assertEqual(ps.roleId, ps1.roleId)
110
+ self.assertFalse(ps.roleId is ps1.roleId)
111
+
112
+ self.assertEqual(ps.label, ps1.label)
113
+ self.assertFalse(ps.label is ps1.label)
114
+
115
+ self.assertEqual(ps.comment, ps1.comment)
116
+ self.assertFalse(ps.comment is ps1.comment)
117
+
118
+ self.assertEqual(ps.definedByProject, ps1.definedByProject)
119
+ self.assertFalse(ps.definedByProject is ps1.definedByProject)
120
+
121
+
122
+ def test_create_permissionset(self):
123
+ ps = Role(con=self._connection,
124
+ roleId="test3_ps",
125
+ label=LangString("\";SELECT * { password ?p ?o . }@en", "test@Perm@de"),
126
+ comment=LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"),
127
+ definedByProject=Iri('oldap:SystemProject'))
128
+ ps.create()
129
+ self.assertIsNotNone(ps.created)
130
+ self.assertIsNotNone(ps.creator)
131
+ self.assertIsNotNone(ps.modified)
132
+ self.assertIsNotNone(ps.contributor)
133
+ del ps
134
+ ps = Role.read(con=self._connection, roleId="test3_ps", definedByProject=Iri('oldap:SystemProject'), ignore_cache=True)
135
+ self.assertEqual(ps.label, LangString("\";SELECT * { password ?p ?o . }@en", "test@Perm@de"))
136
+ self.assertEqual(ps.comment, LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"))
137
+ self.assertEqual(ps.definedByProject, Iri('oldap:SystemProject'))
138
+
139
+ ps.delete() # cleanup
140
+
141
+ def test_create_permset_with_shortname(self):
142
+ ps = Role(con=self._connection,
143
+ roleId="test4_ps",
144
+ label=LangString("test4@en", "test4@Perm@de"),
145
+ comment=LangString("Testing a PermissionSet 4@en", "Test eines PermissionSet 4@Perm@de"),
146
+ definedByProject='britnet')
147
+ ps.create()
148
+ ps = Role.read(con=self._connection, roleId="test4_ps", definedByProject=Iri('http://www.salsah.org/version/2.0/SwissBritNet'), ignore_cache=True)
149
+ self.assertEqual(ps.label, LangString("test4@en", "test4@Perm@de"))
150
+
151
+ ps.delete() # cleanup
152
+
153
+ def test_create_prmission_set_without_label(self):
154
+ ps = Role(con=self._connection,
155
+ roleId="test5_ps",
156
+ label=LangString(),
157
+ comment=LangString("Testing a PermissionSet 4@en", "Test eines PermissionSet 4@Perm@de"),
158
+ definedByProject='britnet')
159
+ ps.create()
160
+
161
+ ps.read(con=self._connection, roleId="test5_ps", definedByProject='britnet')
162
+ self.assertEqual(ps.definedByProject, Iri("http://www.salsah.org/version/2.0/SwissBritNet"))
163
+ ps.delete()
164
+
165
+
166
+ # @unittest.skip('Work in progress')
167
+ def test_read_permission_A(self):
168
+ ps = Role.read(con=self._connection, roleId='Unknown', definedByProject='oldap:SystemProject', ignore_cache=True)
169
+ self.assertEqual(ps.label, LangString("Unknown user@en", "Unbekannte(r) Nutzer:in@de", "Utilisateur inconnu@fr", "Utenti sconosciuti@it"))
170
+ self.assertEqual(ps.definedByProject, Iri('oldap:SystemProject'))
171
+
172
+ def test_read_permission_B(self):
173
+ ps = Role.read(con=self._connection, roleId='HyperHamletMember', definedByProject='oldap:HyperHamlet', ignore_cache=True)
174
+ self.assertEqual(ps.label, LangString("Team HyperHamlet@en", "Team HyperHamlet@de", "Équipe HyperHamlet@fr", "Team HyperHamlet@it"))
175
+ self.assertEqual(ps.definedByProject, Iri('oldap:HyperHamlet'))
176
+
177
+ def test_read_permission_with_cache(self):
178
+ ps = Role.read(con=self._connection, roleId='HyperHamletMember', definedByProject='oldap:HyperHamlet', ignore_cache=True)
179
+ ps2 = Role.read(con=self._connection, roleId='HyperHamletMember', definedByProject='oldap:HyperHamlet')
180
+
181
+ self.assertEqual(ps2.label, LangString("Team HyperHamlet@en", "Team HyperHamlet@de", "Équipe HyperHamlet@fr", "Team HyperHamlet@it"))
182
+ self.assertEqual(ps.label, ps2.label)
183
+ self.assertFalse(ps.label is ps2.label)
184
+
185
+ self.assertEqual(ps2.definedByProject, Iri('oldap:HyperHamlet'))
186
+ self.assertEqual(ps.definedByProject, ps2.definedByProject)
187
+ self.assertFalse(ps.definedByProject is ps2.definedByProject)
188
+
189
+ def test_read_permission_with_iri(self):
190
+ ps = Role.read(con=self._connection, qname=Xsd_QName('hyha:HyperHamletMember'), ignore_cache=True)
191
+ self.assertEqual(ps.label, LangString("Team HyperHamlet@en", "Team HyperHamlet@de", "Équipe HyperHamlet@fr", "Team HyperHamlet@it"))
192
+ self.assertEqual(ps.definedByProject, Iri('oldap:HyperHamlet'))
193
+
194
+
195
+ def test_create_permission(self):
196
+ ps = Role(con=self._connection,
197
+ roleId="testPerm",
198
+ label=LangString("testPerm@en", "test@Perm@de"),
199
+ comment=LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"),
200
+ definedByProject=Iri('oldap:SystemProject'))
201
+ ps.create()
202
+ self.assertIsNotNone(ps.created)
203
+ self.assertIsNotNone(ps.creator)
204
+ self.assertIsNotNone(ps.modified)
205
+ self.assertIsNotNone(ps.contributor)
206
+ del ps
207
+ ps = Role.read(con=self._connection, roleId="testPerm", definedByProject='oldap:SystemProject', ignore_cache=True)
208
+ self.assertEqual(ps.label, LangString("testPerm@en", "test@Perm@de"))
209
+ self.assertEqual(ps.comment, LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"))
210
+ self.assertEqual(ps.definedByProject, Iri('oldap:SystemProject'))
211
+
212
+ ps.delete() # cleanup
213
+
214
+ def test_create_permission_strange_label(self):
215
+ ps = Role(con=self._connection,
216
+ roleId="gagaPerm",
217
+ label=LangString("\";SELECT * { password ?p ?o . }@en", "test@Perm@de"),
218
+ comment=LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"),
219
+ definedByProject=Iri('oldap:SystemProject'))
220
+ ps.create()
221
+ self.assertIsNotNone(ps.created)
222
+ self.assertIsNotNone(ps.creator)
223
+ self.assertIsNotNone(ps.modified)
224
+ self.assertIsNotNone(ps.contributor)
225
+ del ps
226
+ ps = Role.read(con=self._connection, roleId="gagaPerm", definedByProject='oldap:SystemProject', ignore_cache=True)
227
+ self.assertEqual(ps.label, LangString("\";SELECT * { password ?p ?o . }@en", "test@Perm@de"))
228
+ self.assertEqual(ps.comment, LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"))
229
+ self.assertEqual(ps.definedByProject, Iri('oldap:SystemProject'))
230
+
231
+ ps.delete()
232
+
233
+ def test_create_permission_no_label(self):
234
+ ps = Role(con=self._connection,
235
+ roleId="gagaPerm2",
236
+ definedByProject=Iri('oldap:SystemProject'))
237
+ ps.create()
238
+ del ps
239
+ ps = Role.read(con=self._connection, roleId="gagaPerm2", definedByProject='oldap:SystemProject', ignore_cache=True)
240
+ self.assertIsNone(ps.label)
241
+ self.assertIsNone(ps.comment)
242
+ self.assertEqual(ps.definedByProject, Iri('oldap:SystemProject'))
243
+
244
+ ps.delete()
245
+
246
+ def test_create_permission_duplicate(self):
247
+ ps = Role(con=self._connection,
248
+ roleId="testPerm2",
249
+ label=LangString("testPerm@en", "test@Perm@de"),
250
+ comment=LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"),
251
+ definedByProject=Iri('oldap:SystemProject'))
252
+ ps.create()
253
+ ps = Role(con=self._connection,
254
+ roleId="testPerm2",
255
+ label=LangString("testPerm33@en", "test@Perm33@de"),
256
+ comment=LangString("Testing a PermissionSet33@en", "Test eines PermissionSet33@Perm@de"),
257
+ definedByProject=Iri('oldap:SystemProject'))
258
+ with self.assertRaises(OldapErrorAlreadyExists) as ex:
259
+ ps.create()
260
+
261
+ ps.read(con=self._connection, roleId="testPerm2", definedByProject=Iri('oldap:SystemProject'))
262
+
263
+ ps.delete()
264
+
265
+ def test_create_permission_unauthorized(self):
266
+ ps = Role(con=self._unpriv,
267
+ roleId="testPermUnauth",
268
+ label=LangString("testPermUnauth@en", "test@PermUnauth@de"),
269
+ comment=LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"),
270
+ definedByProject=Iri('oldap:SystemProject'))
271
+ with self.assertRaises(OldapErrorNoPermission):
272
+ ps.create()
273
+
274
+ def test_create_permission_unauthorized(self):
275
+ ps = Role(con=self._unpriv,
276
+ roleId="testPermUnauth",
277
+ label=LangString("testPermUnauth2@en", "test@PermUnauth2@de"),
278
+ comment=LangString("Testing a PermissionSet@en", "Test eines PermissionSet@Perm@de"),
279
+ definedByProject=Iri('oldap:HyperHamlet'))
280
+ with self.assertRaises(OldapErrorNoPermission):
281
+ ps.create()
282
+
283
+ # TODO: More testing!!!
284
+ def test_search_roles(self):
285
+ iris = Role.search(self._connection, label="Unknown user")
286
+ self.assertEqual(len(iris), 1)
287
+ self.assertTrue(Xsd_QName('oldap:Unknown') in iris)
288
+
289
+ iris = Role.search(self._connection, label=Xsd_string("Unbekannte(r) Nutzer:in@de"))
290
+ self.assertEqual(len(iris), 1)
291
+ self.assertTrue(Xsd_QName('oldap:Unknown') in iris)
292
+
293
+ iris = Role.search(self._connection, definedByProject=Iri("oldap:HyperHamlet"))
294
+ self.assertEqual(len(iris), 1)
295
+ self.assertEqual(Xsd_QName('hyha:HyperHamletMember'), iris[0])
296
+
297
+ iris = Role.search(self._connection)
298
+ self.assertEqual({Xsd_QName("oldap:Unknown"),
299
+ Xsd_QName("hyha:HyperHamletMember"),
300
+ Xsd_QName("britnet:BritnetEditor")}, set(iris))
301
+
302
+ def test_update_permission_set(self):
303
+ ps = Role(con=self._connection,
304
+ roleId="testUpdatePerm",
305
+ label=LangString("testUpdatePerm@en", "testVerändernPerm@de"),
306
+ comment=LangString("Testing update of PermissionSet@en", "Test einer Veränderung eines PermissionSet@Perm@de"),
307
+ definedByProject=Iri('oldap:SystemProject'))
308
+ ps.create()
309
+
310
+ psId = ps.roleId
311
+ del ps
312
+ ps = Role.read(con=self._connection, roleId=psId, definedByProject=Iri('oldap:SystemProject'), ignore_cache=True)
313
+ ps.label[Language.FR] = "testeModificationPerm"
314
+ ps.update()
315
+ ps = Role.read(con=self._connection, roleId=psId, definedByProject=Iri('oldap:SystemProject'))
316
+ self.assertEqual(ps.label, LangString("testUpdatePerm@en", "testVerändernPerm@de", "testeModificationPerm@fr"))
317
+ del ps.comment
318
+ ps.update()
319
+ self.assertIsNone(ps.comment)
320
+ self.assertIsNone(ps.get(RoleAttr.COMMENT))
321
+
322
+ ps = Role.read(con=self._connection, roleId=psId, definedByProject=Iri('oldap:SystemProject'), ignore_cache=True)
323
+ ps.comment = LangString("gagagaga@en")
324
+ with self.assertRaises(OldapErrorImmutable):
325
+ ps[RoleAttr.DEFINED_BY_PROJECT] = Iri('oldap:HyperHamlet')
326
+
327
+ ps = Role.read(con=self._unpriv, roleId=psId, definedByProject=Iri('oldap:SystemProject'), ignore_cache=True)
328
+ ps.comment = LangString("gagagaga@fr")
329
+ with self.assertRaises(OldapErrorNoPermission):
330
+ ps.update()
331
+
332
+ ps = Role.read(con=self._connection, roleId=psId, definedByProject=Iri('oldap:SystemProject'), ignore_cache=True)
333
+ ps.delete()
334
+
335
+
336
+ def test_update_permissionset_B(self):
337
+ ps = Role(con=self._connection,
338
+ roleId="testUpdatePermB",
339
+ label=LangString("testUpdatePerm@en", "testVerändernPerm@de"),
340
+ comment=LangString("Testing update of PermissionSet@en", "Test einer Veränderung eines PermissionSet@Perm@de"),
341
+ definedByProject=Iri('oldap:SystemProject'))
342
+ ps.create()
343
+ psId = ps.roleId
344
+ del ps
345
+ ps = Role.read(con=self._connection, roleId=psId, definedByProject=Iri('oldap:SystemProject'), ignore_cache=True)
346
+
347
+ ps.label[Language.IT] = "TEST_ADD_DEL"
348
+ del ps.label[Language.EN]
349
+ ps.update()
350
+
351
+ def test_delete_permission_set(self):
352
+ ps = Role(con=self._connection,
353
+ roleId="testDeletePerm",
354
+ label=LangString("testDeletePerm@en", "testDeletePerm@de"),
355
+ comment=LangString("Testing deleting a PermissionSet@en", "Test einer Löschung eines PermissionSet@Perm@de"),
356
+ definedByProject=Iri('oldap:HyperHamlet'))
357
+ ps.create()
358
+ del ps
359
+ ps = Role.read(con=self._connection, roleId="testDeletePerm", definedByProject=Iri('oldap:HyperHamlet'), ignore_cache=True)
360
+ ps.delete()
361
+
362
+ with self.assertRaises(OldapErrorNotFound) as ex:
363
+ project = ps.read(con=self._connection, roleId="testDeletePerm", definedByProject=Iri('oldap:HyperHamlet'), ignore_cache=True)
364
+
365
+ def test_delete_permission_set_in_use(self):
366
+ ps = Role.read(con=self._connection, roleId="Unknown", definedByProject=Iri('oldap:SystemProject'), ignore_cache=True)
367
+ with self.assertRaises(OldapErrorInUse):
368
+ ps.delete()
369
+
370
+ # TODO: THIS TEST MUST BE TESTED LATER AFTER DATAMODEL ETC. HAVE bEEN ADAPED TO ROLES!
371
+ def test_delete_permission_set_user_with_data(self):
372
+ dm = DataModel.read(self._connection, self._project, ignore_cache=True)
373
+ dm_name = self._project.projectShortName
374
+
375
+ irgendwas = PropertyClass(con=self._connection,
376
+ project=self._project,
377
+ property_class_iri=Xsd_QName(f'{dm_name}:irgendwas'),
378
+ datatype=XsdDatatypes.string,
379
+ name=LangString(["AnyString@en", "Irgendwas@de"]))
380
+
381
+ #
382
+ # Now we create a simple data model
383
+ #
384
+ resobj = ResourceClass(con=self._connection,
385
+ project=self._project,
386
+ owlclass_iri=Xsd_QName(f'{dm_name}:DummyClass'),
387
+ label=LangString(["Dummy@en", "Dummy@de"]),
388
+ hasproperties=[
389
+ HasProperty(con=self._connection, project=self._project, prop=irgendwas, maxCount=Xsd_integer(1),
390
+ minCount=Xsd_integer(1), order=1)])
391
+ dm[Xsd_QName(f'{dm_name}:resobj')] = resobj
392
+ dm.update()
393
+ dm = DataModel.read(self._connection, self._project, ignore_cache=True)
394
+
395
+ factory = ResourceInstanceFactory(con=self._connection, project=self._project)
396
+ DummyClass = factory.createObjectInstance('DummyClass')
397
+ r = DummyClass(irgendwas="Dies ist irgend ein String", grantsPermission=Xsd_QName('oldap:GenericUpdate'))
398
+ r.create()
399
+
400
+ ps = Role.read(con=self._connection, roleId="Unknown", definedByProject=Iri('oldap:SystemProject'), ignore_cache=True)
401
+ with self.assertRaises(OldapErrorInUse):
402
+ ps.delete()
403
+
404
+
405
+
406
+ if __name__ == '__main__':
407
+ unittest.main()