diff options
Diffstat (limited to 'openstackclient/tests/unit/identity/v3/test_group.py')
| -rw-r--r-- | openstackclient/tests/unit/identity/v3/test_group.py | 569 |
1 files changed, 569 insertions, 0 deletions
diff --git a/openstackclient/tests/unit/identity/v3/test_group.py b/openstackclient/tests/unit/identity/v3/test_group.py new file mode 100644 index 00000000..d35e98c6 --- /dev/null +++ b/openstackclient/tests/unit/identity/v3/test_group.py @@ -0,0 +1,569 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +import mock +from mock import call + +from keystoneauth1 import exceptions as ks_exc +from osc_lib import exceptions + +from openstackclient.identity.v3 import group +from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes + + +class TestGroup(identity_fakes.TestIdentityv3): + + def setUp(self): + super(TestGroup, self).setUp() + + # Get a shortcut to the DomainManager Mock + self.domains_mock = self.app.client_manager.identity.domains + self.domains_mock.reset_mock() + + # Get a shortcut to the GroupManager Mock + self.groups_mock = self.app.client_manager.identity.groups + self.groups_mock.reset_mock() + + # Get a shortcut to the UserManager Mock + self.users_mock = self.app.client_manager.identity.users + self.users_mock.reset_mock() + + +class TestGroupAddUser(TestGroup): + + group = identity_fakes.FakeGroup.create_one_group() + user = identity_fakes.FakeUser.create_one_user() + + def setUp(self): + super(TestGroupAddUser, self).setUp() + + self.groups_mock.get.return_value = self.group + self.users_mock.get.return_value = self.user + self.users_mock.add_to_group.return_value = None + + self.cmd = group.AddUserToGroup(self.app, None) + + def test_group_add_user(self): + arglist = [ + self.group.name, + self.user.name, + ] + verifylist = [ + ('group', self.group.name), + ('user', self.user.name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + self.users_mock.add_to_group.assert_called_once_with( + self.user.id, self.group.id) + self.assertIsNone(result) + + +class TestGroupCheckUser(TestGroup): + + group = identity_fakes.FakeGroup.create_one_group() + user = identity_fakes.FakeUser.create_one_user() + + def setUp(self): + super(TestGroupCheckUser, self).setUp() + + self.groups_mock.get.return_value = self.group + self.users_mock.get.return_value = self.user + self.users_mock.check_in_group.return_value = None + + self.cmd = group.CheckUserInGroup(self.app, None) + + def test_group_check_user(self): + arglist = [ + self.group.name, + self.user.name, + ] + verifylist = [ + ('group', self.group.name), + ('user', self.user.name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + self.users_mock.check_in_group.assert_called_once_with( + self.user.id, self.group.id) + self.assertIsNone(result) + + +class TestGroupCreate(TestGroup): + + domain = identity_fakes.FakeDomain.create_one_domain() + + columns = ( + 'description', + 'domain_id', + 'id', + 'name', + ) + + def setUp(self): + super(TestGroupCreate, self).setUp() + self.group = identity_fakes.FakeGroup.create_one_group( + attrs={'domain_id': self.domain.id}) + self.data = ( + self.group.description, + self.group.domain_id, + self.group.id, + self.group.name, + ) + + self.groups_mock.create.return_value = self.group + self.groups_mock.get.return_value = self.group + self.domains_mock.get.return_value = self.domain + + self.cmd = group.CreateGroup(self.app, None) + + def test_group_create(self): + arglist = [ + self.group.name, + ] + verifylist = [ + ('name', self.group.name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.groups_mock.create.assert_called_once_with( + name=self.group.name, + domain=None, + description=None, + ) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_group_create_with_options(self): + arglist = [ + '--domain', self.domain.name, + '--description', self.group.description, + self.group.name, + ] + verifylist = [ + ('domain', self.domain.name), + ('description', self.group.description), + ('name', self.group.name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.groups_mock.create.assert_called_once_with( + name=self.group.name, + domain=self.domain.id, + description=self.group.description, + ) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_group_create_or_show(self): + self.groups_mock.create.side_effect = ks_exc.Conflict() + arglist = [ + '--or-show', + self.group.name, + ] + verifylist = [ + ('or_show', True), + ('name', self.group.name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.groups_mock.get.assert_called_once_with(self.group.name) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + +class TestGroupDelete(TestGroup): + + domain = identity_fakes.FakeDomain.create_one_domain() + groups = identity_fakes.FakeGroup.create_groups( + attrs={'domain_id': domain.id}, count=2) + + def setUp(self): + super(TestGroupDelete, self).setUp() + + self.groups_mock.get = ( + identity_fakes.FakeGroup.get_groups(self.groups)) + self.groups_mock.delete.return_value = None + self.domains_mock.get.return_value = self.domain + + self.cmd = group.DeleteGroup(self.app, None) + + def test_group_delete(self): + arglist = [ + self.groups[0].id, + ] + verifylist = [ + ('groups', [self.groups[0].id]), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + self.groups_mock.get.assert_called_once_with(self.groups[0].id) + self.groups_mock.delete.assert_called_once_with(self.groups[0].id) + self.assertIsNone(result) + + def test_group_multi_delete(self): + arglist = [] + verifylist = [] + + for g in self.groups: + arglist.append(g.id) + verifylist = [ + ('groups', arglist), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + calls = [] + for g in self.groups: + calls.append(call(g.id)) + self.groups_mock.delete.assert_has_calls(calls) + self.assertIsNone(result) + + def test_group_delete_with_domain(self): + get_mock_result = [exceptions.CommandError, self.groups[0]] + self.groups_mock.get = ( + mock.MagicMock(side_effect=get_mock_result)) + + arglist = [ + '--domain', self.domain.id, + self.groups[0].id, + ] + verifylist = [ + ('domain', self.groups[0].domain_id), + ('groups', [self.groups[0].id]), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + self.groups_mock.get.assert_any_call( + self.groups[0].id, domain_id=self.domain.id) + self.groups_mock.delete.assert_called_once_with(self.groups[0].id) + self.assertIsNone(result) + + +class TestGroupList(TestGroup): + + domain = identity_fakes.FakeDomain.create_one_domain() + group = identity_fakes.FakeGroup.create_one_group() + user = identity_fakes.FakeUser.create_one_user() + + columns = ( + 'ID', + 'Name', + ) + datalist = ( + ( + group.id, + group.name, + ), + ) + + def setUp(self): + super(TestGroupList, self).setUp() + + self.groups_mock.get.return_value = self.group + self.groups_mock.list.return_value = [self.group] + + self.domains_mock.get.return_value = self.domain + + self.users_mock.get.return_value = self.user + + # Get the command object to test + self.cmd = group.ListGroup(self.app, None) + + def test_group_list_no_options(self): + arglist = [] + verifylist = [] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # In base command class Lister in cliff, abstract method take_action() + # returns a tuple containing the column names and an iterable + # containing the data to be listed. + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = { + 'domain': None, + 'user': None, + } + + self.groups_mock.list.assert_called_with( + **kwargs + ) + + self.assertEqual(self.columns, columns) + self.assertEqual(self.datalist, tuple(data)) + + def test_group_list_domain(self): + arglist = [ + '--domain', self.domain.id, + ] + verifylist = [ + ('domain', self.domain.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # In base command class Lister in cliff, abstract method take_action() + # returns a tuple containing the column names and an iterable + # containing the data to be listed. + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = { + 'domain': self.domain.id, + 'user': None, + } + + self.groups_mock.list.assert_called_with( + **kwargs + ) + + self.assertEqual(self.columns, columns) + self.assertEqual(self.datalist, tuple(data)) + + def test_group_list_user(self): + arglist = [ + '--user', self.user.name, + ] + verifylist = [ + ('user', self.user.name), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # In base command class Lister in cliff, abstract method take_action() + # returns a tuple containing the column names and an iterable + # containing the data to be listed. + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = { + 'domain': None, + 'user': self.user.id, + } + + self.groups_mock.list.assert_called_with( + **kwargs + ) + + self.assertEqual(self.columns, columns) + self.assertEqual(self.datalist, tuple(data)) + + def test_group_list_long(self): + arglist = [ + '--long', + ] + verifylist = [ + ('long', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + # In base command class Lister in cliff, abstract method take_action() + # returns a tuple containing the column names and an iterable + # containing the data to be listed. + columns, data = self.cmd.take_action(parsed_args) + + # Set expected values + kwargs = { + 'domain': None, + 'user': None, + } + + self.groups_mock.list.assert_called_with( + **kwargs + ) + + columns = self.columns + ( + 'Domain ID', + 'Description', + ) + datalist = (( + self.group.id, + self.group.name, + self.group.domain_id, + self.group.description, + ), ) + self.assertEqual(columns, columns) + self.assertEqual(datalist, tuple(data)) + + +class TestGroupRemoveUser(TestGroup): + + group = identity_fakes.FakeGroup.create_one_group() + user = identity_fakes.FakeUser.create_one_user() + + def setUp(self): + super(TestGroupRemoveUser, self).setUp() + + self.groups_mock.get.return_value = self.group + self.users_mock.get.return_value = self.user + self.users_mock.remove_from_group.return_value = None + + self.cmd = group.RemoveUserFromGroup(self.app, None) + + def test_group_remove_user(self): + arglist = [ + self.group.id, + self.user.id, + ] + verifylist = [ + ('group', self.group.id), + ('user', self.user.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + self.users_mock.remove_from_group.assert_called_once_with( + self.user.id, self.group.id) + self.assertIsNone(result) + + +class TestGroupSet(TestGroup): + + domain = identity_fakes.FakeDomain.create_one_domain() + group = identity_fakes.FakeGroup.create_one_group( + attrs={'domain_id': domain.id}) + + def setUp(self): + super(TestGroupSet, self).setUp() + + self.groups_mock.get.return_value = self.group + self.domains_mock.get.return_value = self.domain + self.groups_mock.update.return_value = None + + self.cmd = group.SetGroup(self.app, None) + + def test_group_set_nothing(self): + arglist = [ + self.group.id, + ] + verifylist = [ + ('group', self.group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + self.groups_mock.update.assert_called_once_with(self.group.id) + self.assertIsNone(result) + + def test_group_set_name_and_description(self): + arglist = [ + '--name', 'new_name', + '--description', 'new_description', + self.group.id, + ] + verifylist = [ + ('name', 'new_name'), + ('description', 'new_description'), + ('group', self.group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + kwargs = { + 'name': 'new_name', + 'description': 'new_description', + } + self.groups_mock.update.assert_called_once_with( + self.group.id, **kwargs) + self.assertIsNone(result) + + def test_group_set_with_domain(self): + get_mock_result = [exceptions.CommandError, self.group] + self.groups_mock.get = ( + mock.MagicMock(side_effect=get_mock_result)) + + arglist = [ + '--domain', self.domain.id, + self.group.id, + ] + verifylist = [ + ('domain', self.domain.id), + ('group', self.group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + self.groups_mock.get.assert_any_call( + self.group.id, domain_id=self.domain.id) + self.groups_mock.update.assert_called_once_with(self.group.id) + self.assertIsNone(result) + + +class TestGroupShow(TestGroup): + + domain = identity_fakes.FakeDomain.create_one_domain() + + columns = ( + 'description', + 'domain_id', + 'id', + 'name', + ) + + def setUp(self): + super(TestGroupShow, self).setUp() + self.group = identity_fakes.FakeGroup.create_one_group( + attrs={'domain_id': self.domain.id}) + self.data = ( + self.group.description, + self.group.domain_id, + self.group.id, + self.group.name, + ) + + self.groups_mock.get.return_value = self.group + self.domains_mock.get.return_value = self.domain + + self.cmd = group.ShowGroup(self.app, None) + + def test_group_show(self): + arglist = [ + self.group.id, + ] + verifylist = [ + ('group', self.group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.groups_mock.get.assert_called_once_with(self.group.id) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_group_show_with_domain(self): + get_mock_result = [exceptions.CommandError, self.group] + self.groups_mock.get = ( + mock.MagicMock(side_effect=get_mock_result)) + + arglist = [ + '--domain', self.domain.id, + self.group.id, + ] + verifylist = [ + ('domain', self.domain.id), + ('group', self.group.id), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + self.groups_mock.get.assert_any_call( + self.group.id, domain_id=self.domain.id) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) |
