diff --git a/glare/objects/all.py b/glare/objects/all.py index 08e8d2e..8c10d54 100644 --- a/glare/objects/all.py +++ b/glare/objects/all.py @@ -29,7 +29,11 @@ class All(base.BaseArtifact): fields = { 'type_name': Field(fields.StringField, description="Name of artifact type.", - sortable=True), + sortable=True, + filter_ops=(wrappers.FILTER_LIKE, + wrappers.FILTER_EQ, + wrappers.FILTER_NEQ, + wrappers.FILTER_IN)), 'display_type_name': Field(fields.StringField, description="Display name of " "artifact type.", diff --git a/glare/objects/base.py b/glare/objects/base.py index b44b4ef..8360db7 100644 --- a/glare/objects/base.py +++ b/glare/objects/base.py @@ -83,7 +83,9 @@ class BaseArtifact(base.VersionedObject): 'name': Field(fields.StringField, required_on_activate=False, nullable=False, sortable=True, validators=[validators.MinStrLen(1)], - description="Artifact Name."), + description="Artifact Name.", + filter_ops=(wrappers.FILTER_LIKE, wrappers.FILTER_EQ, + wrappers.FILTER_NEQ, wrappers.FILTER_IN)), 'owner': Field(fields.StringField, system=True, required_on_activate=False, nullable=False, sortable=True, description="ID of user/tenant who " diff --git a/glare/tests/functional/test_all.py b/glare/tests/functional/test_all.py index e437417..099f183 100644 --- a/glare/tests/functional/test_all.py +++ b/glare/tests/functional/test_all.py @@ -82,6 +82,13 @@ class TestAll(base.TestArtifact): for art in res: self.assertEqual('Heat', art['display_type_name'][:4]) + # search artifact using like for heat_templates and heat_environments + url = '/all?type_name=like:heat%' + res = self.get(url=url, status=200)['artifacts'] + self.assertEqual(18, len(res)) + for art in res: + self.assertEqual('heat', art['type_name'][:4]) + # TODO(kushalagrawal): Need to Add test case for display_type_name with # null once https://bugs.launchpad.net/glare/+bug/1741400 is resolved diff --git a/glare/tests/functional/test_sample_artifact.py b/glare/tests/functional/test_sample_artifact.py index 7fcbabd..297ba43 100644 --- a/glare/tests/functional/test_sample_artifact.py +++ b/glare/tests/functional/test_sample_artifact.py @@ -273,6 +273,12 @@ class TestList(base.TestArtifact): result = sort_results(self.get(url=url)['artifacts']) self.assertEqual(art_list[5:], result) + # Like filter test cases for name, status + url = '/sample_artifact?name=like:name%' + artifacts = self.get(url=url)['artifacts'] + for artifact in artifacts: + self.assertEqual("name", artifact.get("name")[:4]) + def test_artifact_list_dict_filters(self): lists_of_str = [ ['aaa', 'bbb', 'ccc'], diff --git a/glare/tests/functional/test_schemas.py b/glare/tests/functional/test_schemas.py index 3d2f2a3..42c5888 100644 --- a/glare/tests/functional/test_schemas.py +++ b/glare/tests/functional/test_schemas.py @@ -69,7 +69,8 @@ fixture_base_props = { u'type': [u'object', u'null']}, u'name': {u'description': u'Artifact Name.', - u'filter_ops': [u'eq', + u'filter_ops': [u'like', + u'eq', u'neq', u'in'], u'glareType': u'String', @@ -927,7 +928,7 @@ fixtures = { u'name': u'all', u'properties': generate_type_props({ u'type_name': {u'description': u'Name of artifact type.', - u'filter_ops': [u'eq', u'neq', u'in'], + u'filter_ops': [u'like', u'eq', u'neq', u'in'], u'glareType': u'String', u'maxLength': 255, u'sortable': True,