Skip to content

Commit

Permalink
#9848 PaginatorComponent.php ignores maxLimit
Browse files Browse the repository at this point in the history
  • Loading branch information
gorogoroyasu committed Dec 7, 2016
1 parent f8ea642 commit 03960de
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 8 deletions.
19 changes: 14 additions & 5 deletions src/Controller/Component/PaginatorComponent.php
Expand Up @@ -299,13 +299,22 @@ public function getDefaults($alias, $defaults)
if (isset($defaults[$alias])) {
$defaults = $defaults[$alias];
}
if (isset($defaults['limit']) &&
(empty($defaults['maxLimit']) || $defaults['limit'] > $defaults['maxLimit'])
) {
$defaults['maxLimit'] = $defaults['limit'];

$config = $this->config();
$maxLimit = isset($defaults['maxLimit']) ? $defaults['maxLimit'] : $config['maxLimit'];
$limit = isset($defaults['limit']) ? $defaults['limit'] : $config['limit'];

if ($limit > $maxLimit) {
$limit = $maxLimit;
}
if (empty($defaults['limit'])) {
$defaults['maxLimit'] = $maxLimit;
$defaults['limit'] = $limit;
}

return $defaults + $this->config();
$defaults['maxLimit'] = $maxLimit;
$defaults['limit'] = $limit;
return $defaults + $config;
}

/**
Expand Down
54 changes: 51 additions & 3 deletions tests/TestCase/Controller/Component/PaginatorComponentTest.php
Expand Up @@ -480,8 +480,8 @@ public function testMergeOptionsMaxLimit()
$result = $this->Paginator->mergeOptions('Post', $settings);
$expected = [
'page' => 1,
'limit' => 200,
'maxLimit' => 200,
'limit' => 100,
'maxLimit' => 100,
'paramType' => 'named',
'whitelist' => ['limit', 'sort', 'page', 'direction']
];
Expand All @@ -494,14 +494,62 @@ public function testMergeOptionsMaxLimit()
$result = $this->Paginator->mergeOptions('Post', $settings);
$expected = [
'page' => 1,
'limit' => 20,
'limit' => 10,
'maxLimit' => 10,
'paramType' => 'named',
'whitelist' => ['limit', 'sort', 'page', 'direction']
];
$this->assertEquals($expected, $result);
}

/**
* test getDefaults with limit > maxLimit in code.
*
* @return void
*/
public function testGetDefaultMaxLimit()
{
$settings = [
'page' => 1,
'limit' => 2,
'maxLimit' => 10,
'order' => [
'Users.username' => 'asc'
],
];
$result = $this->Paginator->mergeOptions('Post', $settings);
$expected = [
'page' => 1,
'limit' => 2,
'maxLimit' => 10,
'order' => [
'Users.username' => 'asc'
],
'whitelist' => ['limit', 'sort', 'page', 'direction']
];
$this->assertEquals($expected, $result);

$settings = [
'page' => 1,
'limit' => 100,
'maxLimit' => 10,
'order' => [
'Users.username' => 'asc'
],
];
$result = $this->Paginator->mergeOptions('Post', $settings);
$expected = [
'page' => 1,
'limit' => 10,
'maxLimit' => 10,
'order' => [
'Users.username' => 'asc'
],
'whitelist' => ['limit', 'sort', 'page', 'direction']
];
$this->assertEquals($expected, $result);
}

/**
* Integration test to ensure that validateSort is being used by paginate()
*
Expand Down

0 comments on commit 03960de

Please sign in to comment.