Skip to content

Commit

Permalink
Adapt refetchQueries tests for options.reobserveQuery.
Browse files Browse the repository at this point in the history
  • Loading branch information
benjamn committed Mar 25, 2021
1 parent 92e81e2 commit 77eec37
Showing 1 changed file with 201 additions and 0 deletions.
201 changes: 201 additions & 0 deletions src/core/__tests__/QueryManager/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5168,6 +5168,207 @@ describe('QueryManager', () => {
});
});

describe('reobserveQuery', () => {
const mutation = gql`
mutation changeAuthorName {
changeAuthorName(newName: "Jack Smith") {
firstName
lastName
}
}
`;

const mutationData = {
changeAuthorName: {
firstName: 'Jack',
lastName: 'Smith',
},
};

const query = gql`
query getAuthors($id: ID!) {
author(id: $id) {
firstName
lastName
}
}
`;

const data = {
author: {
firstName: 'John',
lastName: 'Smith',
},
};

const secondReqData = {
author: {
firstName: 'Jane',
lastName: 'Johnson',
},
};

const variables = { id: '1234' };

function makeQueryManager(reject: (reason?: any) => void) {
return mockQueryManager(
reject,
{
request: { query, variables },
result: { data },
},
{
request: { query, variables },
result: { data: secondReqData },
},
{
request: { query: mutation },
result: { data: mutationData },
},
);
}

itAsync('should refetch the right query when a result is successfully returned', (resolve, reject) => {
const queryManager = makeQueryManager(reject);

const observable = queryManager.watchQuery<any>({
query,
variables,
notifyOnNetworkStatusChange: false,
});

return observableToPromise(
{ observable },
result => {
expect(stripSymbols(result.data)).toEqual(data);

queryManager.mutate({
mutation,

update(cache) {
cache.modify({
fields: {
author(_, { INVALIDATE }) {
return INVALIDATE;
},
},
});
},

reobserveQuery(obsQuery) {
expect(obsQuery.options.query).toBe(query);
return obsQuery.refetch();
},
});
},

result => {
expect(stripSymbols(observable.getCurrentResult().data)).toEqual(
secondReqData,
);
expect(stripSymbols(result.data)).toEqual(secondReqData);
},
).then(resolve, reject);
});

itAsync('should refetch using the original query context (if any)', (resolve, reject) => {
const queryManager = makeQueryManager(reject);

const headers = {
someHeader: 'some value',
};

const observable = queryManager.watchQuery<any>({
query,
variables,
context: {
headers,
},
notifyOnNetworkStatusChange: false,
});

return observableToPromise(
{ observable },
result => {
expect(result.data).toEqual(data);

queryManager.mutate({
mutation,

update(cache) {
cache.modify({
fields: {
author(_, { INVALIDATE }) {
return INVALIDATE;
},
},
});
},

reobserveQuery(obsQuery) {
expect(obsQuery.options.query).toBe(query);
return obsQuery.refetch();
},
});
},

result => {
expect(result.data).toEqual(secondReqData);
const context = (queryManager.link as MockApolloLink).operation!.getContext();
expect(context.headers).not.toBeUndefined();
expect(context.headers.someHeader).toEqual(headers.someHeader);
},
).then(resolve, reject);
});

itAsync('should refetch using the specified context, if provided', (resolve, reject) => {
const queryManager = makeQueryManager(reject);

const observable = queryManager.watchQuery<any>({
query,
variables,
notifyOnNetworkStatusChange: false,
});

const headers = {
someHeader: 'some value',
};

return observableToPromise(
{ observable },
result => {
expect(result.data).toEqual(data);

queryManager.mutate({
mutation,

update(cache) {
cache.evict({ fieldName: "author" });
},

reobserveQuery(obsQuery) {
expect(obsQuery.options.query).toBe(query);
return obsQuery.reobserve({
fetchPolicy: "network-only",
context: {
...obsQuery.options.context,
headers,
},
});
},
});
},

result => {
expect(result.data).toEqual(secondReqData);
const context = (queryManager.link as MockApolloLink).operation!.getContext();
expect(context.headers).not.toBeUndefined();
expect(context.headers.someHeader).toEqual(headers.someHeader);
},
).then(resolve, reject);
});
});

describe('awaitRefetchQueries', () => {
const awaitRefetchTest =
({ awaitRefetchQueries, testQueryError = false }: MutationBaseOptions & { testQueryError?: boolean }) =>
Expand Down

0 comments on commit 77eec37

Please sign in to comment.