示例#1
0
  it('should get the correct mutation definition out of a mutation with multiple fragments', () => {
    const mutationWithFragments = gql`
      mutation {
        createAuthor(firstName: "John", lastName: "Smith") {
          ...authorDetails
        }
      }

      fragment authorDetails on Author {
        firstName
        lastName
      }
    `;
    const expectedDoc = gql`
      mutation {
        createAuthor(firstName: "John", lastName: "Smith") {
          ...authorDetails
        }
      }
    `;
    const expectedResult: OperationDefinitionNode = expectedDoc
      .definitions[0] as OperationDefinitionNode;
    const actualResult = getMutationDefinition(mutationWithFragments);
    assert.equal(print(actualResult), print(expectedResult));
  });
示例#2
0
  it('should get fragment definitions from a document containing a single fragment', () => {
    const singleFragmentDefinition = gql`
      query {
        author {
          ...authorDetails
        }
      }

      fragment authorDetails on Author {
        firstName
        lastName
      }
    `;
    const expectedDoc = gql`
      fragment authorDetails on Author {
        firstName
        lastName
      }
    `;
    const expectedResult: FragmentDefinitionNode[] = [
      expectedDoc.definitions[0] as FragmentDefinitionNode,
    ];
    const actualResult = getFragmentDefinitions(singleFragmentDefinition);
    assert.equal(actualResult.length, expectedResult.length);
    assert.equal(print(actualResult[0]), print(expectedResult[0]));
  });
示例#3
0
  it('should modify all definitions in a document', () => {
    const testQuery = gql`
    query withFragments {
      user(id: 4) {
        friends(first: 10) {
          ...friendFields
        }
      }
    }
    fragment friendFields on User {
      firstName
      lastName
    }`;

    const newQueryDoc = addTypenameToDocument(testQuery);

    const expectedQuery = gql`
    query withFragments {
      user(id: 4) {
        friends(first: 10) {
          ...friendFields
          __typename
        }
        __typename
      }
    }
    fragment friendFields on User {
      firstName
      lastName
      __typename
    }`;

    assert.equal(print(expectedQuery), print(newQueryDoc));
  });
示例#4
0
  it('should correctly add typenames', () => {
    let testQuery = gql`
      query {
        author {
          name {
            firstName
            lastName
          }
        }
      }
    `;
    const newQueryDoc = addTypenameToDocument(testQuery);

    const expectedQuery = gql`
      query {
        author {
          name {
            firstName
            lastName
            __typename
          }
          __typename
        }
      }
    `;
    const expectedQueryStr = print(expectedQuery);

    assert.equal(expectedQueryStr, print(newQueryDoc));
  });
示例#5
0
 it('should not screw up on a FragmentSpread within the query AST', () => {
   const testQuery = gql`
     query withFragments {
       user(id: 4) {
         friends(first: 10) {
           ...friendFields
         }
       }
     }
   `;
   const expectedQuery = getQueryDefinition(gql`
     query withFragments {
       user(id: 4) {
         friends(first: 10) {
           ...friendFields
           __typename
         }
         __typename
       }
     }
   `);
   const modifiedQuery = addTypenameToDocument(testQuery);
   assert.equal(
     print(expectedQuery),
     print(getQueryDefinition(modifiedQuery)),
   );
 });
  it('should correctly add typenames', () => {
    let testQuery = gql`
      query {
        author {
          name {
            firstName
            lastName
          }
        }
      }
`;
    const queryDef = getQueryDefinition(testQuery);
    const queryRes = addTypenameToSelectionSet(queryDef.selectionSet);

    // GraphQL print the parsed, updated query and replace the trailing
    // newlines.
    const modifiedQueryStr = print(queryRes);
    const expectedQuery = getQueryDefinition(gql`
      query {
        author {
          name {
            firstName
            lastName
            __typename
          }
          __typename
        }
        __typename}`);
    const expectedQueryStr = print(expectedQuery);

    assert.equal(expectedQueryStr, modifiedQueryStr);
  });
示例#7
0
  it('should get query with client fields in fragment with nested fields', function() {
    const query = gql`
      query Simple {
        ...fragmentSpread
      }

      fragment fragmentSpread on Thing {
        user {
          firstName @client
          lastName
        }
      }
    `;
    const expected = gql`
      query Simple {
        ...fragmentSpread
      }

      fragment fragmentSpread on Thing {
        user {
          firstName @client
        }
      }
    `;
    const doc = getDirectivesFromDocument([{ name: 'client' }], query);
    expect(print(doc)).toBe(print(expected));
  });
示例#8
0
  it('should get query with different types of directive matchers ', () => {
    const query = gql`
      query Simple {
        maybe @skip(if: false)
        field @storage(if: true)
        user @client
      }
    `;

    const expected = gql`
      query Simple {
        field @storage(if: true)
        user @client
      }
    `;
    const doc = getDirectivesFromDocument(
      [
        { name: 'storage' },
        { test: directive => directive.name.value === 'client' },
      ],
      query,
    );

    expect(print(doc)).toBe(print(expected));
  });
示例#9
0
  it('should not add duplicates', () => {
    let testQuery = gql`
      query {
        author {
          name {
            firstName
            lastName
            __typename
          }
        }
      }
    `;
    const newQueryDoc = addTypenameToDocument(testQuery);

    const expectedQuery = gql`
      query {
        author {
          name {
            firstName
            lastName
            __typename
          }
          __typename
        }
      }
    `;
    const expectedQueryStr = print(expectedQuery);

    expect(print(newQueryDoc)).toBe(expectedQueryStr);
  });
示例#10
0
  it('should remove fragment spreads and definitions associated with the removed directive', () => {
    const query = gql`
      query Simple {
        networkField
        field @client {
          ...ClientFragment
        }
      }

      fragment ClientFragment on Thing {
        otherField
        bar
      }
    `;

    const expected = gql`
      query Simple {
        networkField
      }
    `;

    const doc = removeDirectivesFromDocument(
      [{ name: 'client', remove: true }],
      query,
    );
    expect(print(doc)).toBe(print(expected));
  });