@@ -22,7 +22,7 @@ def setUp(self):
2222 z1 = Zoo (id = 1 , name = 'zoo1' )
2323 z1 .save ()
2424 z1 .contacts .set ([1 , 2 ])
25-
25+
2626 z2 = Zoo (id = 2 , name = 'zoo2' )
2727 z2 .save ()
2828 z2 .contacts .set ([2 ])
@@ -35,7 +35,7 @@ def test_filter_alternative_contacts_one_foreign_field(self):
3535 response = self .client .get ('/zoo/?.all_contact_name:icontains=contact1' )
3636 self .assertEqual (response .status_code , 200 )
3737 returned_data = jsonloads (response .content )
38-
38+
3939 # only zoo1 contain contacts.name=contact1
4040
4141 assert_json (returned_data , {
@@ -53,7 +53,7 @@ def test_filter_alternative_contacts_multiple_foreign_fields(self):
5353 response = self .client .get ('/zoo/?.all_contact_name:icontains=contact2' )
5454 self .assertEqual (response .status_code , 200 )
5555 returned_data = jsonloads (response .content )
56-
56+
5757 # both zoos contain contacts.name=contact2
5858
5959 assert_json (returned_data , {
@@ -71,12 +71,12 @@ def test_filter_alternative_contacts_multiple_foreign_fields(self):
7171 ],
7272 EXTRA (): None , # Debug, meta, with, etc
7373 })
74-
74+
7575 def test_filter_alternative_contacts_regular_field (self ):
7676 response = self .client .get ('/zoo/?.all_contact_name:icontains=zoo2' )
7777 self .assertEqual (response .status_code , 200 )
7878 returned_data = jsonloads (response .content )
79-
79+
8080 # only zoo 2 contain .name=zoo2
8181
8282 assert_json (returned_data , {
@@ -95,7 +95,7 @@ def test_alt_filters_any(self):
9595 response = self .client .get ('/zoo/?.all_contact_name:any:icontains=zoo2' )
9696 self .assertEqual (response .status_code , 200 )
9797 returned_data = jsonloads (response .content )
98-
98+
9999 # only zoo 2 contain .name=zoo2
100100
101101 assert_json (returned_data , {
@@ -114,7 +114,7 @@ def test_alt_filters_all(self):
114114 response = self .client .get ('/zoo/?.all_contact_name:all=zoo3' )
115115 self .assertEqual (response .status_code , 200 )
116116 returned_data = jsonloads (response .content )
117-
117+
118118 # only zoo 3 has all related names =zoo3 (both contact.name and .name)
119119
120120 assert_json (returned_data , {
@@ -132,7 +132,7 @@ def test_alt_filters_not_any(self):
132132 response = self .client .get ('/zoo/?.all_contact_name:any:not=contact2' )
133133 self .assertEqual (response .status_code , 200 )
134134 returned_data = jsonloads (response .content )
135-
135+
136136 # :not:any means none, so only for zoo3 NONE of the name_fields contains contact2
137137
138138 assert_json (returned_data , {
@@ -150,7 +150,7 @@ def test_alt_filters_not_all(self):
150150 response = self .client .get ('/zoo/?.all_contact_name:all:not=zoo3' )
151151 self .assertEqual (response .status_code , 200 )
152152 returned_data = jsonloads (response .content )
153-
153+
154154 # :not:all means that it must contain a field that is NOT zoo3; all but zoo3 contains such a field
155155
156156 assert_json (returned_data , {
@@ -183,3 +183,17 @@ def test_alt_filters_both(self):
183183 response = self .client .get (f'/zoo/?.{ filter_value } =zoo2' )
184184 self .assertEqual (response .status_code , 418 )
185185 body = jsonloads (response .content )
186+
187+ def test_not_existing_qualifier_gives_error (self ):
188+ response = self .client .get (f'/zoo/?.all_contact_name:qualifier=zoo2' )
189+ self .assertEqual (response .status_code , 418 )
190+ body = jsonloads (response .content )
191+ message = body ['message' ]
192+
193+ # We get a message which qualifier is incorrect
194+ self .assertIn ("Qualifier qualifier not supported for type TextFieldFilter (CharField {ContactPerson}.{name})." , message )
195+
196+ # And we get a suggestion of supported qualifiers:
197+ self .assertIn ("Supported qualifiers" , message )
198+ self .assertIn ("contains" , message )
199+ self .assertIn ("icontains" , message )
0 commit comments