@@ -1531,6 +1531,69 @@ describe('ParseObject', () => {
1531
1531
jest . runAllTicks ( ) ;
1532
1532
} ) ;
1533
1533
1534
+ it ( 'can saveAll with batchSize' , async ( done ) => {
1535
+ const xhrs = [ ] ;
1536
+ for ( let i = 0 ; i < 2 ; i ++ ) {
1537
+ xhrs [ i ] = {
1538
+ setRequestHeader : jest . fn ( ) ,
1539
+ open : jest . fn ( ) ,
1540
+ send : jest . fn ( ) ,
1541
+ status : 200 ,
1542
+ readyState : 4
1543
+ } ;
1544
+ }
1545
+ let current = 0 ;
1546
+ RESTController . _setXHR ( function ( ) { return xhrs [ current ++ ] ; } ) ;
1547
+ const objects = [ ] ;
1548
+ for ( let i = 0 ; i < 22 ; i ++ ) {
1549
+ objects [ i ] = new ParseObject ( 'Person' ) ;
1550
+ }
1551
+ ParseObject . saveAll ( objects , { batchSize : 20 } ) . then ( ( ) => {
1552
+ expect ( xhrs [ 0 ] . open . mock . calls [ 0 ] ) . toEqual (
1553
+ [ 'POST' , 'https://api.parse.com/1/batch' , true ]
1554
+ ) ;
1555
+ expect ( xhrs [ 1 ] . open . mock . calls [ 0 ] ) . toEqual (
1556
+ [ 'POST' , 'https://api.parse.com/1/batch' , true ]
1557
+ ) ;
1558
+ done ( ) ;
1559
+ } ) ;
1560
+ jest . runAllTicks ( ) ;
1561
+ await flushPromises ( ) ;
1562
+
1563
+ xhrs [ 0 ] . responseText = JSON . stringify ( [
1564
+ { success : { objectId : 'pid0' } } ,
1565
+ { success : { objectId : 'pid1' } } ,
1566
+ { success : { objectId : 'pid2' } } ,
1567
+ { success : { objectId : 'pid3' } } ,
1568
+ { success : { objectId : 'pid4' } } ,
1569
+ { success : { objectId : 'pid5' } } ,
1570
+ { success : { objectId : 'pid6' } } ,
1571
+ { success : { objectId : 'pid7' } } ,
1572
+ { success : { objectId : 'pid8' } } ,
1573
+ { success : { objectId : 'pid9' } } ,
1574
+ { success : { objectId : 'pid10' } } ,
1575
+ { success : { objectId : 'pid11' } } ,
1576
+ { success : { objectId : 'pid12' } } ,
1577
+ { success : { objectId : 'pid13' } } ,
1578
+ { success : { objectId : 'pid14' } } ,
1579
+ { success : { objectId : 'pid15' } } ,
1580
+ { success : { objectId : 'pid16' } } ,
1581
+ { success : { objectId : 'pid17' } } ,
1582
+ { success : { objectId : 'pid18' } } ,
1583
+ { success : { objectId : 'pid19' } } ,
1584
+ ] ) ;
1585
+ xhrs [ 0 ] . onreadystatechange ( ) ;
1586
+ jest . runAllTicks ( ) ;
1587
+ await flushPromises ( ) ;
1588
+
1589
+ xhrs [ 1 ] . responseText = JSON . stringify ( [
1590
+ { success : { objectId : 'pid20' } } ,
1591
+ { success : { objectId : 'pid21' } } ,
1592
+ ] ) ;
1593
+ xhrs [ 1 ] . onreadystatechange ( ) ;
1594
+ jest . runAllTicks ( ) ;
1595
+ } ) ;
1596
+
1534
1597
it ( 'returns the first error when saving an array of objects' , async ( done ) => {
1535
1598
const xhrs = [ ] ;
1536
1599
for ( let i = 0 ; i < 2 ; i ++ ) {
@@ -1714,6 +1777,81 @@ describe('ObjectController', () => {
1714
1777
await result ;
1715
1778
} ) ;
1716
1779
1780
+ it ( 'can destroy an array of objects with batchSize' , async ( ) => {
1781
+ const objectController = CoreManager . getObjectController ( ) ;
1782
+ const xhrs = [ ] ;
1783
+ for ( let i = 0 ; i < 3 ; i ++ ) {
1784
+ xhrs [ i ] = {
1785
+ setRequestHeader : jest . fn ( ) ,
1786
+ open : jest . fn ( ) ,
1787
+ send : jest . fn ( )
1788
+ } ;
1789
+ xhrs [ i ] . status = 200 ;
1790
+ xhrs [ i ] . responseText = JSON . stringify ( { } ) ;
1791
+ xhrs [ i ] . readyState = 4 ;
1792
+ }
1793
+ let current = 0 ;
1794
+ RESTController . _setXHR ( function ( ) { return xhrs [ current ++ ] ; } ) ;
1795
+ let objects = [ ] ;
1796
+ for ( let i = 0 ; i < 5 ; i ++ ) {
1797
+ objects [ i ] = new ParseObject ( 'Person' ) ;
1798
+ objects [ i ] . id = 'pid' + i ;
1799
+ }
1800
+ const result = objectController . destroy ( objects , { batchSize : 20 } ) . then ( async ( ) => {
1801
+ expect ( xhrs [ 0 ] . open . mock . calls [ 0 ] ) . toEqual (
1802
+ [ 'POST' , 'https://api.parse.com/1/batch' , true ]
1803
+ ) ;
1804
+ expect ( JSON . parse ( xhrs [ 0 ] . send . mock . calls [ 0 ] ) . requests ) . toEqual ( [
1805
+ {
1806
+ method : 'DELETE' ,
1807
+ path : '/1/classes/Person/pid0' ,
1808
+ body : { }
1809
+ } , {
1810
+ method : 'DELETE' ,
1811
+ path : '/1/classes/Person/pid1' ,
1812
+ body : { }
1813
+ } , {
1814
+ method : 'DELETE' ,
1815
+ path : '/1/classes/Person/pid2' ,
1816
+ body : { }
1817
+ } , {
1818
+ method : 'DELETE' ,
1819
+ path : '/1/classes/Person/pid3' ,
1820
+ body : { }
1821
+ } , {
1822
+ method : 'DELETE' ,
1823
+ path : '/1/classes/Person/pid4' ,
1824
+ body : { }
1825
+ }
1826
+ ] ) ;
1827
+
1828
+ objects = [ ] ;
1829
+ for ( let i = 0 ; i < 22 ; i ++ ) {
1830
+ objects [ i ] = new ParseObject ( 'Person' ) ;
1831
+ objects [ i ] . id = 'pid' + i ;
1832
+ }
1833
+ const destroy = objectController . destroy ( objects , { batchSize : 20 } ) ;
1834
+ jest . runAllTicks ( ) ;
1835
+ await flushPromises ( ) ;
1836
+ xhrs [ 1 ] . onreadystatechange ( ) ;
1837
+ jest . runAllTicks ( ) ;
1838
+ await flushPromises ( ) ;
1839
+ expect ( xhrs [ 1 ] . open . mock . calls . length ) . toBe ( 1 ) ;
1840
+ xhrs [ 2 ] . onreadystatechange ( ) ;
1841
+ jest . runAllTicks ( ) ;
1842
+ return destroy ;
1843
+ } ) . then ( ( ) => {
1844
+ expect ( JSON . parse ( xhrs [ 1 ] . send . mock . calls [ 0 ] ) . requests . length ) . toBe ( 20 ) ;
1845
+ expect ( JSON . parse ( xhrs [ 2 ] . send . mock . calls [ 0 ] ) . requests . length ) . toBe ( 2 ) ;
1846
+ } ) ;
1847
+ jest . runAllTicks ( ) ;
1848
+ await flushPromises ( ) ;
1849
+
1850
+ xhrs [ 0 ] . onreadystatechange ( ) ;
1851
+ jest . runAllTicks ( ) ;
1852
+ await result ;
1853
+ } ) ;
1854
+
1717
1855
it ( 'can destroy an array of objects' , async ( ) => {
1718
1856
const objectController = CoreManager . getObjectController ( ) ;
1719
1857
const xhrs = [ ] ;
0 commit comments