@@ -451,6 +451,7 @@ class TestProjectList(TestProject):
451451 domain = identity_fakes .FakeDomain .create_one_domain ()
452452 project = identity_fakes .FakeProject .create_one_project (
453453 attrs = {'domain_id' : domain .id })
454+ projects = identity_fakes .FakeProject .create_projects ()
454455
455456 columns = (
456457 'ID' ,
@@ -462,6 +463,12 @@ class TestProjectList(TestProject):
462463 project .name ,
463464 ),
464465 )
466+ datalists = (
467+ (projects [0 ].description , True ,
468+ projects [0 ].id , projects [0 ].name ,),
469+ (projects [1 ].description , True ,
470+ projects [1 ].id , projects [1 ].name ,),
471+ )
465472
466473 def setUp (self ):
467474 super (TestProjectList , self ).setUp ()
@@ -552,6 +559,36 @@ def test_project_list_domain_no_perms(self):
552559 self .assertEqual (self .columns , columns )
553560 self .assertEqual (self .datalist , tuple (data ))
554561
562+ def test_project_list_sort (self ):
563+ self .projects_mock .list .return_value = self .projects
564+
565+ arglist = ['--sort' , 'name:asc' , ]
566+ verifylist = []
567+
568+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
569+
570+ # In base command class Lister in cliff, abstract method take_action()
571+ # returns a tuple containing the column names and an iterable
572+ # containing the data to be listed.
573+ (columns , data ) = self .cmd .take_action (parsed_args )
574+ self .projects_mock .list .assert_called_with ()
575+
576+ collist = ('ID' , 'Name' )
577+ self .assertEqual (collist , columns )
578+
579+ if self .projects [0 ].name > self .projects [1 ].name :
580+ datalists = (
581+ (self .projects [1 ].id , self .projects [1 ].name ),
582+ (self .projects [0 ].id , self .projects [0 ].name ),
583+ )
584+ else :
585+ datalists = (
586+ (self .projects [0 ].id , self .projects [0 ].name ),
587+ (self .projects [1 ].id , self .projects [1 ].name ),
588+ )
589+
590+ self .assertEqual (datalists , tuple (data ))
591+
555592
556593class TestProjectSet (TestProject ):
557594
0 commit comments