Client should parse string to boolean for value 'is_domain'

When we use "--property" parameter, client get lists these the
value is string type, but the type of the value 'is_domain'
should be boolean, so we should judge it and parse it.
The patch parse string to boolean for value 'is_domain'.

Co-Authored-By: Lance Bragstad <lbragstad@gmail.com>

Conflict:
  Direct backports of this patch fail because the original tests
  proposed to the Victoria (master) branch included keystone
  ``options``. Support for ``options`` was added in:

    I9c3bdd741f28bf558267fb217818d947597ce13e

  This backport removes the ``options`` key from the expected values in
  the tests since feature support for ``options`` isn't going to be
  backported. Otherwise, the functionality of this change is fully
  tested like it is on later releases.

Change-Id: I37c9eb854524bde3a1530bfe2e3a03810fb1a676
Task: 30039
Story: 2005246
(cherry picked from commit 533af9f1b2)
(cherry picked from commit 19723aee18)
This commit is contained in:
yanpuqing 2019-05-20 06:47:44 +00:00 committed by Lance Bragstad
parent c14b4d7ea0
commit bff556c7c2
3 changed files with 130 additions and 0 deletions

View File

@ -103,6 +103,14 @@ class CreateProject(command.ShowOne):
kwargs = {} kwargs = {}
if parsed_args.property: if parsed_args.property:
kwargs = parsed_args.property.copy() kwargs = parsed_args.property.copy()
if 'is_domain' in kwargs.keys():
if kwargs['is_domain'].lower() == "true":
kwargs['is_domain'] = True
elif kwargs['is_domain'].lower() == "false":
kwargs['is_domain'] = False
elif kwargs['is_domain'].lower() == "none":
kwargs['is_domain'] = None
kwargs['tags'] = list(set(parsed_args.tags)) kwargs['tags'] = list(set(parsed_args.tags))
try: try:

View File

@ -350,6 +350,123 @@ class TestProjectCreate(TestProject):
self.assertEqual(self.columns, columns) self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data) self.assertEqual(self.datalist, data)
def test_project_create_is_domain_false_property(self):
arglist = [
'--property', 'is_domain=false',
self.project.name,
]
verifylist = [
('parent', None),
('enable', False),
('disable', False),
('name', self.project.name),
('tags', []),
('property', {'is_domain': 'false'}),
('name', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class ShowOne in cliff, abstract method take_action()
# returns a two-part tuple with a tuple of column names and a tuple of
# data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
kwargs = {
'name': self.project.name,
'domain': None,
'description': None,
'enabled': True,
'parent': None,
'is_domain': False,
'tags': [],
}
self.projects_mock.create.assert_called_with(
**kwargs
)
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data)
def test_project_create_is_domain_true_property(self):
arglist = [
'--property', 'is_domain=true',
self.project.name,
]
verifylist = [
('parent', None),
('enable', False),
('disable', False),
('name', self.project.name),
('tags', []),
('property', {'is_domain': 'true'}),
('name', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class ShowOne in cliff, abstract method take_action()
# returns a two-part tuple with a tuple of column names and a tuple of
# data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
kwargs = {
'name': self.project.name,
'domain': None,
'description': None,
'enabled': True,
'parent': None,
'is_domain': True,
'tags': [],
}
self.projects_mock.create.assert_called_with(
**kwargs
)
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data)
def test_project_create_is_domain_none_property(self):
arglist = [
'--property', 'is_domain=none',
self.project.name,
]
verifylist = [
('parent', None),
('enable', False),
('disable', False),
('name', self.project.name),
('tags', []),
('property', {'is_domain': 'none'}),
('name', self.project.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
# In base command class ShowOne in cliff, abstract method take_action()
# returns a two-part tuple with a tuple of column names and a tuple of
# data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
kwargs = {
'name': self.project.name,
'domain': None,
'description': None,
'enabled': True,
'parent': None,
'is_domain': None,
'tags': [],
}
self.projects_mock.create.assert_called_with(
**kwargs
)
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, data)
def test_project_create_parent(self): def test_project_create_parent(self):
self.parent = identity_fakes.FakeProject.create_one_project() self.parent = identity_fakes.FakeProject.create_one_project()
self.project = identity_fakes.FakeProject.create_one_project( self.project = identity_fakes.FakeProject.create_one_project(

View File

@ -0,0 +1,5 @@
---
fixes:
- |
[Story `2005246 <https://storyboard.openstack.org/#!/story/2005246>`_]
The `is_domain` property safely handles type checking.