@@ -22,7 +22,7 @@ import {
2222} from "../cache" ;
2323
2424import { MockedResponse , mockSingleLink } from "../testing" ;
25- import { ObservableStream } from "../testing/internal" ;
25+ import { ObservableStream , setupPaginatedCase } from "../testing/internal" ;
2626
2727describe ( "updateQuery on a simple query" , ( ) => {
2828 const query = gql `
@@ -1789,3 +1789,140 @@ describe("fetchMore on an observable query with connection", () => {
17891789 } ) ;
17901790 } ) ;
17911791} ) ;
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