@@ -911,6 +911,113 @@ it('allows a refetchQueries prop', done => {
911911 ) ;
912912} ) ;
913913
914+ it ( 'allows a refetchQueries prop as string and variables have updated' , done => {
915+ const query = gql `
916+ query people($first: Int) {
917+ allPeople(first: $first) {
918+ people {
919+ name
920+ }
921+ }
922+ }
923+ ` ;
924+
925+ const peopleData1 = {
926+ allPeople : { people : [ { name : 'Luke Skywalker' , __typename : 'Person' } ] , __typename : 'People' } ,
927+ } ;
928+ const peopleData2 = {
929+ allPeople : { people : [ { name : 'Han Solo' , __typename : 'Person' } ] , __typename : 'People' } ,
930+ } ;
931+ const peopleData3 = {
932+ allPeople : { people : [ { name : 'Lord Vader' , __typename : 'Person' } ] , __typename : 'People' } ,
933+ } ;
934+ const peopleMocks = [
935+ ...mocks ,
936+ {
937+ request : { query, variables : { first : 1 } } ,
938+ result : { data : peopleData1 } ,
939+ } ,
940+ {
941+ request : { query, variables : { first : 2 } } ,
942+ result : { data : peopleData2 } ,
943+ } ,
944+ {
945+ request : { query, variables : { first : 2 } } ,
946+ result : { data : peopleData3 } ,
947+ } ,
948+ ] ;
949+
950+ const refetchQueries = [ 'people' ] ;
951+
952+ let count = 0 ;
953+ class Component extends React . Component {
954+ state = {
955+ variables : {
956+ first : 1 ,
957+ } ,
958+ } ;
959+ componentDidMount ( ) {
960+ setTimeout ( ( ) => {
961+ this . setState ( {
962+ variables : {
963+ first : 2 ,
964+ } ,
965+ } ) ;
966+ } , 50 ) ;
967+ }
968+ render ( ) {
969+ const { variables } = this . state ;
970+
971+ return (
972+ < Mutation mutation = { mutation } refetchQueries = { refetchQueries } >
973+ { ( createTodo , resultMutation ) => (
974+ < Query query = { query } variables = { variables } >
975+ { resultQuery => {
976+ if ( count === 0 ) {
977+ // initial loading
978+ expect ( resultQuery . loading ) . toBe ( true ) ;
979+ } else if ( count === 1 ) {
980+ // initial loaded
981+ expect ( resultQuery . loading ) . toBe ( false ) ;
982+ } else if ( count === 2 ) {
983+ // first: 2 loading
984+ expect ( resultQuery . loading ) . toBe ( true ) ;
985+ } else if ( count === 3 ) {
986+ // first: 2 loaded
987+ expect ( resultQuery . loading ) . toBe ( false ) ;
988+ setTimeout ( ( ) => {
989+ createTodo ( ) ;
990+ } ) ;
991+ } else if ( count === 4 ) {
992+ // mutation loading
993+ expect ( resultMutation . loading ) . toBe ( true ) ;
994+ } else if ( count === 5 ) {
995+ // mutation loaded
996+ expect ( resultMutation . loading ) . toBe ( false ) ;
997+ } else if ( count === 6 ) {
998+ // query refetched
999+ expect ( resultQuery . loading ) . toBe ( false ) ;
1000+ expect ( resultMutation . loading ) . toBe ( false ) ;
1001+ expect ( stripSymbols ( resultQuery . data ) ) . toEqual ( peopleData3 ) ;
1002+ done ( ) ;
1003+ }
1004+ count ++ ;
1005+ return null ;
1006+ } }
1007+ </ Query >
1008+ ) }
1009+ </ Mutation >
1010+ ) ;
1011+ }
1012+ }
1013+
1014+ mount (
1015+ < MockedProvider mocks = { peopleMocks } >
1016+ < Component />
1017+ </ MockedProvider > ,
1018+ ) ;
1019+ } ) ;
1020+
9141021it ( 'allows refetchQueries to be passed to the mutate function' , done => {
9151022 const query = gql `
9161023 query getTodo {
0 commit comments