Skip to content

Commit 0003992

Browse files
author
Repumba
committed
add tests
1 parent 7f61450 commit 0003992

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

tests/backend/test_permissions.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,3 +239,84 @@ def test_removing_object_with_comments(admin_session):
239239

240240
with ShouldRaise(status_code=404):
241241
admin_session.get_sample(sample.dhash)
242+
243+
244+
def test_adding_related_files(admin_session):
245+
testCase = RelationTestCase(admin_session)
246+
247+
Alice = testCase.new_user("Alice")
248+
Bob = testCase.new_user("Bob", capabilities=["adding_related_files"])
249+
250+
SampleA = testCase.new_sample("SampleA")
251+
SampleA.create(Alice, upload_as="public")
252+
SampleB = testCase.new_sample("SampleB")
253+
254+
# Alice doesn't have capability
255+
with ShouldRaise(status_code=403):
256+
Alice.session.add_related_file(SampleA.dhash, "RelatedFileA")
257+
258+
# Everything works fine
259+
Bob.session.add_related_file(SampleA.dhash, "RelatedFileA")
260+
assert len( testCase.session.get_related_files(SampleA.dhash)['related_files'] ) == 1
261+
262+
# Bob can't add related files to objects not accessible for him
263+
with ShouldRaise(status_code=404):
264+
Bob.session.add_related_file(SampleB.dhash, "RelatedFileB")
265+
266+
267+
def test_removing_related_files(admin_session):
268+
testCase = RelationTestCase(admin_session)
269+
270+
Alice = testCase.new_user("Alice")
271+
Bob = testCase.new_user("Bob", capabilities=["removing_related_files"])
272+
273+
SampleA = testCase.new_sample("SampleA")
274+
SampleA.create(Alice, upload_as="public")
275+
SampleB = testCase.new_sample("SampleB")
276+
277+
related_file_content = rand_string()
278+
related_file_dhash = calc_sha256(related_file_content)
279+
280+
# Related files added by admin session
281+
testCase.session.add_related_file(SampleA.dhash, "RelatedFile", related_file_content)
282+
testCase.session.add_related_file(SampleB.dhash, "RelatedFile", related_file_content)
283+
284+
assert len( testCase.session.get_related_files(SampleA.dhash)['related_files'] ) == 1
285+
assert len( testCase.session.get_related_files(SampleB.dhash)['related_files'] ) == 1
286+
287+
# Alice doesn't have capability
288+
with ShouldRaise(status_code=403):
289+
Alice.session.remove_related_file(SampleA.dhash, related_file_dhash)
290+
291+
# Bob can't remove related files for objects not accessible for him
292+
with ShouldRaise(status_code=404):
293+
Bob.session.remove_related_file(SampleB.dhash, related_file_dhash)
294+
295+
# Everything works file
296+
Bob.session.remove_related_file(SampleA.dhash, related_file_dhash)
297+
298+
assert len( testCase.session.get_related_files(SampleA.dhash)['related_files'] ) == 0
299+
assert len( testCase.session.get_related_files(SampleB.dhash)['related_files'] ) == 1
300+
301+
302+
def test_accessing_related_files(admin_session):
303+
testCase = RelationTestCase(admin_session)
304+
305+
Alice = testCase.new_user("Alice")
306+
Bob = testCase.new_user("Bob", capabilities=["access_related_files"])
307+
308+
SampleA = testCase.new_sample("SampleA")
309+
SampleA.create(Alice, upload_as="public")
310+
SampleB = testCase.new_sample("SampleB")
311+
312+
testCase.session.add_related_file(SampleA.dhash, "RelatedFile")
313+
314+
# Alice doesn't have capability
315+
assert len( Alice.session.get_related_files(SampleA.dhash)['related_files'] ) == 0
316+
317+
# Everything works fine
318+
assert len( Bob.session.get_related_files(SampleA.dhash)['related_files'] ) == 1
319+
320+
# Bob can't access related files for objects not accessible for him
321+
with ShouldRaise(status_code=404):
322+
Bob.session.get_related_files(SampleB.dhash)

tests/backend/utils.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import string
66
import time
77
import uuid
8+
import hashlib
89

910
import baseconv
1011
import requests
@@ -19,6 +20,10 @@ def base62uuid():
1920
return converter.encode(uuid4_as_int)
2021

2122

23+
def calc_sha256(content):
24+
return hashlib.sha256(bytes(str(content), "utf-8")).hexdigest()
25+
26+
2227
def rand_string(size=20):
2328
return "".join(random.choices(string.ascii_lowercase + string.digits, k=size))
2429

@@ -471,3 +476,25 @@ def unassign_analysis_from_object(self, identifier, analysis_id):
471476
res = self.session.delete(self.mwdb_url + "/object/" + identifier + "/karton/" + analysis_id)
472477
res.raise_for_status()
473478
return res.json()
479+
480+
def get_related_files(self, identifier):
481+
res = self.session.get(self.mwdb_url + "/object/" + identifier + "/related_file")
482+
res.raise_for_status()
483+
return res.json()
484+
485+
def add_related_file(self, main_obj_identifier, filename=None, content=None):
486+
if filename is None:
487+
filename = str(uuid.uuid4())
488+
489+
if content is None:
490+
content = str(uuid.uuid4())
491+
492+
res = self.session.post(
493+
self.mwdb_url + "/object/" + main_obj_identifier + "/related_file",
494+
files={"file": (filename, content)},
495+
)
496+
res.raise_for_status()
497+
498+
def remove_related_file(self, main_obj_identifier, identifier):
499+
res = self.session.delete(self.mwdb_url + "/object/" + main_obj_identifier + "/related_file/" + identifier)
500+
res.raise_for_status()

0 commit comments

Comments
 (0)