|
4 | 4 |
|
5 | 5 | namespace MongoDB\Laravel\Tests;
|
6 | 6 |
|
| 7 | +use BadMethodCallException; |
7 | 8 | use DateTimeImmutable;
|
8 | 9 | use LogicException;
|
9 | 10 | use MongoDB\BSON\Regex;
|
@@ -534,6 +535,44 @@ public function testCursorPaginate(): void
|
534 | 535 | $this->assertNull($results->first()->title);
|
535 | 536 | }
|
536 | 537 |
|
| 538 | + public function testPaginateGroup(): void |
| 539 | + { |
| 540 | + // First page |
| 541 | + $results = User::groupBy('age')->paginate(2); |
| 542 | + $this->assertEquals(2, $results->count()); |
| 543 | + $this->assertEquals(6, $results->total()); |
| 544 | + $this->assertEquals(3, $results->lastPage()); |
| 545 | + $this->assertEquals(1, $results->currentPage()); |
| 546 | + $this->assertCount(2, $results->items()); |
| 547 | + $this->assertArrayHasKey('age', $results->first()->getAttributes()); |
| 548 | + |
| 549 | + // Last page has fewer results |
| 550 | + $results = User::groupBy('age')->paginate(4, page: 2); |
| 551 | + $this->assertEquals(2, $results->count()); |
| 552 | + $this->assertEquals(6, $results->total()); |
| 553 | + $this->assertEquals(2, $results->lastPage()); |
| 554 | + $this->assertEquals(2, $results->currentPage()); |
| 555 | + $this->assertCount(2, $results->items()); |
| 556 | + $this->assertArrayHasKey('age', $results->first()->getAttributes()); |
| 557 | + |
| 558 | + // Using a filter |
| 559 | + $results = User::where('title', 'admin')->groupBy('age')->paginate(4); |
| 560 | + $this->assertEquals(2, $results->count()); |
| 561 | + $this->assertEquals(2, $results->total()); |
| 562 | + $this->assertEquals(1, $results->lastPage()); |
| 563 | + $this->assertEquals(1, $results->currentPage()); |
| 564 | + $this->assertCount(2, $results->items()); |
| 565 | + $this->assertArrayHasKey('age', $results->last()->getAttributes()); |
| 566 | + } |
| 567 | + |
| 568 | + public function testPaginateDistinct(): void |
| 569 | + { |
| 570 | + $this->expectException(BadMethodCallException::class); |
| 571 | + $this->expectExceptionMessage('Distinct queries cannot be used for pagination. Use GroupBy instead'); |
| 572 | + |
| 573 | + User::distinct('age')->paginate(2); |
| 574 | + } |
| 575 | + |
537 | 576 | public function testUpdate(): void
|
538 | 577 | {
|
539 | 578 | $this->assertEquals(1, User::where(['name' => 'John Doe'])->update(['name' => 'Jim Morrison']));
|
|
0 commit comments