@@ -685,16 +685,39 @@ public function testLimitsAndOffsets()
685
685
$ this ->assertEquals ('select * from "users" limit 10 offset 5 ' , $ builder ->toSql ());
686
686
687
687
$ builder = $ this ->getBuilder ();
688
- $ builder ->select ('* ' )->from ('users ' )->skip (- 5 )->take (10 );
689
- $ this ->assertEquals ('select * from "users" limit 10 offset 0 ' , $ builder ->toSql ());
688
+ $ builder ->select ('* ' )->from ('users ' )->skip (0 )->take (0 );
689
+ $ this ->assertEquals ('select * from "users" limit 0 offset 0 ' , $ builder ->toSql ());
690
690
691
+ $ builder = $ this ->getBuilder ();
692
+ $ builder ->select ('* ' )->from ('users ' )->skip (-5 )->take (-10 );
693
+ $ this ->assertEquals ('select * from "users" offset 0 ' , $ builder ->toSql ());
694
+ }
695
+
696
+ public function testForPage ()
697
+ {
691
698
$ builder = $ this ->getBuilder ();
692
699
$ builder ->select ('* ' )->from ('users ' )->forPage (2 , 15 );
693
700
$ this ->assertEquals ('select * from "users" limit 15 offset 15 ' , $ builder ->toSql ());
694
701
702
+ $ builder = $ this ->getBuilder ();
703
+ $ builder ->select ('* ' )->from ('users ' )->forPage (0 , 15 );
704
+ $ this ->assertEquals ('select * from "users" limit 15 offset 0 ' , $ builder ->toSql ());
705
+
695
706
$ builder = $ this ->getBuilder ();
696
707
$ builder ->select ('* ' )->from ('users ' )->forPage (-2 , 15 );
697
708
$ this ->assertEquals ('select * from "users" limit 15 offset 0 ' , $ builder ->toSql ());
709
+
710
+ $ builder = $ this ->getBuilder ();
711
+ $ builder ->select ('* ' )->from ('users ' )->forPage (2 , 0 );
712
+ $ this ->assertEquals ('select * from "users" limit 0 offset 0 ' , $ builder ->toSql ());
713
+
714
+ $ builder = $ this ->getBuilder ();
715
+ $ builder ->select ('* ' )->from ('users ' )->forPage (0 , 0 );
716
+ $ this ->assertEquals ('select * from "users" limit 0 offset 0 ' , $ builder ->toSql ());
717
+
718
+ $ builder = $ this ->getBuilder ();
719
+ $ builder ->select ('* ' )->from ('users ' )->forPage (-2 , 0 );
720
+ $ this ->assertEquals ('select * from "users" limit 0 offset 0 ' , $ builder ->toSql ());
698
721
}
699
722
700
723
public function testGetCountForPaginationWithBindings ()
@@ -1799,6 +1822,21 @@ public function testChunkCanBeStoppedByReturningFalse()
1799
1822
});
1800
1823
}
1801
1824
1825
+ public function testChunkWithCountZero ()
1826
+ {
1827
+ $ builder = $ this ->getMockQueryBuilder ();
1828
+ $ chunk = collect ([]);
1829
+ $ builder ->shouldReceive ('forPage ' )->once ()->with (1 , 0 )->andReturnSelf ();
1830
+ $ builder ->shouldReceive ('get ' )->times (1 )->andReturn ($ chunk );
1831
+
1832
+ $ callbackAssertor = m::mock ('StdClass ' );
1833
+ $ callbackAssertor ->shouldReceive ('doSomething ' )->never ();
1834
+
1835
+ $ builder ->chunk (0 , function ($ results ) use ($ callbackAssertor ) {
1836
+ $ callbackAssertor ->doSomething ($ results );
1837
+ });
1838
+ }
1839
+
1802
1840
public function testChunkPaginatesUsingIdWithLastChunkComplete ()
1803
1841
{
1804
1842
$ builder = $ this ->getMockQueryBuilder ();
@@ -1838,6 +1876,21 @@ public function testChunkPaginatesUsingIdWithLastChunkPartial()
1838
1876
}, 'someIdField ' );
1839
1877
}
1840
1878
1879
+ public function testChunkPaginatesUsingIdWithCountZero ()
1880
+ {
1881
+ $ builder = $ this ->getMockQueryBuilder ();
1882
+ $ chunk = collect ([]);
1883
+ $ builder ->shouldReceive ('forPageAfterId ' )->once ()->with (0 , 0 , 'someIdField ' )->andReturnSelf ();
1884
+ $ builder ->shouldReceive ('get ' )->times (1 )->andReturn ($ chunk );
1885
+
1886
+ $ callbackAssertor = m::mock ('StdClass ' );
1887
+ $ callbackAssertor ->shouldReceive ('doSomething ' )->never ();
1888
+
1889
+ $ builder ->chunkById (0 , function ($ results ) use ($ callbackAssertor ) {
1890
+ $ callbackAssertor ->doSomething ($ results );
1891
+ }, 'someIdField ' );
1892
+ }
1893
+
1841
1894
public function testChunkPaginatesUsingIdWithAlias ()
1842
1895
{
1843
1896
$ builder = $ this ->getMockQueryBuilder ();
0 commit comments