From cfd712f5e03c5196e807c541ef98cef9a9ed8b65 Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Wed, 15 Mar 2017 15:36:01 +0100 Subject: [PATCH] Support v1.0.0-rc.2 of apollo-client --- CHANGELOG.md | 2 + package.json | 32 ++--- tests/fixtures/heroes.ts | 3 +- tests/index.ts | 2 +- tests/mocks/mockNetworkInterface.ts | 210 ---------------------------- 5 files changed, 20 insertions(+), 229 deletions(-) delete mode 100644 tests/mocks/mockNetworkInterface.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index db7df0c..cc174aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### vNEXT +- Support `v1.0.0-rc.2` of `apollo-client` [PR #39](https://github.com/kamilkisiela/apollo-client-rxjs/pull/39) + ### v0.5.1 - Remove `lodash` completely [PR #34](https://github.com/kamilkisiela/apollo-client-rxjs/pull/34) diff --git a/package.json b/package.json index aa76728..9762847 100644 --- a/package.json +++ b/package.json @@ -42,29 +42,29 @@ "prepublish": "npm run clean && npm run build" }, "peerDependencies": { - "apollo-client": "^0.7.2 || ^0.8.0", + "apollo-client": ">=0.7.2 <=0.10.1 || >=1.0.0-beta <2.0.0", "rxjs": "^5.0.0-beta.12 || ^5.0.0-rc.1 || ^5.0.0" }, "devDependencies": { - "@types/chai": "^3.4.32", - "@types/isomorphic-fetch": "0.0.30", - "@types/mocha": "^2.2.31", + "@types/chai": "^3.4.35", + "@types/mocha": "^2.2.40", "@types/node": "^6.0.38", - "@types/sinon": "^1.16.29", - "apollo-client": "^0.8.0", + "@types/sinon": "^1.16.35", + "apollo-client": "^1.0.0-rc.2", + "apollo-test-utils": "^0.2.0", "chai": "^3.5.0", - "graphql": "^0.8.2", - "graphql-tag": "^1.1.2", + "graphql": "^0.9.1", + "graphql-tag": "^1.3.1", "isomorphic-fetch": "^2.2.1", "istanbul": "^0.4.5", "mocha": "^3.2.0", - "remap-istanbul": "^0.8.2", - "rimraf": "^2.5.4", - "rollup": "^0.37.0", - "rxjs": "^5.0.3", - "sinon": "^1.17.5", - "source-map-support": "^0.4.6", - "tslint": "^4.1.1", - "typescript": "^2.1.0" + "remap-istanbul": "^0.9.1", + "rimraf": "^2.6.1", + "rollup": "^0.41.5", + "rxjs": "^5.2.0", + "sinon": "^2.0.0", + "source-map-support": "^0.4.12", + "tslint": "^4.5.1", + "typescript": "^2.2.1" } } diff --git a/tests/fixtures/heroes.ts b/tests/fixtures/heroes.ts index bdf17b3..9142c1a 100644 --- a/tests/fixtures/heroes.ts +++ b/tests/fixtures/heroes.ts @@ -1,13 +1,12 @@ import { DocumentNode } from 'graphql'; import { ApolloClient, ObservableQuery } from 'apollo-client'; +import { mockNetworkInterface } from 'apollo-test-utils'; import { RxObservableQuery } from '../../src/RxObservableQuery'; import { RxApolloClient } from '../../src/RxApolloClient'; import gql from 'graphql-tag'; -import mockNetworkInterface from '../mocks/mockNetworkInterface'; - // data export interface Hero { diff --git a/tests/index.ts b/tests/index.ts index b4447f8..135517a 100644 --- a/tests/index.ts +++ b/tests/index.ts @@ -1,6 +1,6 @@ import 'isomorphic-fetch'; -// tslint:disable-next-line:no-var-requires +// tslint:disable-next-line:no-var-requires require('source-map-support').install(); import './utils'; diff --git a/tests/mocks/mockNetworkInterface.ts b/tests/mocks/mockNetworkInterface.ts deleted file mode 100644 index e2a4dbd..0000000 --- a/tests/mocks/mockNetworkInterface.ts +++ /dev/null @@ -1,210 +0,0 @@ -import { - NetworkInterface, - Request, -} from 'apollo-client'; - -import { - BatchedNetworkInterface, - SubscriptionNetworkInterface, -} from 'apollo-client/transport/networkInterface'; - -import { - ExecutionResult, - DocumentNode, -} 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( - ...mockedResponses: MockedResponse[] -): NetworkInterface { - return new MockNetworkInterface(mockedResponses); -} - -export function mockSubscriptionNetworkInterface( - mockedSubscriptions: MockedSubscription[], ...mockedResponses: MockedResponse[] -): MockSubscriptionNetworkInterface { - return new MockSubscriptionNetworkInterface(mockedSubscriptions, mockedResponses); -} - -export function mockBatchedNetworkInterface( - ...mockedResponses: MockedResponse[] -): BatchedNetworkInterface { - return new MockBatchedNetworkInterface(mockedResponses); -} - -export interface ParsedRequest { - variables?: Object; - query?: DocumentNode; - debugName?: string; -} - -export interface MockedResponse { - request: ParsedRequest; - result?: ExecutionResult; - error?: Error; - delay?: number; -} - -export interface MockedSubscriptionResult { - result?: ExecutionResult; - error?: Error; - delay?: number; -} - -export interface MockedSubscription { - request: ParsedRequest; - results?: MockedSubscriptionResult[]; - id?: number; -} - -export class MockNetworkInterface implements NetworkInterface { - private mockedResponsesByKey: { [key: string]: MockedResponse[] } = {}; - - constructor(mockedResponses: MockedResponse[]) { - mockedResponses.forEach((mockedResponse) => { - this.addMockedResponse(mockedResponse); - }); - } - - public addMockedResponse(mockedResponse: MockedResponse) { - const key = requestToKey(mockedResponse.request); - let mockedResponses = this.mockedResponsesByKey[key]; - if (!mockedResponses) { - mockedResponses = []; - this.mockedResponsesByKey[key] = mockedResponses; - } - mockedResponses.push(mockedResponse); - } - - public query(request: Request) { - return new Promise((resolve, reject) => { - const parsedRequest: ParsedRequest = { - query: request.query, - variables: request.variables, - debugName: request.debugName, - }; - - const key = requestToKey(parsedRequest); - const responses = this.mockedResponsesByKey[key]; - if (!responses || responses.length === 0) { - throw new Error(`No more mocked responses for the query: ${print(request.query)}, variables: ${JSON.stringify(request.variables)}`); - } - - const { result, error, delay } = responses.shift(); - - if (!result && !error) { - throw new Error(`Mocked response should contain either result or error: ${key}`); - } - - setTimeout(() => { - if (error) { - reject(error); - } else { - resolve(result); - } - }, delay ? delay : 0); - }); - } -} - -export class MockSubscriptionNetworkInterface extends MockNetworkInterface implements SubscriptionNetworkInterface { - public mockedSubscriptionsByKey: { [key: string ]: MockedSubscription[] } = {}; - public mockedSubscriptionsById: { [id: number]: MockedSubscription} = {}; - public handlersById: {[id: number]: (error: any, result: any) => void} = {}; - public subId: number; - - constructor(mockedSubscriptions: MockedSubscription[], mockedResponses: MockedResponse[]) { - super(mockedResponses); - this.subId = 0; - mockedSubscriptions.forEach((sub) => { - this.addMockedSubscription(sub); - }); - } - public generateSubscriptionId() { - const requestId = this.subId; - this.subId++; - return requestId; - } - - public addMockedSubscription(mockedSubscription: MockedSubscription) { - const key = requestToKey(mockedSubscription.request); - if (mockedSubscription.id === undefined) { - mockedSubscription.id = this.generateSubscriptionId(); - } - - let mockedSubs = this.mockedSubscriptionsByKey[key]; - if (!mockedSubs) { - mockedSubs = []; - this.mockedSubscriptionsByKey[key] = mockedSubs; - } - mockedSubs.push(mockedSubscription); - } - - public subscribe(request: Request, handler: (error: any, result: any) => void): number { - const parsedRequest: ParsedRequest = { - query: request.query, - variables: request.variables, - debugName: request.debugName, - }; - const key = requestToKey(parsedRequest); - if (this.mockedSubscriptionsByKey.hasOwnProperty(key)) { - const subscription = this.mockedSubscriptionsByKey[key].shift(); - this.handlersById[subscription.id] = handler; - this.mockedSubscriptionsById[subscription.id] = subscription; - return subscription.id; - } else { - throw new Error('Network interface does not have subscription associated with this request.'); - } - - }; - - public fireResult(id: number) { - const handler = this.handlersById[id]; - if (this.mockedSubscriptionsById.hasOwnProperty(id.toString())) { - const subscription = this.mockedSubscriptionsById[id]; - if (subscription.results.length === 0) { - throw new Error(`No more mocked subscription responses for the query: ` + - `${print(subscription.request.query)}, variables: ${JSON.stringify(subscription.request.variables)}`); - } - const response = subscription.results.shift(); - setTimeout(() => { - handler(response.error, response.result); - }, response.delay ? response.delay : 0); - } else { - throw new Error('Network interface does not have subscription associated with this id.'); - } - } - - public unsubscribe(id: number) { - delete this.mockedSubscriptionsById[id]; - } -} - -export class MockBatchedNetworkInterface -extends MockNetworkInterface implements BatchedNetworkInterface { - - public batchQuery(requests: Request[]): Promise { - const resultPromises: Promise[] = []; - requests.forEach((request) => { - resultPromises.push(this.query(request)); - }); - - return Promise.all(resultPromises); - } -} - - -function requestToKey(request: ParsedRequest): string { - const queryString = request.query && print(request.query); - - return JSON.stringify({ - variables: request.variables || {}, - debugName: request.debugName, - query: queryString, - }); -} \ No newline at end of file