python-openstackclient 7.4.0__py3-none-any.whl → 8.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. openstackclient/common/availability_zone.py +3 -6
  2. openstackclient/common/clientmanager.py +2 -1
  3. openstackclient/common/envvars.py +57 -0
  4. openstackclient/common/extension.py +3 -11
  5. openstackclient/common/limits.py +1 -1
  6. openstackclient/common/project_cleanup.py +3 -2
  7. openstackclient/common/quota.py +54 -28
  8. openstackclient/compute/client.py +7 -5
  9. openstackclient/compute/v2/agent.py +5 -5
  10. openstackclient/compute/v2/aggregate.py +17 -15
  11. openstackclient/compute/v2/console.py +10 -4
  12. openstackclient/compute/v2/console_connection.py +48 -0
  13. openstackclient/compute/v2/flavor.py +14 -18
  14. openstackclient/compute/v2/host.py +3 -3
  15. openstackclient/compute/v2/hypervisor.py +10 -4
  16. openstackclient/compute/v2/hypervisor_stats.py +1 -1
  17. openstackclient/compute/v2/keypair.py +18 -13
  18. openstackclient/compute/v2/server.py +144 -121
  19. openstackclient/compute/v2/server_backup.py +1 -1
  20. openstackclient/compute/v2/server_event.py +8 -17
  21. openstackclient/compute/v2/server_group.py +6 -6
  22. openstackclient/compute/v2/server_image.py +1 -1
  23. openstackclient/compute/v2/server_migration.py +6 -6
  24. openstackclient/compute/v2/server_volume.py +4 -4
  25. openstackclient/compute/v2/service.py +9 -13
  26. openstackclient/compute/v2/usage.py +4 -6
  27. openstackclient/identity/client.py +2 -4
  28. openstackclient/identity/common.py +95 -17
  29. openstackclient/identity/v2_0/ec2creds.py +4 -3
  30. openstackclient/identity/v2_0/endpoint.py +12 -10
  31. openstackclient/identity/v2_0/project.py +6 -6
  32. openstackclient/identity/v2_0/role.py +1 -1
  33. openstackclient/identity/v2_0/service.py +7 -7
  34. openstackclient/identity/v2_0/user.py +6 -21
  35. openstackclient/identity/v3/access_rule.py +2 -5
  36. openstackclient/identity/v3/application_credential.py +2 -2
  37. openstackclient/identity/v3/consumer.py +4 -3
  38. openstackclient/identity/v3/credential.py +6 -7
  39. openstackclient/identity/v3/domain.py +63 -44
  40. openstackclient/identity/v3/ec2creds.py +4 -3
  41. openstackclient/identity/v3/endpoint.py +104 -88
  42. openstackclient/identity/v3/endpoint_group.py +1 -1
  43. openstackclient/identity/v3/group.py +116 -72
  44. openstackclient/identity/v3/identity_provider.py +1 -2
  45. openstackclient/identity/v3/limit.py +4 -9
  46. openstackclient/identity/v3/mapping.py +4 -3
  47. openstackclient/identity/v3/policy.py +5 -8
  48. openstackclient/identity/v3/project.py +23 -6
  49. openstackclient/identity/v3/region.py +2 -5
  50. openstackclient/identity/v3/registered_limit.py +4 -8
  51. openstackclient/identity/v3/role.py +15 -16
  52. openstackclient/identity/v3/service.py +8 -8
  53. openstackclient/identity/v3/service_provider.py +3 -6
  54. openstackclient/identity/v3/tag.py +2 -2
  55. openstackclient/identity/v3/token.py +1 -2
  56. openstackclient/identity/v3/trust.py +74 -25
  57. openstackclient/identity/v3/user.py +47 -11
  58. openstackclient/image/client.py +7 -5
  59. openstackclient/image/v1/image.py +11 -15
  60. openstackclient/image/v2/cache.py +2 -4
  61. openstackclient/image/v2/image.py +41 -48
  62. openstackclient/image/v2/metadef_namespaces.py +4 -3
  63. openstackclient/image/v2/metadef_resource_type_association.py +1 -2
  64. openstackclient/image/v2/metadef_resource_types.py +1 -2
  65. openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +9 -1370
  66. openstackclient/network/client.py +4 -16
  67. openstackclient/network/common.py +16 -12
  68. openstackclient/network/utils.py +3 -3
  69. openstackclient/network/v2/address_group.py +5 -9
  70. openstackclient/network/v2/address_scope.py +2 -3
  71. openstackclient/network/v2/default_security_group_rule.py +1 -2
  72. openstackclient/network/v2/floating_ip.py +69 -47
  73. openstackclient/network/v2/floating_ip_port_forwarding.py +7 -7
  74. openstackclient/network/v2/ip_availability.py +1 -2
  75. openstackclient/network/v2/l3_conntrack_helper.py +8 -12
  76. openstackclient/network/v2/local_ip.py +24 -26
  77. openstackclient/network/v2/local_ip_association.py +4 -5
  78. openstackclient/network/v2/ndp_proxy.py +9 -10
  79. openstackclient/network/v2/network.py +12 -16
  80. openstackclient/network/v2/network_agent.py +29 -37
  81. openstackclient/network/v2/network_auto_allocated_topology.py +4 -5
  82. openstackclient/network/v2/network_flavor.py +1 -1
  83. openstackclient/network/v2/network_flavor_profile.py +5 -5
  84. openstackclient/network/v2/network_meter.py +3 -3
  85. openstackclient/network/v2/network_meter_rule.py +5 -8
  86. openstackclient/network/v2/network_qos_policy.py +4 -4
  87. openstackclient/network/v2/network_qos_rule.py +7 -16
  88. openstackclient/network/v2/network_rbac.py +4 -4
  89. openstackclient/network/v2/network_segment.py +6 -7
  90. openstackclient/network/v2/network_segment_range.py +16 -20
  91. openstackclient/network/v2/network_trunk.py +24 -16
  92. openstackclient/network/v2/port.py +28 -29
  93. openstackclient/network/v2/router.py +53 -42
  94. openstackclient/network/v2/security_group.py +13 -19
  95. openstackclient/network/v2/security_group_rule.py +10 -11
  96. openstackclient/network/v2/subnet.py +31 -30
  97. openstackclient/network/v2/subnet_pool.py +4 -4
  98. openstackclient/object/client.py +2 -3
  99. openstackclient/object/v1/container.py +2 -3
  100. openstackclient/object/v1/object.py +2 -9
  101. openstackclient/shell.py +22 -5
  102. openstackclient/tests/functional/base.py +7 -3
  103. openstackclient/tests/functional/common/test_quota.py +3 -1
  104. openstackclient/tests/functional/compute/v2/common.py +12 -6
  105. openstackclient/tests/functional/compute/v2/test_keypair.py +41 -5
  106. openstackclient/tests/functional/compute/v2/test_server.py +2 -3
  107. openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
  108. openstackclient/tests/functional/identity/v2/test_user.py +1 -1
  109. openstackclient/tests/functional/identity/v3/common.py +3 -8
  110. openstackclient/tests/functional/identity/v3/test_application_credential.py +10 -10
  111. openstackclient/tests/functional/identity/v3/test_endpoint.py +3 -3
  112. openstackclient/tests/functional/identity/v3/test_group.py +3 -3
  113. openstackclient/tests/functional/identity/v3/test_idp.py +3 -7
  114. openstackclient/tests/functional/identity/v3/test_limit.py +4 -4
  115. openstackclient/tests/functional/identity/v3/test_project.py +5 -14
  116. openstackclient/tests/functional/identity/v3/test_region.py +1 -3
  117. openstackclient/tests/functional/identity/v3/test_registered_limit.py +3 -3
  118. openstackclient/tests/functional/identity/v3/test_role.py +1 -1
  119. openstackclient/tests/functional/identity/v3/test_role_assignment.py +13 -31
  120. openstackclient/tests/functional/identity/v3/test_service_provider.py +3 -7
  121. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  122. openstackclient/tests/functional/network/v2/common.py +7 -3
  123. openstackclient/tests/functional/network/v2/test_address_group.py +4 -0
  124. openstackclient/tests/functional/network/v2/test_l3_conntrack_helper.py +15 -11
  125. openstackclient/tests/functional/network/v2/test_local_ip.py +4 -0
  126. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +2 -2
  127. openstackclient/tests/functional/network/v2/test_network_ndp_proxy.py +2 -3
  128. openstackclient/tests/functional/network/v2/test_network_rbac.py +2 -2
  129. openstackclient/tests/functional/network/v2/test_network_trunk.py +1 -1
  130. openstackclient/tests/functional/network/v2/test_port.py +17 -7
  131. openstackclient/tests/functional/network/v2/test_router.py +42 -0
  132. openstackclient/tests/functional/network/v2/test_subnet_pool.py +4 -0
  133. openstackclient/tests/unit/api/test_compute_v2.py +67 -87
  134. openstackclient/tests/unit/common/test_availability_zone.py +6 -14
  135. openstackclient/tests/unit/common/test_command.py +1 -1
  136. openstackclient/tests/unit/common/test_extension.py +5 -7
  137. openstackclient/tests/unit/common/test_limits.py +1 -1
  138. openstackclient/tests/unit/common/test_project_cleanup.py +5 -6
  139. openstackclient/tests/unit/common/test_quota.py +51 -28
  140. openstackclient/tests/unit/compute/v2/fakes.py +85 -315
  141. openstackclient/tests/unit/compute/v2/test_agent.py +16 -16
  142. openstackclient/tests/unit/compute/v2/test_aggregate.py +56 -60
  143. openstackclient/tests/unit/compute/v2/test_console.py +34 -17
  144. openstackclient/tests/unit/compute/v2/test_console_connection.py +72 -0
  145. openstackclient/tests/unit/compute/v2/test_flavor.py +72 -72
  146. openstackclient/tests/unit/compute/v2/test_host.py +8 -8
  147. openstackclient/tests/unit/compute/v2/test_hypervisor.py +22 -30
  148. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
  149. openstackclient/tests/unit/compute/v2/test_keypair.py +36 -29
  150. openstackclient/tests/unit/compute/v2/test_server.py +693 -606
  151. openstackclient/tests/unit/compute/v2/test_server_backup.py +36 -77
  152. openstackclient/tests/unit/compute/v2/test_server_event.py +18 -20
  153. openstackclient/tests/unit/compute/v2/test_server_group.py +25 -31
  154. openstackclient/tests/unit/compute/v2/test_server_image.py +37 -78
  155. openstackclient/tests/unit/compute/v2/test_server_migration.py +41 -41
  156. openstackclient/tests/unit/compute/v2/test_server_volume.py +12 -12
  157. openstackclient/tests/unit/compute/v2/test_service.py +39 -45
  158. openstackclient/tests/unit/compute/v2/test_usage.py +5 -5
  159. openstackclient/tests/unit/identity/v2_0/fakes.py +1 -1
  160. openstackclient/tests/unit/identity/v3/test_access_rule.py +1 -3
  161. openstackclient/tests/unit/identity/v3/test_application_credential.py +48 -26
  162. openstackclient/tests/unit/identity/v3/test_domain.py +115 -105
  163. openstackclient/tests/unit/identity/v3/test_endpoint.py +167 -172
  164. openstackclient/tests/unit/identity/v3/test_group.py +353 -202
  165. openstackclient/tests/unit/identity/v3/test_mappings.py +2 -2
  166. openstackclient/tests/unit/identity/v3/test_project.py +16 -0
  167. openstackclient/tests/unit/identity/v3/test_trust.py +5 -2
  168. openstackclient/tests/unit/identity/v3/test_user.py +102 -6
  169. openstackclient/tests/unit/image/v1/fakes.py +2 -2
  170. openstackclient/tests/unit/image/v1/test_image.py +8 -9
  171. openstackclient/tests/unit/image/v2/test_image.py +84 -46
  172. openstackclient/tests/unit/integ/cli/test_shell.py +1 -2
  173. openstackclient/tests/unit/network/test_common.py +2 -2
  174. openstackclient/tests/unit/network/v2/fakes.py +405 -485
  175. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +8 -14
  176. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +62 -54
  177. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +1 -1
  178. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +2 -2
  179. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +1 -3
  180. openstackclient/tests/unit/network/v2/test_network.py +4 -4
  181. openstackclient/tests/unit/network/v2/test_network_agent.py +15 -29
  182. openstackclient/tests/unit/network/v2/test_network_compute.py +11 -11
  183. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +16 -19
  184. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +79 -152
  185. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +4 -6
  186. openstackclient/tests/unit/network/v2/test_network_rbac.py +2 -2
  187. openstackclient/tests/unit/network/v2/test_network_trunk.py +2 -2
  188. openstackclient/tests/unit/network/v2/test_port.py +21 -22
  189. openstackclient/tests/unit/network/v2/test_router.py +130 -51
  190. openstackclient/tests/unit/network/v2/test_security_group_compute.py +11 -19
  191. openstackclient/tests/unit/network/v2/test_security_group_network.py +25 -27
  192. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +15 -17
  193. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +33 -39
  194. openstackclient/tests/unit/object/v1/test_object_all.py +4 -3
  195. openstackclient/tests/unit/test_shell.py +16 -13
  196. openstackclient/tests/unit/volume/v2/fakes.py +1 -2
  197. openstackclient/tests/unit/volume/v2/test_service.py +57 -91
  198. openstackclient/tests/unit/volume/v2/test_volume.py +109 -106
  199. openstackclient/tests/unit/volume/v2/test_volume_backup.py +141 -148
  200. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +293 -283
  201. openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +1 -1
  202. openstackclient/tests/unit/volume/v3/fakes.py +2 -8
  203. openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +61 -71
  204. openstackclient/tests/unit/volume/v3/test_service.py +221 -141
  205. openstackclient/tests/unit/volume/v3/test_volume.py +131 -120
  206. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +4 -4
  207. openstackclient/tests/unit/volume/v3/test_volume_backup.py +198 -203
  208. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +683 -49
  209. openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +1 -1
  210. openstackclient/volume/client.py +1 -3
  211. openstackclient/volume/v2/consistency_group.py +4 -8
  212. openstackclient/volume/v2/consistency_group_snapshot.py +1 -2
  213. openstackclient/volume/v2/qos_specs.py +1 -2
  214. openstackclient/volume/v2/service.py +41 -38
  215. openstackclient/volume/v2/volume.py +71 -53
  216. openstackclient/volume/v2/volume_backup.py +15 -10
  217. openstackclient/volume/v2/volume_snapshot.py +129 -93
  218. openstackclient/volume/v2/volume_transfer_request.py +0 -3
  219. openstackclient/volume/v2/volume_type.py +10 -21
  220. openstackclient/volume/v3/block_storage_cluster.py +3 -3
  221. openstackclient/volume/v3/block_storage_log_level.py +22 -28
  222. openstackclient/volume/v3/block_storage_manage.py +1 -3
  223. openstackclient/volume/v3/service.py +105 -14
  224. openstackclient/volume/v3/volume.py +218 -58
  225. openstackclient/volume/v3/volume_attachment.py +3 -2
  226. openstackclient/volume/v3/volume_backup.py +31 -27
  227. openstackclient/volume/v3/volume_group.py +2 -1
  228. openstackclient/volume/v3/volume_group_snapshot.py +2 -1
  229. openstackclient/volume/v3/volume_snapshot.py +489 -13
  230. openstackclient/volume/v3/volume_type.py +10 -21
  231. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/AUTHORS +11 -0
  232. python_openstackclient-8.1.0.dist-info/METADATA +264 -0
  233. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/RECORD +238 -259
  234. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/WHEEL +1 -1
  235. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/entry_points.txt +7 -47
  236. python_openstackclient-8.1.0.dist-info/pbr.json +1 -0
  237. openstackclient/tests/functional/volume/v1/__init__.py +0 -0
  238. openstackclient/tests/functional/volume/v1/common.py +0 -35
  239. openstackclient/tests/functional/volume/v1/test_qos.py +0 -100
  240. openstackclient/tests/functional/volume/v1/test_service.py +0 -76
  241. openstackclient/tests/functional/volume/v1/test_snapshot.py +0 -232
  242. openstackclient/tests/functional/volume/v1/test_transfer_request.py +0 -111
  243. openstackclient/tests/functional/volume/v1/test_volume.py +0 -228
  244. openstackclient/tests/functional/volume/v1/test_volume_type.py +0 -213
  245. openstackclient/tests/unit/volume/v1/__init__.py +0 -0
  246. openstackclient/tests/unit/volume/v1/fakes.py +0 -615
  247. openstackclient/tests/unit/volume/v1/test_qos_specs.py +0 -471
  248. openstackclient/tests/unit/volume/v1/test_service.py +0 -295
  249. openstackclient/tests/unit/volume/v1/test_transfer_request.py +0 -380
  250. openstackclient/tests/unit/volume/v1/test_type.py +0 -633
  251. openstackclient/tests/unit/volume/v1/test_volume.py +0 -1447
  252. openstackclient/tests/unit/volume/v1/test_volume_backup.py +0 -435
  253. openstackclient/volume/v1/__init__.py +0 -0
  254. openstackclient/volume/v1/qos_specs.py +0 -377
  255. openstackclient/volume/v1/service.py +0 -136
  256. openstackclient/volume/v1/volume.py +0 -734
  257. openstackclient/volume/v1/volume_backup.py +0 -302
  258. openstackclient/volume/v1/volume_snapshot.py +0 -433
  259. openstackclient/volume/v1/volume_transfer_request.py +0 -200
  260. openstackclient/volume/v1/volume_type.py +0 -520
  261. python_openstackclient-7.4.0.dist-info/METADATA +0 -172
  262. python_openstackclient-7.4.0.dist-info/pbr.json +0 -1
  263. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/LICENSE +0 -0
  264. {python_openstackclient-7.4.0.dist-info → python_openstackclient-8.1.0.dist-info}/top_level.txt +0 -0
@@ -14,45 +14,33 @@
14
14
  from unittest import mock
15
15
  from unittest.mock import call
16
16
 
17
- from keystoneauth1 import exceptions as ks_exc
17
+ from openstack import exceptions as sdk_exc
18
+ from openstack.identity.v3 import domain as _domain
19
+ from openstack.identity.v3 import group as _group
20
+ from openstack.identity.v3 import user as _user
21
+ from openstack.test import fakes as sdk_fakes
18
22
  from osc_lib import exceptions
19
- from osc_lib import utils
20
23
 
21
24
  from openstackclient.identity.v3 import group
22
25
  from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
23
26
 
24
27
 
25
- class TestGroup(identity_fakes.TestIdentityv3):
28
+ class TestGroupAddUser(identity_fakes.TestIdentityv3):
26
29
  def setUp(self):
27
30
  super().setUp()
28
31
 
29
- # Get a shortcut to the DomainManager Mock
30
- self.domains_mock = self.identity_client.domains
31
- self.domains_mock.reset_mock()
32
-
33
- # Get a shortcut to the GroupManager Mock
34
- self.groups_mock = self.identity_client.groups
35
- self.groups_mock.reset_mock()
36
-
37
- # Get a shortcut to the UserManager Mock
38
- self.users_mock = self.identity_client.users
39
- self.users_mock.reset_mock()
40
-
41
-
42
- class TestGroupAddUser(TestGroup):
43
- _group = identity_fakes.FakeGroup.create_one_group()
44
- users = identity_fakes.FakeUser.create_users(count=2)
45
-
46
- def setUp(self):
47
- super().setUp()
32
+ self._group = sdk_fakes.generate_fake_resource(_group.Group)
33
+ self.users = tuple(
34
+ sdk_fakes.generate_fake_resources(_user.User, count=2)
35
+ )
48
36
 
49
- self.groups_mock.get.return_value = self._group
50
- self.users_mock.get = identity_fakes.FakeUser.get_users(self.users)
51
- self.users_mock.add_to_group.return_value = None
37
+ self.identity_sdk_client.find_group.return_value = self._group
38
+ self.identity_sdk_client.add_user_to_group.return_value = None
52
39
 
53
40
  self.cmd = group.AddUserToGroup(self.app, None)
54
41
 
55
42
  def test_group_add_user(self):
43
+ self.identity_sdk_client.find_user.return_value = self.users[0]
56
44
  arglist = [
57
45
  self._group.name,
58
46
  self.users[0].name,
@@ -64,12 +52,16 @@ class TestGroupAddUser(TestGroup):
64
52
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
65
53
 
66
54
  result = self.cmd.take_action(parsed_args)
67
- self.users_mock.add_to_group.assert_called_once_with(
55
+ self.identity_sdk_client.add_user_to_group.assert_called_once_with(
68
56
  self.users[0].id, self._group.id
69
57
  )
70
58
  self.assertIsNone(result)
71
59
 
72
60
  def test_group_add_multi_users(self):
61
+ self.identity_sdk_client.find_user.side_effect = [
62
+ self.users[0],
63
+ self.users[1],
64
+ ]
73
65
  arglist = [
74
66
  self._group.name,
75
67
  self.users[0].name,
@@ -86,13 +78,13 @@ class TestGroupAddUser(TestGroup):
86
78
  call(self.users[0].id, self._group.id),
87
79
  call(self.users[1].id, self._group.id),
88
80
  ]
89
- self.users_mock.add_to_group.assert_has_calls(calls)
81
+ self.identity_sdk_client.add_user_to_group.assert_has_calls(calls)
90
82
  self.assertIsNone(result)
91
83
 
92
84
  @mock.patch.object(group.LOG, 'error')
93
85
  def test_group_add_user_with_error(self, mock_error):
94
- self.users_mock.add_to_group.side_effect = [
95
- exceptions.CommandError(),
86
+ self.identity_sdk_client.add_user_to_group.side_effect = [
87
+ sdk_exc.ResourceNotFound,
96
88
  None,
97
89
  ]
98
90
  arglist = [
@@ -111,20 +103,20 @@ class TestGroupAddUser(TestGroup):
111
103
  except exceptions.CommandError as e:
112
104
  msg = f"1 of 2 users not added to group {self._group.name}."
113
105
  self.assertEqual(msg, str(e))
114
- msg = f"{self.users[0].name} not added to group {self._group.name}: "
106
+ msg = f"{self.users[0].name} not added to group {self._group.name}: {str(sdk_exc.ResourceNotFound())}"
115
107
  mock_error.assert_called_once_with(msg)
116
108
 
117
109
 
118
- class TestGroupCheckUser(TestGroup):
119
- group = identity_fakes.FakeGroup.create_one_group()
120
- user = identity_fakes.FakeUser.create_one_user()
121
-
110
+ class TestGroupCheckUser(identity_fakes.TestIdentityv3):
122
111
  def setUp(self):
123
112
  super().setUp()
124
113
 
125
- self.groups_mock.get.return_value = self.group
126
- self.users_mock.get.return_value = self.user
127
- self.users_mock.check_in_group.return_value = None
114
+ self.group = sdk_fakes.generate_fake_resource(_group.Group)
115
+ self.user = sdk_fakes.generate_fake_resource(_user.User)
116
+
117
+ self.identity_sdk_client.find_group.return_value = self.group
118
+ self.identity_sdk_client.find_user.return_value = self.user
119
+ self.identity_sdk_client.check_user_in_group.return_value = True
128
120
 
129
121
  self.cmd = group.CheckUserInGroup(self.app, None)
130
122
 
@@ -140,16 +132,15 @@ class TestGroupCheckUser(TestGroup):
140
132
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
141
133
 
142
134
  result = self.cmd.take_action(parsed_args)
143
- self.users_mock.check_in_group.assert_called_once_with(
135
+ self.identity_sdk_client.check_user_in_group.assert_called_once_with(
144
136
  self.user.id, self.group.id
145
137
  )
146
138
  self.assertIsNone(result)
147
139
 
148
140
  def test_group_check_user_server_error(self):
149
- def server_error(*args):
150
- raise ks_exc.http.InternalServerError
151
-
152
- self.users_mock.check_in_group.side_effect = server_error
141
+ self.identity_sdk_client.check_user_in_group.side_effect = (
142
+ sdk_exc.SDKException
143
+ )
153
144
  arglist = [
154
145
  self.group.name,
155
146
  self.user.name,
@@ -161,12 +152,12 @@ class TestGroupCheckUser(TestGroup):
161
152
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
162
153
 
163
154
  self.assertRaises(
164
- ks_exc.http.InternalServerError, self.cmd.take_action, parsed_args
155
+ sdk_exc.SDKException, self.cmd.take_action, parsed_args
165
156
  )
166
157
 
167
158
 
168
- class TestGroupCreate(TestGroup):
169
- domain = identity_fakes.FakeDomain.create_one_domain()
159
+ class TestGroupCreate(identity_fakes.TestIdentityv3):
160
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
170
161
 
171
162
  columns = (
172
163
  'description',
@@ -177,23 +168,20 @@ class TestGroupCreate(TestGroup):
177
168
 
178
169
  def setUp(self):
179
170
  super().setUp()
180
- self.group = identity_fakes.FakeGroup.create_one_group(
181
- attrs={'domain_id': self.domain.id}
171
+ self.group = sdk_fakes.generate_fake_resource(
172
+ _group.Group, description=None, domain_id=None
182
173
  )
183
- self.data = (
184
- self.group.description,
185
- self.group.domain_id,
186
- self.group.id,
187
- self.group.name,
174
+ self.group_with_options = sdk_fakes.generate_fake_resource(
175
+ _group.Group, domain_id=self.domain.id
188
176
  )
189
177
 
190
- self.groups_mock.create.return_value = self.group
191
- self.groups_mock.get.return_value = self.group
192
- self.domains_mock.get.return_value = self.domain
178
+ self.identity_sdk_client.find_group.return_value = self.group
179
+ self.identity_sdk_client.find_domain.return_value = self.domain
193
180
 
194
181
  self.cmd = group.CreateGroup(self.app, None)
195
182
 
196
183
  def test_group_create(self):
184
+ self.identity_sdk_client.create_group.return_value = self.group
197
185
  arglist = [
198
186
  self.group.name,
199
187
  ]
@@ -203,40 +191,56 @@ class TestGroupCreate(TestGroup):
203
191
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
204
192
 
205
193
  columns, data = self.cmd.take_action(parsed_args)
206
- self.groups_mock.create.assert_called_once_with(
194
+ self.identity_sdk_client.create_group.assert_called_once_with(
207
195
  name=self.group.name,
208
- domain=None,
209
- description=None,
210
196
  )
211
197
  self.assertEqual(self.columns, columns)
212
- self.assertEqual(self.data, data)
198
+ datalist = (
199
+ self.group.description,
200
+ None,
201
+ self.group.id,
202
+ self.group.name,
203
+ )
204
+ self.assertEqual(datalist, data)
213
205
 
214
206
  def test_group_create_with_options(self):
207
+ self.identity_sdk_client.create_group.return_value = (
208
+ self.group_with_options
209
+ )
215
210
  arglist = [
216
211
  '--domain',
217
212
  self.domain.name,
218
213
  '--description',
219
- self.group.description,
220
- self.group.name,
214
+ self.group_with_options.description,
215
+ self.group_with_options.name,
221
216
  ]
222
217
  verifylist = [
223
218
  ('domain', self.domain.name),
224
- ('description', self.group.description),
225
- ('name', self.group.name),
219
+ ('description', self.group_with_options.description),
220
+ ('name', self.group_with_options.name),
226
221
  ]
227
222
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
228
223
 
229
224
  columns, data = self.cmd.take_action(parsed_args)
230
- self.groups_mock.create.assert_called_once_with(
231
- name=self.group.name,
232
- domain=self.domain.id,
233
- description=self.group.description,
225
+ self.identity_sdk_client.create_group.assert_called_once_with(
226
+ name=self.group_with_options.name,
227
+ domain_id=self.domain.id,
228
+ description=self.group_with_options.description,
234
229
  )
235
230
  self.assertEqual(self.columns, columns)
236
- self.assertEqual(self.data, data)
231
+ datalist = (
232
+ self.group_with_options.description,
233
+ self.domain.id,
234
+ self.group_with_options.id,
235
+ self.group_with_options.name,
236
+ )
237
+ self.assertEqual(datalist, data)
237
238
 
238
239
  def test_group_create_or_show(self):
239
- self.groups_mock.create.side_effect = ks_exc.Conflict()
240
+ self.identity_sdk_client.find_group.return_value = self.group
241
+ self.identity_sdk_client.create_group.side_effect = (
242
+ sdk_exc.ConflictException
243
+ )
240
244
  arglist = [
241
245
  '--or-show',
242
246
  self.group.name,
@@ -248,46 +252,97 @@ class TestGroupCreate(TestGroup):
248
252
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
249
253
 
250
254
  columns, data = self.cmd.take_action(parsed_args)
251
- self.groups_mock.get.assert_called_once_with(self.group.name)
255
+ self.identity_sdk_client.find_group.assert_called_once_with(
256
+ self.group.name
257
+ )
258
+ self.assertEqual(self.columns, columns)
259
+ datalist = (
260
+ self.group.description,
261
+ None,
262
+ self.group.id,
263
+ self.group.name,
264
+ )
265
+ self.assertEqual(datalist, data)
266
+
267
+ def test_group_create_or_show_with_domain(self):
268
+ self.identity_sdk_client.find_group.return_value = (
269
+ self.group_with_options
270
+ )
271
+ self.identity_sdk_client.create_group.side_effect = (
272
+ sdk_exc.ConflictException
273
+ )
274
+ arglist = [
275
+ '--or-show',
276
+ self.group_with_options.name,
277
+ '--domain',
278
+ self.domain.id,
279
+ ]
280
+ verifylist = [
281
+ ('or_show', True),
282
+ ('name', self.group_with_options.name),
283
+ ('domain', self.domain.id),
284
+ ]
285
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
286
+
287
+ columns, data = self.cmd.take_action(parsed_args)
288
+ self.identity_sdk_client.find_group.assert_called_once_with(
289
+ self.group_with_options.name, domain_id=self.domain.id
290
+ )
252
291
  self.assertEqual(self.columns, columns)
253
- self.assertEqual(self.data, data)
292
+ datalist = (
293
+ self.group_with_options.description,
294
+ self.domain.id,
295
+ self.group_with_options.id,
296
+ self.group_with_options.name,
297
+ )
298
+ self.assertEqual(datalist, data)
254
299
 
255
300
 
256
- class TestGroupDelete(TestGroup):
257
- domain = identity_fakes.FakeDomain.create_one_domain()
258
- groups = identity_fakes.FakeGroup.create_groups(
259
- attrs={'domain_id': domain.id}, count=2
260
- )
301
+ class TestGroupDelete(identity_fakes.TestIdentityv3):
302
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
261
303
 
262
304
  def setUp(self):
263
305
  super().setUp()
264
306
 
265
- self.groups_mock.get = identity_fakes.FakeGroup.get_groups(self.groups)
266
- self.groups_mock.delete.return_value = None
267
- self.domains_mock.get.return_value = self.domain
307
+ self.group = sdk_fakes.generate_fake_resource(
308
+ _group.Group,
309
+ domain_id=None,
310
+ )
311
+ self.group_with_domain = sdk_fakes.generate_fake_resource(
312
+ _group.Group,
313
+ name=self.group.name,
314
+ domain_id=self.domain.id,
315
+ )
316
+ self.identity_sdk_client.delete_group.return_value = None
317
+ self.identity_sdk_client.find_domain.return_value = self.domain
268
318
 
269
319
  self.cmd = group.DeleteGroup(self.app, None)
270
320
 
271
321
  def test_group_delete(self):
322
+ self.identity_sdk_client.find_group.return_value = self.group
272
323
  arglist = [
273
- self.groups[0].id,
324
+ self.group.id,
274
325
  ]
275
326
  verifylist = [
276
- ('groups', [self.groups[0].id]),
327
+ ('groups', [self.group.id]),
277
328
  ]
278
329
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
279
330
 
280
331
  result = self.cmd.take_action(parsed_args)
281
- self.groups_mock.get.assert_called_once_with(self.groups[0].id)
282
- self.groups_mock.delete.assert_called_once_with(self.groups[0].id)
332
+ self.identity_sdk_client.find_group.assert_called_once_with(
333
+ name_or_id=self.group.id, ignore_missing=False
334
+ )
335
+ self.identity_sdk_client.delete_group.assert_called_once_with(
336
+ self.group.id
337
+ )
283
338
  self.assertIsNone(result)
284
339
 
285
340
  def test_group_multi_delete(self):
286
- arglist = []
287
- verifylist = []
288
-
289
- for g in self.groups:
290
- arglist.append(g.id)
341
+ self.identity_sdk_client.find_group.side_effect = [
342
+ self.group,
343
+ self.group_with_domain,
344
+ ]
345
+ arglist = [self.group.id, self.group_with_domain.id]
291
346
  verifylist = [
292
347
  ('groups', arglist),
293
348
  ]
@@ -295,39 +350,50 @@ class TestGroupDelete(TestGroup):
295
350
 
296
351
  result = self.cmd.take_action(parsed_args)
297
352
 
298
- calls = []
299
- for g in self.groups:
300
- calls.append(call(g.id))
301
- self.groups_mock.delete.assert_has_calls(calls)
353
+ self.identity_sdk_client.delete_group.assert_has_calls(
354
+ [mock.call(self.group.id), mock.call(self.group_with_domain.id)]
355
+ )
302
356
  self.assertIsNone(result)
303
357
 
304
358
  def test_group_delete_with_domain(self):
305
- get_mock_result = [exceptions.CommandError, self.groups[0]]
306
- self.groups_mock.get = mock.Mock(side_effect=get_mock_result)
359
+ self.identity_sdk_client.find_domain.side_effect = [
360
+ sdk_exc.ForbiddenException
361
+ ]
362
+ self.identity_sdk_client.find_group.return_value = (
363
+ self.group_with_domain
364
+ )
307
365
 
308
366
  arglist = [
309
367
  '--domain',
310
- self.domain.id,
311
- self.groups[0].id,
368
+ self.group_with_domain.domain_id,
369
+ self.group_with_domain.name,
312
370
  ]
313
371
  verifylist = [
314
- ('domain', self.groups[0].domain_id),
315
- ('groups', [self.groups[0].id]),
372
+ ('domain', self.domain.id),
373
+ ('groups', [self.group_with_domain.name]),
316
374
  ]
317
375
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
318
376
 
319
377
  result = self.cmd.take_action(parsed_args)
320
- self.groups_mock.get.assert_any_call(
321
- self.groups[0].id, domain_id=self.domain.id
378
+ self.identity_sdk_client.find_group.assert_called_with(
379
+ name_or_id=self.group_with_domain.name,
380
+ ignore_missing=False,
381
+ domain_id=self.domain.id,
382
+ )
383
+ self.identity_sdk_client.delete_group.assert_called_once_with(
384
+ self.group_with_domain.id
322
385
  )
323
- self.groups_mock.delete.assert_called_once_with(self.groups[0].id)
324
386
  self.assertIsNone(result)
325
387
 
326
- @mock.patch.object(utils, 'find_resource')
327
- def test_delete_multi_groups_with_exception(self, find_mock):
328
- find_mock.side_effect = [self.groups[0], exceptions.CommandError]
388
+ def test_delete_multi_groups_with_exception(self):
389
+ self.identity_sdk_client.find_group.side_effect = [
390
+ self.group,
391
+ self.group_with_domain,
392
+ exceptions.CommandError,
393
+ ]
329
394
  arglist = [
330
- self.groups[0].id,
395
+ self.group.id,
396
+ self.group_with_domain.id,
331
397
  'unexist_group',
332
398
  ]
333
399
  verifylist = [
@@ -339,45 +405,57 @@ class TestGroupDelete(TestGroup):
339
405
  self.cmd.take_action(parsed_args)
340
406
  self.fail('CommandError should be raised.')
341
407
  except exceptions.CommandError as e:
342
- self.assertEqual('1 of 2 groups failed to delete.', str(e))
343
-
344
- find_mock.assert_any_call(self.groups_mock, self.groups[0].id)
345
- find_mock.assert_any_call(self.groups_mock, 'unexist_group')
408
+ self.assertEqual('1 of 3 groups failed to delete.', str(e))
409
+
410
+ self.identity_sdk_client.find_group.assert_has_calls(
411
+ [
412
+ mock.call(name_or_id=self.group.id, ignore_missing=False),
413
+ mock.call(
414
+ name_or_id=self.group_with_domain.id, ignore_missing=False
415
+ ),
416
+ mock.call(name_or_id='unexist_group', ignore_missing=False),
417
+ ]
418
+ )
346
419
 
347
- self.assertEqual(2, find_mock.call_count)
348
- self.groups_mock.delete.assert_called_once_with(self.groups[0].id)
420
+ self.assertEqual(3, self.identity_sdk_client.find_group.call_count)
421
+ self.identity_sdk_client.delete_group.assert_has_calls(
422
+ [
423
+ mock.call(self.group.id),
424
+ mock.call(self.group_with_domain.id),
425
+ ]
426
+ )
349
427
 
350
428
 
351
- class TestGroupList(TestGroup):
352
- domain = identity_fakes.FakeDomain.create_one_domain()
353
- group = identity_fakes.FakeGroup.create_one_group()
354
- user = identity_fakes.FakeUser.create_one_user()
429
+ class TestGroupList(identity_fakes.TestIdentityv3):
430
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
355
431
 
356
432
  columns = (
357
433
  'ID',
358
434
  'Name',
359
435
  )
360
- datalist = (
361
- (
362
- group.id,
363
- group.name,
364
- ),
365
- )
366
436
 
367
437
  def setUp(self):
368
438
  super().setUp()
369
439
 
370
- self.groups_mock.get.return_value = self.group
371
- self.groups_mock.list.return_value = [self.group]
372
-
373
- self.domains_mock.get.return_value = self.domain
440
+ self.group = sdk_fakes.generate_fake_resource(
441
+ _group.Group, description=None, domain_id=None
442
+ )
443
+ self.group_with_domain = sdk_fakes.generate_fake_resource(
444
+ _group.Group, domain_id=self.domain.id
445
+ )
446
+ self.user = sdk_fakes.generate_fake_resource(_user.User)
374
447
 
375
- self.users_mock.get.return_value = self.user
448
+ self.identity_sdk_client.find_user.return_value = self.user
449
+ self.identity_sdk_client.find_domain.return_value = self.domain
376
450
 
377
451
  # Get the command object to test
378
452
  self.cmd = group.ListGroup(self.app, None)
379
453
 
380
454
  def test_group_list_no_options(self):
455
+ self.identity_sdk_client.groups.return_value = [
456
+ self.group,
457
+ self.group_with_domain,
458
+ ]
381
459
  arglist = []
382
460
  verifylist = []
383
461
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -387,18 +465,23 @@ class TestGroupList(TestGroup):
387
465
  # containing the data to be listed.
388
466
  columns, data = self.cmd.take_action(parsed_args)
389
467
 
390
- # Set expected values
391
- kwargs = {
392
- 'domain': None,
393
- 'user': None,
394
- }
395
-
396
- self.groups_mock.list.assert_called_with(**kwargs)
468
+ self.identity_sdk_client.groups.assert_called_with()
397
469
 
398
470
  self.assertEqual(self.columns, columns)
399
- self.assertEqual(self.datalist, tuple(data))
471
+ datalist = (
472
+ (
473
+ self.group.id,
474
+ self.group.name,
475
+ ),
476
+ (
477
+ self.group_with_domain.id,
478
+ self.group_with_domain.name,
479
+ ),
480
+ )
481
+ self.assertEqual(datalist, tuple(data))
400
482
 
401
483
  def test_group_list_domain(self):
484
+ self.identity_sdk_client.groups.return_value = [self.group_with_domain]
402
485
  arglist = [
403
486
  '--domain',
404
487
  self.domain.id,
@@ -415,16 +498,17 @@ class TestGroupList(TestGroup):
415
498
 
416
499
  # Set expected values
417
500
  kwargs = {
418
- 'domain': self.domain.id,
419
- 'user': None,
501
+ 'domain_id': self.domain.id,
420
502
  }
421
503
 
422
- self.groups_mock.list.assert_called_with(**kwargs)
504
+ self.identity_sdk_client.groups.assert_called_with(**kwargs)
423
505
 
424
506
  self.assertEqual(self.columns, columns)
425
- self.assertEqual(self.datalist, tuple(data))
507
+ datalist = ((self.group_with_domain.id, self.group_with_domain.name),)
508
+ self.assertEqual(datalist, tuple(data))
426
509
 
427
510
  def test_group_list_user(self):
511
+ self.identity_sdk_client.user_groups.return_value = [self.group]
428
512
  arglist = [
429
513
  '--user',
430
514
  self.user.name,
@@ -439,18 +523,53 @@ class TestGroupList(TestGroup):
439
523
  # containing the data to be listed.
440
524
  columns, data = self.cmd.take_action(parsed_args)
441
525
 
526
+ self.identity_sdk_client.user_groups.assert_called_with(self.user.id)
527
+
528
+ self.assertEqual(self.columns, columns)
529
+
530
+ datalist = ((self.group.id, self.group.name),)
531
+ self.assertEqual(datalist, tuple(data))
532
+
533
+ def test_group_list_user_domain(self):
534
+ self.identity_sdk_client.user_groups.return_value = [
535
+ self.group_with_domain
536
+ ]
537
+ arglist = [
538
+ '--user',
539
+ self.user.name,
540
+ '--domain',
541
+ self.domain.name,
542
+ ]
543
+ verifylist = [
544
+ ('user', self.user.name),
545
+ ('domain', self.domain.name),
546
+ ]
547
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
548
+
549
+ # In base command class Lister in cliff, abstract method take_action()
550
+ # returns a tuple containing the column names and an iterable
551
+ # containing the data to be listed.
552
+ columns, data = self.cmd.take_action(parsed_args)
553
+
442
554
  # Set expected values
443
555
  kwargs = {
444
- 'domain': None,
445
- 'user': self.user.id,
556
+ 'domain_id': self.domain.id,
446
557
  }
447
558
 
448
- self.groups_mock.list.assert_called_with(**kwargs)
559
+ self.identity_sdk_client.user_groups.assert_called_with(
560
+ self.user.id, **kwargs
561
+ )
449
562
 
450
563
  self.assertEqual(self.columns, columns)
451
- self.assertEqual(self.datalist, tuple(data))
564
+
565
+ datalist = ((self.group_with_domain.id, self.group_with_domain.name),)
566
+ self.assertEqual(datalist, tuple(data))
452
567
 
453
568
  def test_group_list_long(self):
569
+ self.identity_sdk_client.groups.return_value = [
570
+ self.group,
571
+ self.group_with_domain,
572
+ ]
454
573
  arglist = [
455
574
  '--long',
456
575
  ]
@@ -464,15 +583,9 @@ class TestGroupList(TestGroup):
464
583
  # containing the data to be listed.
465
584
  columns, data = self.cmd.take_action(parsed_args)
466
585
 
467
- # Set expected values
468
- kwargs = {
469
- 'domain': None,
470
- 'user': None,
471
- }
472
-
473
- self.groups_mock.list.assert_called_with(**kwargs)
586
+ self.identity_sdk_client.groups.assert_called_with()
474
587
 
475
- columns = self.columns + (
588
+ long_columns = self.columns + (
476
589
  'Domain ID',
477
590
  'Description',
478
591
  )
@@ -483,25 +596,33 @@ class TestGroupList(TestGroup):
483
596
  self.group.domain_id,
484
597
  self.group.description,
485
598
  ),
599
+ (
600
+ self.group_with_domain.id,
601
+ self.group_with_domain.name,
602
+ self.group_with_domain.domain_id,
603
+ self.group_with_domain.description,
604
+ ),
486
605
  )
487
- self.assertEqual(columns, columns)
606
+ self.assertEqual(long_columns, columns)
488
607
  self.assertEqual(datalist, tuple(data))
489
608
 
490
609
 
491
- class TestGroupRemoveUser(TestGroup):
492
- _group = identity_fakes.FakeGroup.create_one_group()
493
- users = identity_fakes.FakeUser.create_users(count=2)
494
-
610
+ class TestGroupRemoveUser(identity_fakes.TestIdentityv3):
495
611
  def setUp(self):
496
612
  super().setUp()
497
613
 
498
- self.groups_mock.get.return_value = self._group
499
- self.users_mock.get = identity_fakes.FakeUser.get_users(self.users)
500
- self.users_mock.remove_from_group.return_value = None
614
+ self._group = sdk_fakes.generate_fake_resource(_group.Group)
615
+ self.users = tuple(
616
+ sdk_fakes.generate_fake_resources(_user.User, count=2)
617
+ )
618
+
619
+ self.identity_sdk_client.find_group.return_value = self._group
620
+ self.identity_sdk_client.remove_user_from_group.return_value = None
501
621
 
502
622
  self.cmd = group.RemoveUserFromGroup(self.app, None)
503
623
 
504
624
  def test_group_remove_user(self):
625
+ self.identity_sdk_client.find_user.return_value = self.users[0]
505
626
  arglist = [
506
627
  self._group.id,
507
628
  self.users[0].id,
@@ -513,12 +634,16 @@ class TestGroupRemoveUser(TestGroup):
513
634
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
514
635
 
515
636
  result = self.cmd.take_action(parsed_args)
516
- self.users_mock.remove_from_group.assert_called_once_with(
637
+ self.identity_sdk_client.remove_user_from_group.assert_called_once_with(
517
638
  self.users[0].id, self._group.id
518
639
  )
519
640
  self.assertIsNone(result)
520
641
 
521
642
  def test_group_remove_multi_users(self):
643
+ self.identity_sdk_client.find_user.side_effect = [
644
+ self.users[0],
645
+ self.users[1],
646
+ ]
522
647
  arglist = [
523
648
  self._group.name,
524
649
  self.users[0].name,
@@ -535,13 +660,13 @@ class TestGroupRemoveUser(TestGroup):
535
660
  call(self.users[0].id, self._group.id),
536
661
  call(self.users[1].id, self._group.id),
537
662
  ]
538
- self.users_mock.remove_from_group.assert_has_calls(calls)
663
+ self.identity_sdk_client.remove_user_from_group.assert_has_calls(calls)
539
664
  self.assertIsNone(result)
540
665
 
541
666
  @mock.patch.object(group.LOG, 'error')
542
667
  def test_group_remove_user_with_error(self, mock_error):
543
- self.users_mock.remove_from_group.side_effect = [
544
- exceptions.CommandError(),
668
+ self.identity_sdk_client.remove_user_from_group.side_effect = [
669
+ sdk_exc.ResourceNotFound(),
545
670
  None,
546
671
  ]
547
672
  arglist = [
@@ -560,26 +685,29 @@ class TestGroupRemoveUser(TestGroup):
560
685
  except exceptions.CommandError as e:
561
686
  msg = f"1 of 2 users not removed from group {self._group.id}."
562
687
  self.assertEqual(msg, str(e))
563
- msg = f"{self.users[0].id} not removed from group {self._group.id}: "
688
+ msg = f"{self.users[0].id} not removed from group {self._group.id}: {str(sdk_exc.ResourceNotFound())}"
564
689
  mock_error.assert_called_once_with(msg)
565
690
 
566
691
 
567
- class TestGroupSet(TestGroup):
568
- domain = identity_fakes.FakeDomain.create_one_domain()
569
- group = identity_fakes.FakeGroup.create_one_group(
570
- attrs={'domain_id': domain.id}
571
- )
692
+ class TestGroupSet(identity_fakes.TestIdentityv3):
693
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
572
694
 
573
695
  def setUp(self):
574
696
  super().setUp()
697
+ self.group = sdk_fakes.generate_fake_resource(
698
+ _group.Group, domain_id=self.domain.id
699
+ )
700
+ self.group_with_domain = sdk_fakes.generate_fake_resource(
701
+ _group.Group, name=self.group.name, domain_id=self.domain.id
702
+ )
575
703
 
576
- self.groups_mock.get.return_value = self.group
577
- self.domains_mock.get.return_value = self.domain
578
- self.groups_mock.update.return_value = None
704
+ self.identity_sdk_client.find_group.return_value = self.group
705
+ self.identity_sdk_client.find_domain.return_value = self.domain
579
706
 
580
707
  self.cmd = group.SetGroup(self.app, None)
581
708
 
582
709
  def test_group_set_nothing(self):
710
+ self.identity_sdk_client.update_group.return_value = self.group
583
711
  arglist = [
584
712
  self.group.id,
585
713
  ]
@@ -589,10 +717,13 @@ class TestGroupSet(TestGroup):
589
717
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
590
718
 
591
719
  result = self.cmd.take_action(parsed_args)
592
- self.groups_mock.update.assert_called_once_with(self.group.id)
720
+ self.identity_sdk_client.update_group.assert_called_once_with(
721
+ self.group.id
722
+ )
593
723
  self.assertIsNone(result)
594
724
 
595
725
  def test_group_set_name_and_description(self):
726
+ self.identity_sdk_client.update_group.return_value = self.group
596
727
  arglist = [
597
728
  '--name',
598
729
  'new_name',
@@ -612,36 +743,43 @@ class TestGroupSet(TestGroup):
612
743
  'name': 'new_name',
613
744
  'description': 'new_description',
614
745
  }
615
- self.groups_mock.update.assert_called_once_with(
746
+ self.identity_sdk_client.update_group.assert_called_once_with(
616
747
  self.group.id, **kwargs
617
748
  )
618
749
  self.assertIsNone(result)
619
750
 
620
751
  def test_group_set_with_domain(self):
621
- get_mock_result = [exceptions.CommandError, self.group]
622
- self.groups_mock.get = mock.Mock(side_effect=get_mock_result)
623
-
752
+ self.identity_sdk_client.find_domain.side_effect = [
753
+ sdk_exc.ForbiddenException
754
+ ]
755
+ self.identity_sdk_client.find_group.return_value = (
756
+ self.group_with_domain
757
+ )
624
758
  arglist = [
625
759
  '--domain',
626
760
  self.domain.id,
627
- self.group.id,
761
+ self.group_with_domain.name,
628
762
  ]
629
763
  verifylist = [
630
764
  ('domain', self.domain.id),
631
- ('group', self.group.id),
765
+ ('group', self.group_with_domain.name),
632
766
  ]
633
767
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
634
768
 
635
769
  result = self.cmd.take_action(parsed_args)
636
- self.groups_mock.get.assert_any_call(
637
- self.group.id, domain_id=self.domain.id
770
+ self.identity_sdk_client.find_group.assert_called_once_with(
771
+ name_or_id=self.group_with_domain.name,
772
+ ignore_missing=False,
773
+ domain_id=self.domain.id,
774
+ )
775
+ self.identity_sdk_client.update_group.assert_called_once_with(
776
+ self.group_with_domain.id
638
777
  )
639
- self.groups_mock.update.assert_called_once_with(self.group.id)
640
778
  self.assertIsNone(result)
641
779
 
642
780
 
643
- class TestGroupShow(TestGroup):
644
- domain = identity_fakes.FakeDomain.create_one_domain()
781
+ class TestGroupShow(identity_fakes.TestIdentityv3):
782
+ domain = sdk_fakes.generate_fake_resource(_domain.Domain)
645
783
 
646
784
  columns = (
647
785
  'description',
@@ -652,22 +790,19 @@ class TestGroupShow(TestGroup):
652
790
 
653
791
  def setUp(self):
654
792
  super().setUp()
655
- self.group = identity_fakes.FakeGroup.create_one_group(
656
- attrs={'domain_id': self.domain.id}
793
+ self.group = sdk_fakes.generate_fake_resource(
794
+ _group.Group, description=None, domain_id=None
657
795
  )
658
- self.data = (
659
- self.group.description,
660
- self.group.domain_id,
661
- self.group.id,
662
- self.group.name,
796
+ self.group_with_domain = sdk_fakes.generate_fake_resource(
797
+ _group.Group, name=self.group.name, domain_id=self.domain.id
663
798
  )
664
799
 
665
- self.groups_mock.get.return_value = self.group
666
- self.domains_mock.get.return_value = self.domain
800
+ self.identity_sdk_client.find_domain.return_value = self.domain
667
801
 
668
802
  self.cmd = group.ShowGroup(self.app, None)
669
803
 
670
804
  def test_group_show(self):
805
+ self.identity_sdk_client.find_group.return_value = self.group
671
806
  arglist = [
672
807
  self.group.id,
673
808
  ]
@@ -677,28 +812,44 @@ class TestGroupShow(TestGroup):
677
812
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
678
813
 
679
814
  columns, data = self.cmd.take_action(parsed_args)
680
- self.groups_mock.get.assert_called_once_with(self.group.id)
815
+ self.identity_sdk_client.find_group.assert_called_once_with(
816
+ self.group.id, ignore_missing=False
817
+ )
681
818
  self.assertEqual(self.columns, columns)
682
- self.assertEqual(self.data, data)
819
+ datalist = (
820
+ None,
821
+ None,
822
+ self.group.id,
823
+ self.group.name,
824
+ )
825
+ self.assertEqual(datalist, data)
683
826
 
684
827
  def test_group_show_with_domain(self):
685
- get_mock_result = [exceptions.CommandError, self.group]
686
- self.groups_mock.get = mock.Mock(side_effect=get_mock_result)
687
-
828
+ self.identity_sdk_client.find_group.return_value = (
829
+ self.group_with_domain
830
+ )
688
831
  arglist = [
689
832
  '--domain',
690
833
  self.domain.id,
691
- self.group.id,
834
+ self.group_with_domain.name,
692
835
  ]
693
836
  verifylist = [
694
837
  ('domain', self.domain.id),
695
- ('group', self.group.id),
838
+ ('group', self.group_with_domain.name),
696
839
  ]
697
840
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
698
841
 
699
842
  columns, data = self.cmd.take_action(parsed_args)
700
- self.groups_mock.get.assert_any_call(
701
- self.group.id, domain_id=self.domain.id
843
+ self.identity_sdk_client.find_group.assert_called_once_with(
844
+ self.group_with_domain.name,
845
+ domain_id=self.domain.id,
846
+ ignore_missing=False,
702
847
  )
703
848
  self.assertEqual(self.columns, columns)
704
- self.assertEqual(self.data, data)
849
+ datalist = (
850
+ self.group_with_domain.description,
851
+ self.domain.id,
852
+ self.group_with_domain.id,
853
+ self.group_with_domain.name,
854
+ )
855
+ self.assertEqual(datalist, data)