1515import copy
1616
1717from openstackclient .tests import fakes
18+ from openstackclient .tests .identity .v3 import fakes as identity_fakes
19+ from openstackclient .tests import utils as tests_utils
1820from openstackclient .tests .volume .v2 import fakes as volume_fakes
1921from openstackclient .volume .v2 import volume_type
2022
@@ -41,6 +43,13 @@ def setUp(self):
4143 self .types_mock = self .app .client_manager .volume .volume_types
4244 self .types_mock .reset_mock ()
4345
46+ self .types_access_mock = (
47+ self .app .client_manager .volume .volume_type_access )
48+ self .types_access_mock .reset_mock ()
49+
50+ self .projects_mock = self .app .client_manager .identity .projects
51+ self .projects_mock .reset_mock ()
52+
4453
4554class TestTypeCreate (TestType ):
4655
@@ -211,6 +220,13 @@ def setUp(self):
211220 loaded = True ,
212221 )
213222
223+ # Return a project
224+ self .projects_mock .get .return_value = fakes .FakeResource (
225+ None ,
226+ copy .deepcopy (identity_fakes .PROJECT ),
227+ loaded = True ,
228+ )
229+
214230 # Get the command object to test
215231 self .cmd = volume_type .SetVolumeType (self .app , None )
216232
@@ -286,6 +302,56 @@ def test_type_set_property(self):
286302 self .assertIn ('myprop' , result )
287303 self .assertEqual ('myvalue' , result ['myprop' ])
288304
305+ def test_type_set_not_called_without_project_argument (self ):
306+ arglist = [
307+ '--project' , '' ,
308+ volume_fakes .type_id ,
309+ ]
310+ verifylist = [
311+ ('project' , '' ),
312+ ('volume_type' , volume_fakes .type_id ),
313+ ]
314+
315+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
316+
317+ result = self .cmd .take_action (parsed_args )
318+ self .assertIsNone (result )
319+
320+ self .assertFalse (self .types_access_mock .add_project_access .called )
321+
322+ def test_type_set_failed_with_missing_volume_type_argument (self ):
323+ arglist = [
324+ '--project' , 'identity_fakes.project_id' ,
325+ ]
326+ verifylist = [
327+ ('project' , 'identity_fakes.project_id' ),
328+ ]
329+
330+ self .assertRaises (tests_utils .ParserException ,
331+ self .check_parser ,
332+ self .cmd ,
333+ arglist ,
334+ verifylist )
335+
336+ def test_type_set_project_access (self ):
337+ arglist = [
338+ '--project' , identity_fakes .project_id ,
339+ volume_fakes .type_id ,
340+ ]
341+ verifylist = [
342+ ('project' , identity_fakes .project_id ),
343+ ('volume_type' , volume_fakes .type_id ),
344+ ]
345+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
346+
347+ result = self .cmd .take_action (parsed_args )
348+ self .assertIsNone (result )
349+
350+ self .types_access_mock .add_project_access .assert_called_with (
351+ volume_fakes .type_id ,
352+ identity_fakes .project_id ,
353+ )
354+
289355
290356class TestTypeShow (TestType ):
291357
0 commit comments