From 0682d19d5ebe37d7cdef2314e1b35dda1f27511f Mon Sep 17 00:00:00 2001 From: Jake McDermott Date: Thu, 3 May 2018 16:45:09 -0400 Subject: [PATCH] show filterable:true for filterable fields --- awx/api/metadata.py | 14 +++++--------- awx/main/tests/functional/api/test_generic.py | 12 +++++++++--- .../shared/smart-search/smart-search.controller.js | 9 +++++---- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/awx/api/metadata.py b/awx/api/metadata.py index ebeb5f3286..e11474f27b 100644 --- a/awx/api/metadata.py +++ b/awx/api/metadata.py @@ -62,15 +62,11 @@ class Metadata(metadata.SimpleMetadata): opts = serializer.Meta.model._meta.concrete_model._meta verbose_name = smart_text(opts.verbose_name) field_info['help_text'] = field_help_text[field.field_name].format(verbose_name) - # If field is not part of the model, then show it as non-filterable - else: - is_model_field = False - for model_field in serializer.Meta.model._meta.fields: - if field.field_name == model_field.name: - is_model_field = True - break - if not is_model_field: - field_info['filterable'] = False + + for model_field in serializer.Meta.model._meta.fields: + if field.field_name == model_field.name: + field_info['filterable'] = True + break # Indicate if a field has a default value. # FIXME: Still isn't showing all default values? diff --git a/awx/main/tests/functional/api/test_generic.py b/awx/main/tests/functional/api/test_generic.py index f445ee73f7..68ca294027 100644 --- a/awx/main/tests/functional/api/test_generic.py +++ b/awx/main/tests/functional/api/test_generic.py @@ -94,10 +94,16 @@ class TestDeleteViews: @pytest.mark.django_db -def test_non_filterable_field(options, instance, admin_user): +def test_filterable_fields(options, instance, admin_user): r = options( url=instance.get_absolute_url(), user=admin_user ) - field_info = r.data['actions']['GET']['percent_capacity_remaining'] - assert 'filterable' in field_info + + filterable_info = r.data['actions']['GET']['created'] + non_filterable_info = r.data['actions']['GET']['percent_capacity_remaining'] + + assert 'filterable' in filterable_info + assert filterable_info['filterable'] is True + + assert 'filterable' not in non_filterable_info diff --git a/awx/ui/client/src/shared/smart-search/smart-search.controller.js b/awx/ui/client/src/shared/smart-search/smart-search.controller.js index fb0a4c0701..ba481cec6e 100644 --- a/awx/ui/client/src/shared/smart-search/smart-search.controller.js +++ b/awx/ui/client/src/shared/smart-search/smart-search.controller.js @@ -53,7 +53,7 @@ function SmartSearchController ( $scope.models = data.models; $scope.options = data.options.data; $scope.keyFields = _.reduce(data.models[$scope.djangoModel].base, function(result, value, key) { - if (!(typeof value.filterable === "boolean" && value.filterable === false)) { + if (value.filterable) { result.push(key); } return result; @@ -150,10 +150,11 @@ function SmartSearchController ( const listName = $scope.list.name; const baseFieldPath = `models.${listName}.base.${rootField}`; const isBaseField = _.has($scope, `${baseFieldPath}`); - const filterable = _.get($scope, `${baseFieldPath}.filterable`); - const isNotFilterable = typeof filterable === "boolean" && filterable === false; + + const isFilterable = _.get($scope, `${baseFieldPath}.filterable`); const isBaseModelRelatedSearchTermField = (_.get($scope, `${baseFieldPath}.type`) === 'field'); - return isBaseField && !isBaseModelRelatedSearchTermField && !isNotFilterable; + + return isBaseField && !isBaseModelRelatedSearchTermField && isFilterable; } function isRelatedField (termParts) {