@@ -46,6 +46,7 @@ def setUp(self):
4646 self .bar_param = mock .Mock ()
4747 self .bar_param .type_name = 'string'
4848 self .bar_param .name = 'Bar'
49+ self .bar_param .metadata = {}
4950 self .params = [self .foo_param , self .bar_param ]
5051 self .operation_model .input_shape .members = {
5152 "Foo" : self .foo_param ,
@@ -437,6 +438,59 @@ def test_can_handle_missing_page_size(self):
437438 )
438439
439440
441+ class TestPageSizeConstraints (TestPaginateBase ):
442+ def test_page_size_copies_min_max_from_limit_key_shape (self ):
443+ self .bar_param .type_name = 'integer'
444+ self .bar_param .metadata = {'min' : 1 , 'max' : 100 }
445+ argument_table = {
446+ 'foo' : mock .Mock (),
447+ 'bar' : mock .Mock (),
448+ }
449+ paginate .unify_paging_params (
450+ argument_table ,
451+ self .operation_model ,
452+ 'building-argument-table.foo.bar' ,
453+ self .session ,
454+ )
455+ page_size_arg = argument_table ['page-size' ]
456+ self .assertEqual (page_size_arg .argument_model .metadata .get ('min' ), 1 )
457+ self .assertEqual (page_size_arg .argument_model .metadata .get ('max' ), 100 )
458+
459+ def test_page_size_no_constraints_when_limit_key_has_none (self ):
460+ self .bar_param .type_name = 'integer'
461+ self .bar_param .metadata = {}
462+ argument_table = {
463+ 'foo' : mock .Mock (),
464+ 'bar' : mock .Mock (),
465+ }
466+ paginate .unify_paging_params (
467+ argument_table ,
468+ self .operation_model ,
469+ 'building-argument-table.foo.bar' ,
470+ self .session ,
471+ )
472+ page_size_arg = argument_table ['page-size' ]
473+ self .assertNotIn ('min' , page_size_arg .argument_model .metadata )
474+ self .assertNotIn ('max' , page_size_arg .argument_model .metadata )
475+
476+ def test_page_size_copies_partial_constraints (self ):
477+ self .bar_param .type_name = 'integer'
478+ self .bar_param .metadata = {'min' : 1 }
479+ argument_table = {
480+ 'foo' : mock .Mock (),
481+ 'bar' : mock .Mock (),
482+ }
483+ paginate .unify_paging_params (
484+ argument_table ,
485+ self .operation_model ,
486+ 'building-argument-table.foo.bar' ,
487+ self .session ,
488+ )
489+ page_size_arg = argument_table ['page-size' ]
490+ self .assertEqual (page_size_arg .argument_model .metadata .get ('min' ), 1 )
491+ self .assertNotIn ('max' , page_size_arg .argument_model .metadata )
492+
493+
440494class TestNonPositiveMaxItems :
441495 def test_positive_integer_does_not_raise_warning (
442496 self , max_items_page_arg , capsys
0 commit comments