Skip to content

Commit

Permalink
added test to make sure that queries are transformed even on forceFet…
Browse files Browse the repository at this point in the history
…ch=true
  • Loading branch information
Poincare committed May 24, 2016
1 parent 293d0a1 commit 2a5ddd2
Show file tree
Hide file tree
Showing 3 changed files with 128 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/QueryManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ export class QueryManager {
if (this.queryTransformer) {
queryDef = applyTransformerToOperation(queryDef, this.queryTransformer);
}
const queryString = print(query);
const queryString = print(queryDef);

// Parse the query passed in -- this could also be done by a build plugin or tagged
// template string
Expand Down
56 changes: 55 additions & 1 deletion test/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ import {
HTTPNetworkInterface,
} from '../src/networkInterface';

import { getQueryDefinition } from '../src/queries/getFromAST';

import { addTypenameToSelectionSet } from '../src/queries/queryTransform';

import mockNetworkInterface from './mocks/mockNetworkInterface';
Expand Down Expand Up @@ -300,7 +302,7 @@ describe('client', () => {
apollo: {
queries: {
'0': {
queryString: print(query),
queryString: print(getQueryDefinition(query)),
query: {
id: 'ROOT_QUERY',
typeName: 'Query',
Expand Down Expand Up @@ -519,6 +521,58 @@ describe('client', () => {
});
});

it('should be able to transform queries on forced fetches', (done) => {
const query = gql`
query {
author {
firstName
lastName
}
}`;
const transformedQuery = gql`
query {
author {
firstName
lastName
__typename
}
__typename
}`;
const result = {
'author': {
'firstName': 'John',
'lastName': 'Smith',
},
};
const transformedResult = {
'author': {
'firstName': 'John',
'lastName': 'Smith',
'__typename': 'Author',
},
'__typename': 'RootQuery',
};
const networkInterface = mockNetworkInterface(
{
request: { query },
result: { data: result },
},
{
request: { query: transformedQuery },
result: { data: transformedResult },
});

const client = new ApolloClient({
networkInterface,
queryTransformer: addTypenameToSelectionSet,
});
client.query({ forceFetch: true, query }).then((actualResult) => {
assert.deepEqual(actualResult.data, transformedResult);
done();
});

});

describe('accepts dataIdFromObject option', () => {
const query = gql`
query people {
Expand Down
72 changes: 72 additions & 0 deletions test/queryTransform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,4 +145,76 @@ describe('query transforms', () => {
assert.equal(print(expectedQuery), print(modifiedQuery));

});

it('should add typename fields correctly on this one query' , () => {
const testQuery = getQueryDefinition(gql`
query Feed($type: FeedType!) {
# Eventually move this into a no fetch query right on the entry
# since we literally just need this info to determine whether to
# show upvote/downvote buttons
currentUser {
login
}
feed(type: $type) {
createdAt
score
commentCount
id
postedBy {
login
html_url
}
repository {
name
full_name
description
html_url
stargazers_count
open_issues_count
created_at
owner {
avatar_url
}
}
}
}`);
const expectedQuery = getQueryDefinition(gql`
query Feed($type: FeedType!) {
currentUser {
login
__typename
}
feed(type: $type) {
createdAt
score
commentCount
id
postedBy {
login
html_url
__typename
}
repository {
name
full_name
description
html_url
stargazers_count
open_issues_count
created_at
owner {
avatar_url
__typename
}
__typename
}
__typename
}
__typename
}`);
const modifiedQuery = applyTransformerToOperation(testQuery, addTypenameToSelectionSet);
assert.equal(print(expectedQuery), print(modifiedQuery));
});
});

0 comments on commit 2a5ddd2

Please sign in to comment.