@@ -22,7 +22,7 @@ import {
22
22
} from "../cache" ;
23
23
24
24
import { MockedResponse , mockSingleLink } from "../testing" ;
25
- import { ObservableStream } from "../testing/internal" ;
25
+ import { ObservableStream , setupPaginatedCase } from "../testing/internal" ;
26
26
27
27
describe ( "updateQuery on a simple query" , ( ) => {
28
28
const query = gql `
@@ -1789,3 +1789,140 @@ describe("fetchMore on an observable query with connection", () => {
1789
1789
} ) ;
1790
1790
} ) ;
1791
1791
} ) ;
1792
+
1793
+ test ( "uses updateQuery to update the result of the query with no-cache queries" , async ( ) => {
1794
+ const { query, link } = setupPaginatedCase ( ) ;
1795
+
1796
+ const client = new ApolloClient ( { cache : new InMemoryCache ( ) , link } ) ;
1797
+
1798
+ const observable = client . watchQuery ( {
1799
+ query,
1800
+ fetchPolicy : "no-cache" ,
1801
+ notifyOnNetworkStatusChange : true ,
1802
+ variables : { limit : 2 } ,
1803
+ } ) ;
1804
+
1805
+ const stream = new ObservableStream ( observable ) ;
1806
+
1807
+ await expect ( stream ) . toEmitApolloQueryResult ( {
1808
+ data : {
1809
+ letters : [
1810
+ { __typename : "Letter" , letter : "A" , position : 1 } ,
1811
+ { __typename : "Letter" , letter : "B" , position : 2 } ,
1812
+ ] ,
1813
+ } ,
1814
+ loading : false ,
1815
+ networkStatus : NetworkStatus . ready ,
1816
+ } ) ;
1817
+
1818
+ let fetchMoreResult = await observable . fetchMore ( {
1819
+ variables : { offset : 2 } ,
1820
+ updateQuery : ( prev , { fetchMoreResult } ) => ( {
1821
+ letters : prev . letters . concat ( fetchMoreResult . letters ) ,
1822
+ } ) ,
1823
+ } ) ;
1824
+
1825
+ expect ( fetchMoreResult ) . toEqualApolloQueryResult ( {
1826
+ data : {
1827
+ letters : [
1828
+ { __typename : "Letter" , letter : "C" , position : 3 } ,
1829
+ { __typename : "Letter" , letter : "D" , position : 4 } ,
1830
+ ] ,
1831
+ } ,
1832
+ loading : false ,
1833
+ networkStatus : NetworkStatus . ready ,
1834
+ } ) ;
1835
+
1836
+ await expect ( stream ) . toEmitApolloQueryResult ( {
1837
+ data : {
1838
+ letters : [
1839
+ { __typename : "Letter" , letter : "A" , position : 1 } ,
1840
+ { __typename : "Letter" , letter : "B" , position : 2 } ,
1841
+ ] ,
1842
+ } ,
1843
+ loading : true ,
1844
+ networkStatus : NetworkStatus . fetchMore ,
1845
+ } ) ;
1846
+
1847
+ await expect ( stream ) . toEmitApolloQueryResult ( {
1848
+ data : {
1849
+ letters : [
1850
+ { __typename : "Letter" , letter : "A" , position : 1 } ,
1851
+ { __typename : "Letter" , letter : "B" , position : 2 } ,
1852
+ { __typename : "Letter" , letter : "C" , position : 3 } ,
1853
+ { __typename : "Letter" , letter : "D" , position : 4 } ,
1854
+ ] ,
1855
+ } ,
1856
+ loading : false ,
1857
+ networkStatus : NetworkStatus . ready ,
1858
+ } ) ;
1859
+
1860
+ // Ensure we store the merged result as the last result
1861
+ expect ( observable . getCurrentResult ( false ) ) . toEqualApolloQueryResult ( {
1862
+ data : {
1863
+ letters : [
1864
+ { __typename : "Letter" , letter : "A" , position : 1 } ,
1865
+ { __typename : "Letter" , letter : "B" , position : 2 } ,
1866
+ { __typename : "Letter" , letter : "C" , position : 3 } ,
1867
+ { __typename : "Letter" , letter : "D" , position : 4 } ,
1868
+ ] ,
1869
+ } ,
1870
+ loading : false ,
1871
+ networkStatus : NetworkStatus . ready ,
1872
+ } ) ;
1873
+
1874
+ await expect ( stream ) . not . toEmitAnything ( ) ;
1875
+
1876
+ fetchMoreResult = await observable . fetchMore ( {
1877
+ variables : { offset : 4 } ,
1878
+ updateQuery : ( _ , { fetchMoreResult } ) => fetchMoreResult ,
1879
+ } ) ;
1880
+
1881
+ expect ( fetchMoreResult ) . toEqualApolloQueryResult ( {
1882
+ data : {
1883
+ letters : [
1884
+ { __typename : "Letter" , letter : "E" , position : 5 } ,
1885
+ { __typename : "Letter" , letter : "F" , position : 6 } ,
1886
+ ] ,
1887
+ } ,
1888
+ loading : false ,
1889
+ networkStatus : NetworkStatus . ready ,
1890
+ } ) ;
1891
+
1892
+ await expect ( stream ) . toEmitApolloQueryResult ( {
1893
+ data : {
1894
+ letters : [
1895
+ { __typename : "Letter" , letter : "A" , position : 1 } ,
1896
+ { __typename : "Letter" , letter : "B" , position : 2 } ,
1897
+ { __typename : "Letter" , letter : "C" , position : 3 } ,
1898
+ { __typename : "Letter" , letter : "D" , position : 4 } ,
1899
+ ] ,
1900
+ } ,
1901
+ loading : true ,
1902
+ networkStatus : NetworkStatus . fetchMore ,
1903
+ } ) ;
1904
+
1905
+ await expect ( stream ) . toEmitApolloQueryResult ( {
1906
+ data : {
1907
+ letters : [
1908
+ { __typename : "Letter" , letter : "E" , position : 5 } ,
1909
+ { __typename : "Letter" , letter : "F" , position : 6 } ,
1910
+ ] ,
1911
+ } ,
1912
+ loading : false ,
1913
+ networkStatus : NetworkStatus . ready ,
1914
+ } ) ;
1915
+
1916
+ expect ( observable . getCurrentResult ( false ) ) . toEqualApolloQueryResult ( {
1917
+ data : {
1918
+ letters : [
1919
+ { __typename : "Letter" , letter : "E" , position : 5 } ,
1920
+ { __typename : "Letter" , letter : "F" , position : 6 } ,
1921
+ ] ,
1922
+ } ,
1923
+ loading : false ,
1924
+ networkStatus : NetworkStatus . ready ,
1925
+ } ) ;
1926
+
1927
+ await expect ( stream ) . not . toEmitAnything ( ) ;
1928
+ } ) ;
0 commit comments