diff --git a/src/react/components/__tests__/client/Query.test.tsx b/src/react/components/__tests__/client/Query.test.tsx index b69b00f9f3a..84279dfed7f 100644 --- a/src/react/components/__tests__/client/Query.test.tsx +++ b/src/react/components/__tests__/client/Query.test.tsx @@ -1273,10 +1273,23 @@ describe('Query component', () => { return ( {(result: any) => { - if (result.loading && count === 2) { - expect(stripSymbols(result.data)).toEqual(data1); + if (count === 0) { + expect(result.loading).toBe(true); + expect(result.data).toBeUndefined(); + expect(result.networkStatus).toBe(NetworkStatus.loading); + } else if (count === 1) { + expect(result.loading).toBe(false); + expect(result.data).toEqual(data1); + expect(result.networkStatus).toBe(NetworkStatus.ready); + } else if (count === 2) { + expect(result.loading).toBe(true); + expect(result.data).toBeUndefined(); + expect(result.networkStatus).toBe(NetworkStatus.setVariables); + } else if (count === 3) { + expect(result.loading).toBe(false); + expect(result.data).toEqual(data2); + expect(result.networkStatus).toBe(NetworkStatus.ready); } - count++; return null; }} diff --git a/src/react/data/QueryData.ts b/src/react/data/QueryData.ts index a11637c96b0..86d132e2205 100644 --- a/src/react/data/QueryData.ts +++ b/src/react/data/QueryData.ts @@ -350,8 +350,8 @@ export class QueryData extends OperationData { } else if (this.currentObservable) { // Fetch the current result (if any) from the store. const currentResult = this.currentObservable.getCurrentResult(); - const { loading, partial, networkStatus, errors } = currentResult; - let { error, data } = currentResult; + const { data, loading, partial, networkStatus, errors } = currentResult; + let { error } = currentResult; // Until a set naming convention for networkError and graphQLErrors is // decided upon, we map errors (graphQLErrors) to the error options. @@ -361,6 +361,7 @@ export class QueryData extends OperationData { result = { ...result, + data, loading, networkStatus, error, @@ -368,15 +369,7 @@ export class QueryData extends OperationData { }; if (loading) { - const previousData = - this.previousData.result && this.previousData.result.data; - result.data = - previousData && data - ? { - ...previousData, - ...data - } - : previousData || data; + // Fall through without modifying result... } else if (error) { Object.assign(result, { data: (this.currentObservable.getLastResult() || ({} as any)) @@ -406,8 +399,6 @@ export class QueryData extends OperationData { result.refetch(); return result; } - - result.data = data; } } diff --git a/src/react/hoc/__tests__/queries/lifecycle.test.tsx b/src/react/hoc/__tests__/queries/lifecycle.test.tsx index 3377cea8a5b..e3ce07dbff7 100644 --- a/src/react/hoc/__tests__/queries/lifecycle.test.tsx +++ b/src/react/hoc/__tests__/queries/lifecycle.test.tsx @@ -7,7 +7,6 @@ import { ApolloClient } from '../../../../ApolloClient'; import { ApolloProvider } from '../../../context/ApolloProvider'; import { InMemoryCache as Cache } from '../../../../cache/inmemory/inMemoryCache'; import { mockSingleLink } from '../../../../utilities/testing/mocking/mockLink'; -import { stripSymbols } from '../../../../utilities/testing/stripSymbols'; import { Query as QueryComponent } from '../../../components/Query'; import { graphql } from '../../graphql'; import { ChildProps } from '../../types'; @@ -56,12 +55,14 @@ describe('[queries] lifecycle', () => { componentDidUpdate(prevProps: ChildProps) { const { data } = this.props; // loading is true, but data still there - if (count === 1 && data!.loading) { - expect(stripSymbols(data!.allPeople)).toEqual(data1.allPeople); - } - if (count === 1 && !data!.loading && prevProps.data!.loading) { - expect(stripSymbols(data!.allPeople)).toEqual(data2.allPeople); - done = true; + if (count === 1) { + if (data!.loading) { + expect(data!.allPeople).toBeUndefined(); + } else { + expect(prevProps.data!.loading).toBe(true); + expect(data!.allPeople).toEqual(data2.allPeople); + done = true; + } } } render() { @@ -197,12 +198,14 @@ describe('[queries] lifecycle', () => { componentDidUpdate(prevProps: ChildProps) { const { data } = this.props; // loading is true, but data still there - if (count === 1 && data!.loading) { - expect(stripSymbols(data!.allPeople)).toEqual(data1.allPeople); - } - if (count === 1 && !data!.loading && prevProps.data!.loading) { - expect(stripSymbols(data!.allPeople)).toEqual(data2.allPeople); - done = true; + if (count === 1) { + if (data!.loading) { + expect(data!.allPeople).toBeUndefined(); + } else { + expect(prevProps.data!.loading).toBe(true); + expect(data!.allPeople).toEqual(data2.allPeople); + done = true; + } } } render() { @@ -272,12 +275,14 @@ describe('[queries] lifecycle', () => { componentDidUpdate(prevProps: ChildProps) { const { data } = this.props; // loading is true, but data still there - if (count === 1 && data!.loading) { - expect(stripSymbols(data!.allPeople)).toEqual(data1.allPeople); - } - if (count === 1 && !data!.loading && prevProps.data!.loading) { - expect(stripSymbols(data!.allPeople)).toEqual(data2.allPeople); - done = true; + if (count === 1) { + if (data!.loading) { + expect(data!.allPeople).toBeUndefined(); + } else { + expect(prevProps.data!.loading).toBe(true); + expect(data!.allPeople).toEqual(data2.allPeople); + done = true; + } } } render() { @@ -352,21 +357,21 @@ describe('[queries] lifecycle', () => { if (count === 1) { expect(props.foo).toEqual(42); expect(props.data!.loading).toEqual(false); - expect(stripSymbols(props.data!.allPeople)).toEqual( + expect(props.data!.allPeople).toEqual( data1.allPeople ); props.changeState(); } else if (count === 2) { expect(props.foo).toEqual(43); expect(props.data!.loading).toEqual(false); - expect(stripSymbols(props.data!.allPeople)).toEqual( + expect(props.data!.allPeople).toEqual( data1.allPeople ); props.data!.refetch(); } else if (count === 3) { expect(props.foo).toEqual(43); expect(props.data!.loading).toEqual(false); - expect(stripSymbols(props.data!.allPeople)).toEqual( + expect(props.data!.allPeople).toEqual( data2.allPeople ); } diff --git a/src/react/hoc/__tests__/queries/loading.test.tsx b/src/react/hoc/__tests__/queries/loading.test.tsx index 33e802b505b..f06e7650ffb 100644 --- a/src/react/hoc/__tests__/queries/loading.test.tsx +++ b/src/react/hoc/__tests__/queries/loading.test.tsx @@ -7,7 +7,6 @@ import { ApolloClient } from '../../../../ApolloClient'; import { ApolloProvider } from '../../../context/ApolloProvider'; import { InMemoryCache as Cache } from '../../../../cache/inmemory/inMemoryCache'; import { mockSingleLink } from '../../../../utilities/testing/mocking/mockLink'; -import { stripSymbols } from '../../../../utilities/testing/stripSymbols'; import { graphql } from '../../graphql'; import { ChildProps } from '../../types'; import { itAsync } from '../../../../utilities/testing/itAsync'; @@ -185,15 +184,16 @@ describe('[queries] loading', () => { componentDidUpdate(prevProps: ChildProps) { const { data } = this.props; // variables changed, new query is loading, but old data is still there - if (count === 1 && data!.loading) { - expect(data!.networkStatus).toBe(2); - expect(stripSymbols(data!.allPeople)).toEqual(data1.allPeople); - } - // query with new variables is loaded - if (count === 1 && !data!.loading && prevProps.data!.loading) { - expect(data!.networkStatus).toBe(7); - expect(stripSymbols(data!.allPeople)).toEqual(data2.allPeople); - done = true; + if (count === 1) { + if (data!.loading) { + expect(data!.networkStatus).toBe(2); + expect(data!.allPeople).toBeUndefined(); + } else { + expect(prevProps.data!.loading).toBe(true); + expect(data!.networkStatus).toBe(7); + expect(data!.allPeople).toEqual(data2.allPeople); + done = true; + } } } render() { @@ -268,12 +268,12 @@ describe('[queries] loading', () => { case 1: expect(data!.loading).toBeTruthy(); expect(data!.networkStatus).toBe(4); - expect(stripSymbols(data!.allPeople)).toEqual(data!.allPeople); + expect(data!.allPeople).toEqual(data!.allPeople); break; case 2: expect(data!.loading).toBeFalsy(); expect(data!.networkStatus).toBe(7); - expect(stripSymbols(data!.allPeople)).toEqual(data2.allPeople); + expect(data!.allPeople).toEqual(data2.allPeople); break; default: reject(new Error('Too many props updates'));