Merge pull request #1669 from jakemcdermott/fix-1668

use icontains when expected for searches
This commit is contained in:
Jake McDermott
2018-05-03 13:19:58 -04:00
committed by GitHub
2 changed files with 31 additions and 4 deletions

View File

@@ -104,6 +104,7 @@ function QuerysetService ($q, Rest, ProcessErrors, $rootScope, Wait, DjangoSearc
} }
let paramString = exclude ? "not__" : ""; let paramString = exclude ? "not__" : "";
let valueString = paramParts[1]; let valueString = paramParts[1];
if(keySplit.length === 1) { if(keySplit.length === 1) {
if(searchTerm && !lessThanGreaterThan) { if(searchTerm && !lessThanGreaterThan) {
if(singleSearchParam) { if(singleSearchParam) {
@@ -407,9 +408,9 @@ function QuerysetService ($q, Rest, ProcessErrors, $rootScope, Wait, DjangoSearc
if (termParts.length === 1) { if (termParts.length === 1) {
termParams = searchWithoutKey(term, singleSearchParam); termParams = searchWithoutKey(term, singleSearchParam);
} else if ((isAnsibleFactField && isAnsibleFactField(termParts)) || (isFilterableBaseField && isFilterableBaseField(termParts))) { } else if ((isAnsibleFactField && isAnsibleFactField(termParts)) || (isFilterableBaseField && isFilterableBaseField(termParts))) {
termParams = this.encodeParam({ term, singleSearchParam }); termParams = this.encodeParam({ term, singleSearchParam, searchTerm: true });
} else if (isRelatedField && isRelatedField(termParts)) { } else if (isRelatedField && isRelatedField(termParts)) {
termParams = this.encodeParam({ term, singleSearchParam, related: true }); termParams = this.encodeParam({ term, singleSearchParam, relatedSearchTerm: true });
} else { } else {
termParams = searchWithoutKey(term, singleSearchParam); termParams = searchWithoutKey(term, singleSearchParam);
} }
@@ -458,9 +459,9 @@ function QuerysetService ($q, Rest, ProcessErrors, $rootScope, Wait, DjangoSearc
if (termParts.length === 1) { if (termParts.length === 1) {
removed = searchWithoutKey(term, singleSearchParam); removed = searchWithoutKey(term, singleSearchParam);
} else if ((isAnsibleFactField && isAnsibleFactField(termParts)) || (isFilterableBaseField && isFilterableBaseField(termParts))) { } else if ((isAnsibleFactField && isAnsibleFactField(termParts)) || (isFilterableBaseField && isFilterableBaseField(termParts))) {
removed = this.encodeParam({ term, singleSearchParam }); removed = this.encodeParam({ term, singleSearchParam, searchTerm: true });
} else if (isRelatedField && isRelatedField(termParts)) { } else if (isRelatedField && isRelatedField(termParts)) {
removed = this.encodeParam({ term, singleSearchParam, related: true }); removed = this.encodeParam({ term, singleSearchParam, relatedSearchTerm: true });
} else { } else {
removed = searchWithoutKey(term, singleSearchParam); removed = searchWithoutKey(term, singleSearchParam);
} }

View File

@@ -58,6 +58,32 @@ describe('Service: QuerySet', () => {
}); });
}); });
describe('getSearchInputQueryset', () => {
it('creates the expected queryset', () =>{
spyOn(QuerySet, 'encodeParam').and.callThrough();
const term = 'name:foo';
const isFilterableBaseField = () => true;
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 });
});
});
describe('removeTermsFromQueryset', () => {
it('creates the expected queryset', () =>{
spyOn(QuerySet, 'encodeParam').and.callThrough();
const queryset = { page_size: "20", order_by: "name", project__search_DEFAULT: "foo" };
const term = 'project:foo';
const isFilterableBaseField = () => false;
const isRelatedField = () => true;
expect(QuerySet.removeTermsFromQueryset(queryset, term, isFilterableBaseField, isRelatedField)).toEqual({ page_size: "20", order_by: "name" });
expect(QuerySet.encodeParam).toHaveBeenCalledWith({ term: 'project:foo', relatedSearchTerm: true, singleSearchParam: null });
});
});
describe('fn search', () => { describe('fn search', () => {
let pattern = /\/api\/v2\/inventories\/(.+)\/groups\/*/, let pattern = /\/api\/v2\/inventories\/(.+)\/groups\/*/,