mirror of
https://github.com/ansible/awx.git
synced 2026-06-27 17:38:02 -02:30
[FieldLookupBackend] limit iexact to string fields (#12569)
Change: - Case-insensitive search only makes sense on strings, so check the type of the field we are searching and ensure it is a string field (TextField, CharField, or some subclass thereof). - This prevents a 500 error when a user uses iexact on, e.g., an integer field. Now, a 400 Bad Request is returned instead. Test Plan: - Added simple unit tests for iexact Tickets: - Fixes #9222 Signed-off-by: Rick Elrod <rick@elrod.me>
This commit is contained in:
@@ -79,6 +79,19 @@ def test_invalid_field():
|
||||
assert 'is not an allowed field name. Must be ascii encodable.' in str(excinfo.value)
|
||||
|
||||
|
||||
def test_valid_iexact():
|
||||
field_lookup = FieldLookupBackend()
|
||||
value, new_lookup, _ = field_lookup.value_to_python(JobTemplate, 'project__name__iexact', 'foo')
|
||||
assert 'foo' in value
|
||||
|
||||
|
||||
def test_invalid_iexact():
|
||||
field_lookup = FieldLookupBackend()
|
||||
with pytest.raises(ValueError) as excinfo:
|
||||
field_lookup.value_to_python(Job, 'id__iexact', '1')
|
||||
assert 'is not a text field and cannot be filtered by case-insensitive search' in str(excinfo.value)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('lookup_suffix', ['', 'contains', 'startswith', 'in'])
|
||||
@pytest.mark.parametrize('password_field', Credential.PASSWORD_FIELDS)
|
||||
def test_filter_on_password_field(password_field, lookup_suffix):
|
||||
|
||||
Reference in New Issue
Block a user