diff --git a/keystoneclient/v2_0/shell.py b/keystoneclient/v2_0/shell.py index d058da6f2..ea728b779 100755 --- a/keystoneclient/v2_0/shell.py +++ b/keystoneclient/v2_0/shell.py @@ -140,7 +140,7 @@ def do_tenant_update(kc, args): kwargs = {} if args.name: kwargs.update({'name': args.name}) - if args.description: + if args.description is not None: kwargs.update({'description': args.description}) if args.enabled: kwargs.update({'enabled': utils.string_to_bool(args.enabled)}) diff --git a/keystoneclient/v2_0/tenants.py b/keystoneclient/v2_0/tenants.py index 13f469a71..4ced2006a 100644 --- a/keystoneclient/v2_0/tenants.py +++ b/keystoneclient/v2_0/tenants.py @@ -38,7 +38,10 @@ class Tenant(base.Resource): def update(self, name=None, description=None, enabled=None): # Preserve the existing settings; keystone legacy resets these? new_name = name if name else self.name - new_description = description if description else self.description + if description is not None: + new_description = description + else: + new_description = self.description new_enabled = enabled if enabled is not None else self.enabled try: @@ -116,7 +119,7 @@ class TenantManager(base.ManagerWithFind): body['tenant']['name'] = tenant_name if enabled is not None: body['tenant']['enabled'] = enabled - if description: + if description is not None: body['tenant']['description'] = description # Keystone's API uses a POST rather than a PUT here. return self._create("/tenants/%s" % tenant_id, body, "tenant") diff --git a/tests/v2_0/test_tenants.py b/tests/v2_0/test_tenants.py index bb07f66c0..78a800f8d 100644 --- a/tests/v2_0/test_tenants.py +++ b/tests/v2_0/test_tenants.py @@ -218,6 +218,46 @@ class TenantTests(utils.TestCase): self.assertEqual(tenant.description, "I changed you!") self.assertFalse(tenant.enabled) + def test_update_empty_description(self): + req_body = { + "tenant": { + "id": 4, + "name": "tenantX", + "description": "", + "enabled": False, + }, + } + resp_body = { + "tenant": { + "name": "tenantX", + "enabled": False, + "id": 4, + "description": "", + }, + } + resp = httplib2.Response({ + "status": 200, + "body": json.dumps(resp_body), + }) + + httplib2.Http.request(urlparse.urljoin(self.TEST_URL, + 'v2.0/tenants/4'), + 'POST', + body=json.dumps(req_body), + headers=self.TEST_POST_HEADERS) \ + .AndReturn((resp, resp['body'])) + self.mox.ReplayAll() + + tenant = self.client.tenants.update(req_body['tenant']['id'], + req_body['tenant']['name'], + req_body['tenant']['description'], + req_body['tenant']['enabled']) + self.assertTrue(isinstance(tenant, tenants.Tenant)) + self.assertEqual(tenant.id, 4) + self.assertEqual(tenant.name, "tenantX") + self.assertEqual(tenant.description, "") + self.assertFalse(tenant.enabled) + def test_add_user(self): resp = httplib2.Response({ "status": 200,