1
0
mirror of https://github.com/ansible/awx.git synced 2024-10-27 09:25:10 +03:00

Merge pull request #3549 from mabashian/host_filter_or

Fixes basic host filter searches
This commit is contained in:
Michael Abashian 2019-05-08 15:16:43 -04:00 committed by GitHub
commit 466e965047
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 5 deletions

View File

@ -1,7 +1,5 @@
function searchWithoutKey (term, singleSearchParam = null) {
if (singleSearchParam === 'host_filter') {
return { [singleSearchParam]: `${encodeURIComponent(term)}` };
} else if (singleSearchParam) {
if (singleSearchParam) {
return { [singleSearchParam]: `search=${encodeURIComponent(term)}` };
}
return { search: encodeURIComponent(term) };
@ -418,7 +416,11 @@ function QuerysetService ($q, Rest, ProcessErrors, $rootScope, Wait, DjangoSearc
let termParams;
if (termParts.length === 1) {
termParams = searchWithoutKey(term, singleSearchParam);
if (singleSearchParam && termParts[0].toLowerCase() === "or") {
termParams = { [singleSearchParam]: "or" };
} else {
termParams = searchWithoutKey(term, singleSearchParam);
}
} else if ((isAnsibleFactField && isAnsibleFactField(termParts)) || (isFilterableBaseField && isFilterableBaseField(termParts))) {
termParams = this.encodeParam({ term, singleSearchParam, searchTerm: true });
} else if (isRelatedField && isRelatedField(termParts)) {

View File

@ -63,11 +63,22 @@ describe('Service: QuerySet', () => {
spyOn(QuerySet, 'encodeParam').and.callThrough();
const term = 'name:foo';
const isFilterableBaseField = () => true;
const isFilterableBaseField = (termParts) => termParts[0] === 'name';
const isRelatedField = () => false;
expect(QuerySet.getSearchInputQueryset(term, isFilterableBaseField, isRelatedField)).toEqual({ name__icontains_DEFAULT: 'foo' });
expect(QuerySet.encodeParam).toHaveBeenCalledWith({ term: "name:foo", searchTerm: true, singleSearchParam: null });
expect(QuerySet.getSearchInputQueryset('foo', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'search=foo' });
expect(QuerySet.getSearchInputQueryset('foo bar', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'search=foo%20and%20search=bar' });
expect(QuerySet.getSearchInputQueryset('foo or bar', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'search=foo%20or%20search=bar' });
expect(QuerySet.getSearchInputQueryset('name:foo or bar', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'name__icontains=foo%20or%20search=bar' });
expect(QuerySet.getSearchInputQueryset('name:foo bar', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'name__icontains=foo%20and%20search=bar' });
expect(QuerySet.getSearchInputQueryset('foo or name:bar', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'search=foo%20or%20name__icontains=bar' });
expect(QuerySet.getSearchInputQueryset('foo name:bar', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'search=foo%20and%20name__icontains=bar' });
expect(QuerySet.getSearchInputQueryset('name:foo or name:bar', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'name__icontains=foo%20or%20name__icontains=bar' });
expect(QuerySet.getSearchInputQueryset('name:foo name:bar', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'name__icontains=foo%20and%20name__icontains=bar' });
expect(QuerySet.getSearchInputQueryset('name:foo name:bar or baz', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'name__icontains=foo%20and%20name__icontains=bar%20or%20search=baz' });
expect(QuerySet.getSearchInputQueryset('baz or name:foo name:bar', isFilterableBaseField, null, null, 'host_filter')).toEqual({ host_filter: 'search=baz%20or%20name__icontains=foo%20and%20name__icontains=bar' });
});
});