test_file_filter.py
1 # Application Packages 2 from khoj.search_filter.file_filter import FileFilter 3 4 5 # Mock Entry class for testing 6 class Entry: 7 def __init__(self, compiled="", raw="", file=""): 8 self.compiled = compiled 9 self.raw = raw 10 self.file = file 11 12 13 def test_can_filter_no_file_filter(): 14 # Arrange 15 file_filter = FileFilter() 16 q_with_no_filter = "head tail" 17 18 # Act 19 can_filter = file_filter.can_filter(q_with_no_filter) 20 21 # Assert 22 assert can_filter == False 23 24 25 def test_can_filter_non_existent_file(): 26 # Arrange 27 file_filter = FileFilter() 28 q_with_filter = 'head file:"nonexistent.org" tail' 29 30 # Act 31 can_filter = file_filter.can_filter(q_with_filter) 32 33 # Assert 34 assert can_filter == True 35 36 37 def test_can_filter_single_file_include(): 38 # Arrange 39 file_filter = FileFilter() 40 q_with_filter = 'head file:"file 1.org" tail' 41 42 # Act 43 can_filter = file_filter.can_filter(q_with_filter) 44 45 # Assert 46 assert can_filter == True 47 48 49 def test_can_filter_single_file_exclude(): 50 # Arrange 51 file_filter = FileFilter() 52 q_with_filter = 'head -file:"1.org" tail' 53 54 # Act 55 can_filter = file_filter.can_filter(q_with_filter) 56 57 # Assert 58 assert can_filter == True 59 60 61 def test_can_filter_file_with_regex_match(): 62 # Arrange 63 file_filter = FileFilter() 64 q_with_filter = 'head file:"*.org" tail' 65 66 # Act 67 can_filter = file_filter.can_filter(q_with_filter) 68 69 # Assert 70 assert can_filter == True 71 72 73 def test_can_filter_multiple_file_includes(): 74 # Arrange 75 file_filter = FileFilter() 76 q_with_filter = 'head tail file:"file 1.org" file:"file2.org"' 77 78 # Act 79 can_filter = file_filter.can_filter(q_with_filter) 80 81 # Assert 82 assert can_filter == True 83 84 85 def test_get_single_include_file_filter_terms(): 86 # Arrange 87 file_filter = FileFilter() 88 q_with_filter_terms = 'head tail file:"/path/to/dir/*.org"' 89 90 # Act 91 filter_terms = file_filter.get_filter_terms(q_with_filter_terms) 92 93 # Assert 94 assert filter_terms == ["/path/to/dir/*.org"] 95 96 97 def test_get_single_exclude_file_filter_terms(): 98 # Arrange 99 file_filter = FileFilter() 100 q_with_filter_terms = 'head tail -file:"file 1.org"' 101 102 # Act 103 filter_terms = file_filter.get_filter_terms(q_with_filter_terms) 104 105 # Assert 106 assert filter_terms == ["-file 1.org"] 107 108 109 def test_get_single_include_exclude_file_filter_terms(): 110 # Arrange 111 file_filter = FileFilter() 112 q_with_filter_terms = 'head tail -file:"file 1.org" file:"/path/to/dir/*.org"' 113 114 # Act 115 filter_terms = file_filter.get_filter_terms(q_with_filter_terms) 116 117 # Assert 118 assert filter_terms == ["/path/to/dir/*.org", "-file 1.org"] 119 120 121 def test_get_multiple_include_exclude_file_filter_terms(): 122 # Arrange 123 file_filter = FileFilter() 124 q_with_filter_terms = ( 125 'head -file:"file 1.org" file:"file 1.org" file:"/path/to/dir/.*.org" -file:"/path/to/dir/*.org" tail' 126 ) 127 128 # Act 129 filter_terms = file_filter.get_filter_terms(q_with_filter_terms) 130 131 # Assert 132 assert filter_terms == ["file 1.org", "/path/to/dir/.*.org", "-file 1.org", "-/path/to/dir/*.org"] 133 134 135 def arrange_content(): 136 entries = [ 137 Entry(compiled="", raw="First Entry", file="file 1.org"), 138 Entry(compiled="", raw="Second Entry", file="file2.org"), 139 Entry(compiled="", raw="Third Entry", file="file 1.org"), 140 Entry(compiled="", raw="Fourth Entry", file="file2.org"), 141 ] 142 143 return entries