diff options
| author | Terry Howe <terrylhowe@gmail.com> | 2014-03-17 17:32:41 -0600 |
|---|---|---|
| committer | Terry Howe <terrylhowe@gmail.com> | 2014-03-17 17:32:41 -0600 |
| commit | 4900c64d091ffe4ec9050cd71845b12db49bd293 (patch) | |
| tree | fecfb1e1c990d98465803970d2cb00c52e090d43 /openstackclient/tests/common/test_utils.py | |
| parent | 0c0803d363aeae9e8a6eb2cdaf4b5baedee416dc (diff) | |
| download | python-openstackclient-4900c64d091ffe4ec9050cd71845b12db49bd293.tar.gz | |
Produce a useful error message for NoUniqueMatch
Most of the CLIs use a NoUniqueMatch, so produce a useful
error message if that happens. Added some tests for
find_resource as well.
Change-Id: I85ba61d5f6d1be5bd336a1cc4b02501492905f33
Closes-Bug: #1293846
Diffstat (limited to 'openstackclient/tests/common/test_utils.py')
| -rw-r--r-- | openstackclient/tests/common/test_utils.py | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/openstackclient/tests/common/test_utils.py b/openstackclient/tests/common/test_utils.py index 0ad4ca9b..3650746b 100644 --- a/openstackclient/tests/common/test_utils.py +++ b/openstackclient/tests/common/test_utils.py @@ -57,3 +57,75 @@ class TestUtils(test_utils.TestCase): self.assertRaises(exceptions.CommandError, utils.get_password, mock_stdin) + + +class NoUniqueMatch(Exception): + pass + + +class TestFindResource(test_utils.TestCase): + def setUp(self): + super(TestFindResource, self).setUp() + self.name = 'legos' + self.expected = mock.Mock() + self.manager = mock.Mock() + self.manager.resource_class = mock.Mock() + self.manager.resource_class.__name__ = 'lego' + + def test_find_resource_get_int(self): + self.manager.get = mock.Mock(return_value=self.expected) + result = utils.find_resource(self.manager, 1) + self.assertEqual(self.expected, result) + self.manager.get.assert_called_with(1) + + def test_find_resource_get_int_string(self): + self.manager.get = mock.Mock(return_value=self.expected) + result = utils.find_resource(self.manager, "2") + self.assertEqual(self.expected, result) + self.manager.get.assert_called_with(2) + + def test_find_resource_get_uuid(self): + uuid = '9a0dc2a0-ad0d-11e3-a5e2-0800200c9a66' + self.manager.get = mock.Mock(return_value=self.expected) + result = utils.find_resource(self.manager, uuid) + self.assertEqual(self.expected, result) + self.manager.get.assert_called_with(uuid) + + def test_find_resource_get_whatever(self): + self.manager.get = mock.Mock(return_value=self.expected) + result = utils.find_resource(self.manager, 'whatever') + self.assertEqual(self.expected, result) + self.manager.get.assert_called_with('whatever') + + def test_find_resource_find(self): + self.manager.get = mock.Mock(side_effect=Exception('Boom!')) + self.manager.find = mock.Mock(return_value=self.expected) + result = utils.find_resource(self.manager, self.name) + self.assertEqual(self.expected, result) + self.manager.get.assert_called_with(self.name) + self.manager.find.assert_called_with(name=self.name) + + def test_find_resource_find_not_found(self): + self.manager.get = mock.Mock(side_effect=Exception('Boom!')) + self.manager.find = mock.Mock(side_effect= + exceptions.NotFound(404, "2")) + result = self.assertRaises(exceptions.CommandError, + utils.find_resource, + self.manager, + self.name) + self.assertEqual("No lego with a name or ID of 'legos' exists.", + str(result)) + self.manager.get.assert_called_with(self.name) + self.manager.find.assert_called_with(display_name=self.name) + + def test_find_resource_find_no_unique(self): + self.manager.get = mock.Mock(side_effect=Exception('Boom!')) + self.manager.find = mock.Mock(side_effect=NoUniqueMatch()) + result = self.assertRaises(exceptions.CommandError, + utils.find_resource, + self.manager, + self.name) + self.assertEqual("More than one lego exists with the name 'legos'.", + str(result)) + self.manager.get.assert_called_with(self.name) + self.manager.find.assert_called_with(display_name=self.name) |
