@@ -1409,7 +1409,7 @@ describe('refresh', () => {
1409
1409
} ) ;
1410
1410
1411
1411
describe ( 'use' , ( ) => {
1412
- it ( 'hooks middleware into the lifecycle before the instance starts' , ( ) => {
1412
+ it ( 'hooks middleware into the lifecycle before the instance starts' , async ( ) => {
1413
1413
const searchClient = createSearchClient ( ) ;
1414
1414
const search = new InstantSearch ( {
1415
1415
indexName : 'indexName' ,
@@ -1434,7 +1434,7 @@ describe('use', () => {
1434
1434
const middleware = jest . fn ( ( ) => middlewareSpy ) ;
1435
1435
1436
1436
search . addWidgets ( [ searchBox ] ) ;
1437
- search . EXPERIMENTAL_use ( middleware ) ;
1437
+ search . use ( middleware ) ;
1438
1438
1439
1439
expect ( middleware ) . toHaveBeenCalledTimes ( 1 ) ;
1440
1440
expect ( middleware ) . toHaveBeenCalledWith ( { instantSearchInstance : search } ) ;
@@ -1450,11 +1450,15 @@ describe('use', () => {
1450
1450
// Checks that `mainIndex.init` was called before subscribing the middleware.
1451
1451
expect ( widgetsInitCallOrder ) . toBeLessThan ( middlewareSubscribeCallOrder ) ;
1452
1452
1453
+ await runAllMicroTasks ( ) ;
1454
+
1453
1455
expect ( middlewareSpy . subscribe ) . toHaveBeenCalledTimes ( 1 ) ;
1454
1456
expect ( middlewareSpy . onStateChange ) . toHaveBeenCalledTimes ( 0 ) ;
1455
1457
1456
1458
button . click ( ) ;
1457
1459
1460
+ await runAllMicroTasks ( ) ;
1461
+
1458
1462
expect ( middlewareSpy . onStateChange ) . toHaveBeenCalledTimes ( 1 ) ;
1459
1463
expect ( middlewareSpy . onStateChange ) . toHaveBeenCalledWith ( {
1460
1464
uiState : {
@@ -1466,6 +1470,8 @@ describe('use', () => {
1466
1470
1467
1471
search . dispose ( ) ;
1468
1472
1473
+ await runAllMicroTasks ( ) ;
1474
+
1469
1475
expect ( middlewareSpy . onStateChange ) . toHaveBeenCalledTimes ( 2 ) ;
1470
1476
expect ( middlewareSpy . onStateChange ) . toHaveBeenCalledWith ( {
1471
1477
uiState : {
@@ -1475,7 +1481,7 @@ describe('use', () => {
1475
1481
expect ( middlewareSpy . unsubscribe ) . toHaveBeenCalledTimes ( 1 ) ;
1476
1482
} ) ;
1477
1483
1478
- it ( 'hooks middleware into the lifecycle after the instance starts' , ( ) => {
1484
+ it ( 'hooks middleware into the lifecycle after the instance starts' , async ( ) => {
1479
1485
const searchClient = createSearchClient ( ) ;
1480
1486
const search = new InstantSearch ( {
1481
1487
indexName : 'indexName' ,
@@ -1503,15 +1509,15 @@ describe('use', () => {
1503
1509
const middlewareAfterStart = jest . fn ( ( ) => middlewareAfterStartSpy ) ;
1504
1510
1505
1511
search . addWidgets ( [ searchBox ( { } ) ] ) ;
1506
- search . EXPERIMENTAL_use ( middlewareBeforeStart ) ;
1512
+ search . use ( middlewareBeforeStart ) ;
1507
1513
search . start ( ) ;
1508
1514
1509
1515
expect ( middlewareBeforeStart ) . toHaveBeenCalledTimes ( 1 ) ;
1510
1516
expect ( middlewareBeforeStart ) . toHaveBeenCalledWith ( {
1511
1517
instantSearchInstance : search ,
1512
1518
} ) ;
1513
1519
1514
- search . EXPERIMENTAL_use ( middlewareAfterStart ) ;
1520
+ search . use ( middlewareAfterStart ) ;
1515
1521
1516
1522
// The first middleware should still have been only called once
1517
1523
expect ( middlewareBeforeStart ) . toHaveBeenCalledTimes ( 1 ) ;
@@ -1520,6 +1526,8 @@ describe('use', () => {
1520
1526
instantSearchInstance : search ,
1521
1527
} ) ;
1522
1528
1529
+ await runAllMicroTasks ( ) ;
1530
+
1523
1531
// The first middleware subscribe function should have been only called once
1524
1532
expect ( middlewareBeforeStartSpy . subscribe ) . toHaveBeenCalledTimes ( 1 ) ;
1525
1533
expect ( middlewareAfterStartSpy . subscribe ) . toHaveBeenCalledTimes ( 1 ) ;
@@ -1528,6 +1536,8 @@ describe('use', () => {
1528
1536
1529
1537
button . click ( ) ;
1530
1538
1539
+ await runAllMicroTasks ( ) ;
1540
+
1531
1541
expect ( middlewareBeforeStartSpy . onStateChange ) . toHaveBeenCalledTimes ( 1 ) ;
1532
1542
expect ( middlewareAfterStartSpy . onStateChange ) . toHaveBeenCalledTimes ( 1 ) ;
1533
1543
expect ( middlewareBeforeStartSpy . onStateChange ) . toHaveBeenCalledWith ( {
@@ -1547,6 +1557,8 @@ describe('use', () => {
1547
1557
1548
1558
search . dispose ( ) ;
1549
1559
1560
+ await runAllMicroTasks ( ) ;
1561
+
1550
1562
expect ( middlewareBeforeStartSpy . onStateChange ) . toHaveBeenCalledTimes ( 2 ) ;
1551
1563
expect ( middlewareAfterStartSpy . onStateChange ) . toHaveBeenCalledTimes ( 2 ) ;
1552
1564
expect ( middlewareBeforeStartSpy . onStateChange ) . toHaveBeenCalledWith ( {
@@ -1603,7 +1615,7 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
1603
1615
expect ( searchClient . search ) . toHaveBeenCalledTimes ( 2 ) ;
1604
1616
} ) ;
1605
1617
1606
- test ( 'notifies all middleware' , ( ) => {
1618
+ test ( 'notifies all middlewares' , async ( ) => {
1607
1619
const searchClient = createSearchClient ( ) ;
1608
1620
const search = new InstantSearch ( {
1609
1621
indexName : 'indexName' ,
@@ -1618,13 +1630,16 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
1618
1630
} ;
1619
1631
} ;
1620
1632
1621
- search . EXPERIMENTAL_use ( middleware ) ;
1633
+ search . use ( middleware ) ;
1622
1634
search . start ( ) ;
1623
1635
expect ( onMiddlewareStateChange ) . toHaveBeenCalledTimes ( 0 ) ;
1624
1636
1625
1637
search . setUiState ( {
1626
1638
indexName : { } ,
1627
1639
} ) ;
1640
+
1641
+ await runAllMicroTasks ( ) ;
1642
+
1628
1643
expect ( onMiddlewareStateChange ) . toHaveBeenCalledTimes ( 1 ) ;
1629
1644
expect ( onMiddlewareStateChange ) . toHaveBeenCalledWith ( {
1630
1645
uiState : {
@@ -1633,6 +1648,62 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/instantsear
1633
1648
} ) ;
1634
1649
} ) ;
1635
1650
1651
+ test ( 'notifies all middlewares in multi-index when called multiple times' , async ( ) => {
1652
+ const searchClient = createSearchClient ( ) ;
1653
+ const search = new InstantSearch ( {
1654
+ indexName : 'indexName' ,
1655
+ searchClient,
1656
+ } ) ;
1657
+
1658
+ search . addWidgets ( [
1659
+ connectSearchBox ( ( ) => { } ) ( { } ) ,
1660
+ index ( { indexName : 'test' } ) ,
1661
+ ] ) ;
1662
+
1663
+ const onMiddlewareStateChange = jest . fn ( ) ;
1664
+ const middleware = ( ) => {
1665
+ return {
1666
+ subscribe ( ) { } ,
1667
+ unsubscribe ( ) { } ,
1668
+ onStateChange : onMiddlewareStateChange ,
1669
+ } ;
1670
+ } ;
1671
+
1672
+ search . use ( middleware ) ;
1673
+ search . start ( ) ;
1674
+ expect ( onMiddlewareStateChange ) . toHaveBeenCalledTimes ( 0 ) ;
1675
+
1676
+ search . setUiState ( {
1677
+ indexName : { } ,
1678
+ test : { } ,
1679
+ } ) ;
1680
+
1681
+ await runAllMicroTasks ( ) ;
1682
+
1683
+ expect ( onMiddlewareStateChange ) . toHaveBeenCalledTimes ( 1 ) ;
1684
+ expect ( onMiddlewareStateChange ) . toHaveBeenCalledWith ( {
1685
+ uiState : {
1686
+ indexName : { } ,
1687
+ test : { } ,
1688
+ } ,
1689
+ } ) ;
1690
+
1691
+ search . setUiState ( {
1692
+ indexName : { query : 'test' } ,
1693
+ test : { } ,
1694
+ } ) ;
1695
+
1696
+ await runAllMicroTasks ( ) ;
1697
+
1698
+ expect ( onMiddlewareStateChange ) . toHaveBeenCalledTimes ( 2 ) ;
1699
+ expect ( onMiddlewareStateChange ) . toHaveBeenCalledWith ( {
1700
+ uiState : {
1701
+ indexName : { query : 'test' } ,
1702
+ test : { } ,
1703
+ } ,
1704
+ } ) ;
1705
+ } ) ;
1706
+
1636
1707
test ( 'with object form sets indices state' , async ( ) => {
1637
1708
const searchClient = createSearchClient ( ) ;
1638
1709
const search = new InstantSearch ( {
@@ -1902,7 +1973,7 @@ describe('onStateChange', () => {
1902
1973
} ;
1903
1974
1904
1975
search . addWidgets ( [ searchBox ( { } ) ] ) ;
1905
- search . EXPERIMENTAL_use ( middleware ) ;
1976
+ search . use ( middleware ) ;
1906
1977
search . start ( ) ;
1907
1978
1908
1979
expect ( middlewareOnStateChange ) . toHaveBeenCalledTimes ( 0 ) ;
0 commit comments