/ tests / test_file_filter.py
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