سوال اول اینکه چرا تو if اول page رو مساوی totalRecords قرار دادید؟ totalPage باید باشه دیگه؟
if ($page >$totalPages){
$page = $totalRecords;
}
سوال دوم اینکه فکر میکنم باید یه شرط دیگه هم بزاریم برای مواقعی که تعداد کل رکوردها، کوجکتر از پیج سایز هست. الان من که اگه ۲۰ تا رکورد داشته باشم و پیج سایز رو ۲۵ پاس بدم خطا میخورم تو assertCount().
jsonBaseRepository.php
public function paginate(string $search = null, int $page, int $pageSize = 20)
{
$users = json_decode(file_get_contents(base_path().'/users.json'), true);
$totalRecords = count($users);
if ($pageSize>$totalRecords){
$pageSize = $totalRecords;
}
$totalPages = ceil($totalRecords / $pageSize);
if ($page >$totalPages){
$page = $totalPages+1;
}
if ($page < 1){
$page = 1;
}
$offset = ($page-1)*$pageSize;
return array_slice($users, $offset, $pageSize);
}
UsersTest.php
public function test_should_view_all_users()
{
$pageSize = 25;
$response = $this->call('GET', 'api/v1/users', [
'page'=> 1,
'pageSize'=> $pageSize,
]);
$data = json_decode($response->getContent(), true);
if($pageSize > $this->count($data['data'])){
$pageSize= count($data['data']);
}
$this->assertCount($pageSize, $data['data'] );
$this->assertEquals(200, $response->status());
$this->seeJsonStructure([
'success',
'message',
'data' => [
]
]);
}