Skip to content

Commit 0013cd5

Browse files
committed
Initialise hasNext to false if the initial collection is empty/null
1 parent 4d73490 commit 0013cd5

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

src/Tasks/PageIterator.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public function __construct($response, RequestAdapter $requestAdapter, ?array $c
5757

5858
if ($page !== null) {
5959
$this->currentPage = $page;
60-
$this->hasNext = true;
60+
$this->hasNext = !(empty($page->getValue()) || is_null($page->getValue()));
6161
}
6262
}
6363

@@ -137,7 +137,7 @@ public static function convertToPage($response): ?PageResult
137137

138138
$value = null;
139139
if (is_array($response)) {
140-
$value = $response['value'] ?? ['value' => []];
140+
$value = $response['value'] ?? [];
141141
} elseif ($response instanceof Parsable &&
142142
method_exists($response, 'getValue')) {
143143
$value = $response->getValue();

tests/Tasks/PageIteratorTest.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,4 +224,47 @@ public function testCanGetFromParsablePageObject(): void
224224
$this->assertEquals(2, $count);
225225
$this->assertInstanceOf(User::class, $data[0]);
226226
}
227+
228+
public function testHasNextIsFalseWithEmptyOrNullInitialCollection(): void
229+
{
230+
$pageIterator = new PageIterator([], $this->mockRequestAdapter);
231+
$this->assertFalse($pageIterator->hasNext());
232+
233+
$pageIterator = new PageIterator([1, 2, 3], $this->mockRequestAdapter);
234+
$this->assertFalse($pageIterator->hasNext());
235+
236+
$pageIterator = new PageIterator(['value' => []], $this->mockRequestAdapter);
237+
$this->assertFalse($pageIterator->hasNext());
238+
239+
$pageIterator = new PageIterator(['value' => null], $this->mockRequestAdapter);
240+
$this->assertFalse($pageIterator->hasNext());
241+
242+
$pageIterator = new PageIterator((object) [], $this->mockRequestAdapter);
243+
$this->assertFalse($pageIterator->hasNext());
244+
245+
$pageIterator = new PageIterator((object) [1, 2], $this->mockRequestAdapter);
246+
$this->assertFalse($pageIterator->hasNext());
247+
248+
$pageIterator = new PageIterator((object) [], $this->mockRequestAdapter);
249+
$this->assertFalse($pageIterator->hasNext());
250+
251+
$usersResponse = new UsersResponse();
252+
$usersResponse->setValue([]);
253+
$pageIterator = new PageIterator($usersResponse, $this->mockRequestAdapter);
254+
$this->assertFalse($pageIterator->hasNext());
255+
}
256+
257+
public function testHasNextInitialisedToTrueWhenValueHasItems(): void
258+
{
259+
$pageIterator = new PageIterator(['value' => [1, 2, 3]], $this->mockRequestAdapter);
260+
$this->assertTrue($pageIterator->hasNext());
261+
262+
$pageIterator = new PageIterator((object) ['value' => [1]], $this->mockRequestAdapter);
263+
$this->assertTrue($pageIterator->hasNext());
264+
265+
$usersResponse = new UsersResponse();
266+
$usersResponse->setValue([1, 2]);
267+
$pageIterator = new PageIterator($usersResponse, $this->mockRequestAdapter);
268+
$this->assertTrue($pageIterator->hasNext());
269+
}
227270
}

0 commit comments

Comments
 (0)