From b4cd8fda9fee99d98e5c0636a740d7290a5184e6 Mon Sep 17 00:00:00 2001 From: Jenn Creighton Date: Fri, 12 Mar 2021 16:13:44 -0500 Subject: [PATCH] Add test for no-cache fetchPolicy + notifyOnNetworkStatusChange + watchQuery --- src/core/__tests__/fetchPolicies.ts | 100 ++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/src/core/__tests__/fetchPolicies.ts b/src/core/__tests__/fetchPolicies.ts index 3c3106dc2a6..f05b56cfe3d 100644 --- a/src/core/__tests__/fetchPolicies.ts +++ b/src/core/__tests__/fetchPolicies.ts @@ -380,6 +380,106 @@ describe('no-cache', () => { })) .then(resolve, reject); }); + + itAsync('gives appropriate networkStatus for watched queries', (resolve, reject) => { + const client = new ApolloClient({ + link: ApolloLink.empty(), + cache: new InMemoryCache(), + resolvers: { + Query: { + hero(_data, args) { + return { + __typename: 'Hero', + ...args, + name: 'Luke Skywalker', + }; + }, + }, + }, + }); + + const observable = client.watchQuery({ + query: gql` + query FetchLuke($id: String) { + hero(id: $id) @client { + id + name + } + } + `, + fetchPolicy: 'no-cache', + variables: { id: '1' }, + notifyOnNetworkStatusChange: true, + }); + + function dataWithId(id: number | string) { + return { + hero: { + __typename: 'Hero', + id: String(id), + name: 'Luke Skywalker', + }, + }; + } + + subscribeAndCount(reject, observable, (count, result) => { + if (count === 1) { + expect(result).toEqual({ + data: dataWithId(1), + loading: false, + networkStatus: NetworkStatus.ready, + }); + expect(client.cache.extract(true)).toEqual({}); + return observable.setVariables({ id: '2' }); + } else if (count === 2) { + expect(result).toEqual({ + data: {}, + loading: true, + networkStatus: NetworkStatus.setVariables, + partial: true, + }); + } else if (count === 3) { + expect(result).toEqual({ + data: dataWithId(2), + loading: false, + networkStatus: NetworkStatus.ready, + }); + expect(client.cache.extract(true)).toEqual({}); + return observable.refetch(); + } else if (count === 4) { + expect(result).toEqual({ + data: dataWithId(2), + loading: true, + networkStatus: NetworkStatus.refetch, + }); + expect(client.cache.extract(true)).toEqual({}); + } else if (count === 5) { + expect(result).toEqual({ + data: dataWithId(2), + loading: false, + networkStatus: NetworkStatus.ready, + }); + expect(client.cache.extract(true)).toEqual({}); + return observable.refetch({ id: '3' }); + } else if (count === 6) { + expect(result).toEqual({ + data: {}, + loading: true, + networkStatus: NetworkStatus.setVariables, + partial: true, + }); + expect(client.cache.extract(true)).toEqual({}); + } else if (count === 7) { + expect(result).toEqual({ + data: dataWithId(3), + loading: false, + networkStatus: NetworkStatus.ready, + }); + expect(client.cache.extract(true)).toEqual({}); + resolve(); + } + }); + }); }); });