|
2 | 2 | import datetime
|
3 | 3 |
|
4 | 4 | from .relations import *
|
5 |
| -from .utils import base62uuid |
| 5 | +from .utils import base62uuid, calc_sha256 |
6 | 6 | from .utils import ShouldRaise
|
7 | 7 | from .utils import rand_string
|
8 | 8 | import random
|
@@ -668,3 +668,85 @@ def test_search_multi(admin_session):
|
668 | 668 | wildcard_hash = samples[0].get("sha512")[:-100] + "*"
|
669 | 669 | with ShouldRaise(status_code=400):
|
670 | 670 | found_objs = test.search(f'file.multi:"{wildcard_hash}"')
|
| 671 | + |
| 672 | + |
| 673 | +def test_related_files_search(admin_session): |
| 674 | + test = admin_session |
| 675 | + |
| 676 | + filename = base62uuid() |
| 677 | + |
| 678 | + # File A |
| 679 | + file_content = base62uuid() |
| 680 | + FileA = test.add_sample(filename, file_content) |
| 681 | + |
| 682 | + test.add_related_file(FileA["sha256"], "related.txt", "b"*1024) |
| 683 | + test.add_related_file(FileA["sha256"], "related.mp3") |
| 684 | + test.add_related_file(FileA["sha256"], "related.png") |
| 685 | + |
| 686 | + # File 2 |
| 687 | + file_content = base62uuid() |
| 688 | + FileB = test.add_sample(filename, file_content) |
| 689 | + |
| 690 | + test.add_related_file(FileB["sha256"], "related.txt", "b"*2048) |
| 691 | + test.add_related_file(FileB["sha256"], "related.mp3") |
| 692 | + test.add_related_file(FileB["sha256"], "related.jpg") |
| 693 | + test.add_related_file(FileB["sha256"], "related.csv") |
| 694 | + |
| 695 | + # Related file name |
| 696 | + results = [ |
| 697 | + result["id"] for result in |
| 698 | + test.search(f'related.name:"*.png" AND file.name:"{filename}"') |
| 699 | + ] |
| 700 | + assert sorted(results) == sorted([FileA["sha256"]]) |
| 701 | + results = [ |
| 702 | + result["id"] for result in |
| 703 | + test.search(f'related.name:"related.mp3" AND file.name:"{filename}"') |
| 704 | + ] |
| 705 | + assert sorted(results) == sorted([FileA["sha256"], FileB["sha256"]]) |
| 706 | + |
| 707 | + # Related file size |
| 708 | + results = [ |
| 709 | + result["id"] for result in |
| 710 | + test.search(f'related.size:">2000" AND file.name:"{filename}"') |
| 711 | + ] |
| 712 | + assert sorted(results) == sorted([FileB["sha256"]]) |
| 713 | + results = [ |
| 714 | + result["id"] for result in |
| 715 | + test.search(f'related.size:"<=2048" AND file.name:"{filename}"') |
| 716 | + ] |
| 717 | + assert sorted(results) == sorted([FileA["sha256"], FileB["sha256"]]) |
| 718 | + results = [ |
| 719 | + result["id"] for result in |
| 720 | + test.search(f'related.size:[1000 TO 1100] AND file.name:"{filename}"') |
| 721 | + ] |
| 722 | + assert sorted(results) == sorted([FileA["sha256"]]) |
| 723 | + |
| 724 | + # Related file sha256 |
| 725 | + sha256 = calc_sha256("b"*1024) |
| 726 | + results = [ |
| 727 | + result["id"] for result in |
| 728 | + test.search(f'related.sha256:"{sha256}" AND file.name:"{filename}"') |
| 729 | + ] |
| 730 | + assert sorted(results) == sorted([FileA["sha256"]]) |
| 731 | + |
| 732 | + # Related file count |
| 733 | + results = [ |
| 734 | + result["id"] for result in |
| 735 | + test.search(f'related.count:"3" AND file.name:"{filename}"') |
| 736 | + ] |
| 737 | + assert sorted(results) == sorted([FileA["sha256"]]) |
| 738 | + results = [ |
| 739 | + result["id"] for result in |
| 740 | + test.search(f'related.count:">3" AND file.name:"{filename}"') |
| 741 | + ] |
| 742 | + assert sorted(results) == sorted([FileB["sha256"]]) |
| 743 | + results = [ |
| 744 | + result["id"] for result in |
| 745 | + test.search(f'related.count:"<=4" AND file.name:"{filename}"') |
| 746 | + ] |
| 747 | + assert sorted(results) == sorted([FileA["sha256"], FileB["sha256"]]) |
| 748 | + results = [ |
| 749 | + result["id"] for result in |
| 750 | + test.search(f'related.count:[1 TO 3] AND file.name:"{filename}"') |
| 751 | + ] |
| 752 | + assert sorted(results) == sorted([FileA["sha256"]]) |
0 commit comments