Skip to content

Commit

Permalink
test(stitch): add a reproduction for issue #1571
Browse files Browse the repository at this point in the history
  • Loading branch information
alfaproject committed Jun 1, 2020
1 parent ace3f46 commit 49a564d
Showing 1 changed file with 105 additions and 0 deletions.
105 changes: 105 additions & 0 deletions packages/stitch/tests/repro1571.test.ts
@@ -0,0 +1,105 @@
import { linkToExecutor } from '@graphql-tools/links';
import { makeExecutableSchema } from '@graphql-tools/schema';
import { wrapSchema } from '@graphql-tools/wrap';
import { ApolloLink, Observable } from 'apollo-link';
import gql from 'graphql-tag';

import { stitchSchemas } from '../src/stitchSchemas';
import { ExecutionResult, GraphQLError, graphql } from 'graphql';

export const typeDefs = gql`
input LoginInput {
username: String
password: String
}
type LoginPayload {
accessToken: String!
}
type Query {
meh: Boolean
}
type Mutation {
login(input: LoginInput!): LoginPayload!
}
`;

const link = new ApolloLink(operation => {
return new Observable(observer => {
const responses: Record<string, ExecutionResult> = {
'whatever@goodpass': {
data: {
login: {
accessToken: 'at',
},
},
},
'whatever@wrongpass': {
errors: [
({
message: 'INVALID_CREDENTIALS',
path: ['login'],
} as unknown) as GraphQLError,
],
data: null,
},
};

const response = responses[`${operation.variables.username}@${operation.variables.password}`];
if (response) {
observer.next(response);
observer.complete();
} else {
observer.error(new Error('UNEXPECTED_ERROR'));
}
});
});

const authSchema = wrapSchema({
executor: linkToExecutor(link),
schema: makeExecutableSchema({ typeDefs }),
});

const stitchedSchema = stitchSchemas({
subschemas: [{ schema: authSchema }],
});

describe('Repro for issue #1571', () => {
it.each`
username | password | response
${'whatever'} | ${'goodpass'} | ${{
data: {
login: {
accessToken: 'at',
},
},
}}
${'whatever'} | ${'wrongpass'} | ${{
errors: [{
message: 'INVALID_CREDENTIALS',
path: ['login'],
}],
data: null,
}}
`(
'should return the expected response for $username@$password',
async ({ username, password, response }: { username: string; password: string; response: string }) => {
const stitchedResult = await graphql(
stitchedSchema,
`
mutation Login($username: String!, $password: String!) {
login(input: { username: $username, password: $password }) {
accessToken
}
}
`,
undefined,
undefined,
{ username, password },
);
expect(stitchedResult).toEqual(response);
},
);
});

0 comments on commit 49a564d

Please sign in to comment.