Browse Source

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 533af9f1b2de40d98f69e83cdf89ecf254cf3879)
(cherry picked from commit 19723aee18e2901e9250dd840a61359704baa170)
tags/4.0.1^0
yanpuqing 1 year ago
committed by Lance Bragstad
parent
commit
bff556c7c2
3 changed files with 130 additions and 0 deletions
  1. +8
    -0
      openstackclient/identity/v3/project.py
  2. +117
    -0
      openstackclient/tests/unit/identity/v3/test_project.py
  3. +5
    -0
      releasenotes/notes/bug-2005246-3fb70206bafc5444.yaml

+ 8
- 0
openstackclient/identity/v3/project.py View File

@@ -103,6 +103,14 @@ class CreateProject(command.ShowOne):
kwargs = {}
if parsed_args.property:
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))

try:


+ 117
- 0
openstackclient/tests/unit/identity/v3/test_project.py View File

@@ -350,6 +350,123 @@ class TestProjectCreate(TestProject):
self.assertEqual(self.columns, columns)
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):
self.parent = identity_fakes.FakeProject.create_one_project()
self.project = identity_fakes.FakeProject.create_one_project(


+ 5
- 0
releasenotes/notes/bug-2005246-3fb70206bafc5444.yaml View File

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

Loading…
Cancel
Save