Skip to content

Commit

Permalink
test: update mocks
Browse files Browse the repository at this point in the history
  • Loading branch information
Kamil Kisiela committed Jul 16, 2016
1 parent 3143269 commit 129bcd6
Showing 1 changed file with 29 additions and 5 deletions.
34 changes: 29 additions & 5 deletions tests/_mocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,19 @@ import ApolloClient from 'apollo-client';

import {
NetworkInterface,
BatchedNetworkInterface,
Request,
} from 'apollo-client/networkInterface';

import {
GraphQLResult,
Document,
print,
} from 'graphql';

import {
print,
} from 'graphql-tag/printer';

// Pass in multiple mocked responses, so that you can test flows that end up
// making multiple queries to the server
export default function mockNetworkInterface(
Expand All @@ -18,6 +23,12 @@ export default function mockNetworkInterface(
return new MockNetworkInterface(...mockedResponses);
}

export function mockBatchedNetworkInterface(
...mockedResponses: MockedResponse[]
): NetworkInterface {
return new MockBatchedNetworkInterface(...mockedResponses);
}

export interface ParsedRequest {
variables?: Object;
query?: Document;
Expand Down Expand Up @@ -50,7 +61,7 @@ export class MockNetworkInterface implements NetworkInterface {
mockedResponses.push(mockedResponse);
}

public query(request) {
public query(request: Request) {
return new Promise((resolve, reject) => {
const parsedRequest: ParsedRequest = {
query: request.query,
Expand All @@ -59,12 +70,13 @@ export class MockNetworkInterface implements NetworkInterface {
};

const key = requestToKey(parsedRequest);
const responses = this.mockedResponsesByKey[key];

if (!this.mockedResponsesByKey[key]) {
throw new Error('No more mocked responses for the query: ' + request.query);
if (!responses || responses.length === 0) {
throw new Error('No more mocked responses for the query: ' + print(request.query));
}

const { result, error, delay } = this.mockedResponsesByKey[key].shift();
const { result, error, delay } = responses.shift();

if (!result && !error) {
throw new Error(`Mocked response should contain either result or error: ${key}`);
Expand All @@ -81,6 +93,18 @@ export class MockNetworkInterface implements NetworkInterface {
}
}

export class MockBatchedNetworkInterface
extends MockNetworkInterface implements BatchedNetworkInterface {
public batchQuery(requests: Request[]): Promise<GraphQLResult[]> {
const resultPromises: Promise<GraphQLResult>[] = [];
requests.forEach((request) => {
resultPromises.push(this.query(request));
});

return Promise.all(resultPromises);
}
}

function requestToKey(request: ParsedRequest): string {
const queryString = request.query && print(request.query);

Expand Down

0 comments on commit 129bcd6

Please sign in to comment.