Skip to content

Commit

Permalink
Merge bbbc9f5 into f2800a0
Browse files Browse the repository at this point in the history
  • Loading branch information
dogmatico committed Aug 7, 2017
2 parents f2800a0 + bbbc9f5 commit 1298b16
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 16 deletions.
6 changes: 6 additions & 0 deletions src/RxObservableQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ import { ApolloQueryResult, ObservableQuery } from 'apollo-client';

import { ObservableQueryRef } from './utils/ObservableQueryRef';

declare module 'rxjs/Observable' {
interface Observable<T> {
lift<R>(operator: Operator<ApolloQueryResult<T>, ApolloQueryResult<R>>): Observable<ApolloQueryResult<R>>;
}
}

export class RxObservableQuery<T> extends Observable<ApolloQueryResult<T>> {
constructor(
public apollo: ObservableQuery<any> | ObservableQueryRef,
Expand Down
47 changes: 31 additions & 16 deletions tests/RxObservableQuery.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { assert } from 'chai';
import { spy, stub } from 'sinon';
import { ApolloClient, ObservableQuery } from 'apollo-client';
import { ApolloClient, ApolloQueryResult, NetworkStatus, ObservableQuery } from 'apollo-client';

import * as heroes from './fixtures/heroes';
import { RxObservableQuery } from '../src/RxObservableQuery';
Expand All @@ -9,17 +9,31 @@ import { ObservableQueryRef } from '../src/utils/ObservableQueryRef';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/do';

function apolloResultFactory<T>(data: T, override: Partial<ApolloQueryResult<T>> = {}): ApolloQueryResult<T> {
return {
data,
loading: false,
networkStatus: NetworkStatus.ready,
stale: false,
...override,
};
}

describe('RxObservableQuery', () => {
let obsQuery: ObservableQuery<heroes.AllHeroesQueryResult>;
let rxObsQuery: RxObservableQuery<heroes.AllHeroesQueryResult>;
let client: ApolloClient;
let queryResult: ApolloQueryResult<heroes.AllHeroesQueryResult>;
let promiseResult: Promise<ApolloQueryResult<heroes.AllHeroesQueryResult>>;

beforeEach(() => {
const mocked = heroes.mockClient();

client = mocked.client;
obsQuery = mocked.obsQuery;
rxObsQuery = mocked.rxObsQuery;
queryResult = apolloResultFactory<heroes.AllHeroesQueryResult>(heroes.dataWithVariables);
promiseResult = Promise.resolve(queryResult);
});

it('should handle ObservableQueryRef', (done) => {
Expand Down Expand Up @@ -93,11 +107,11 @@ describe('RxObservableQuery', () => {

describe('apollo-specific', () => {
it('should be able to refech', () => {
const stubbed = stub(obsQuery, 'refetch').returns('promise');
const stubbed = stub(obsQuery, 'refetch').returns(promiseResult);
const promise = rxObsQuery.refetch(heroes.variables);

assert.deepEqual(stubbed.args[0], [heroes.variables]);
assert.equal(promise, 'promise');
assert.equal(promise, promiseResult);
});

it('should be able to startPolling', () => {
Expand All @@ -116,21 +130,22 @@ describe('RxObservableQuery', () => {
});

it('should be able to fetchMore', () => {
const stubbed = stub(obsQuery, 'fetchMore').returns('promise');
const stubbed = stub(obsQuery, 'fetchMore').returns(promiseResult);
const options = {};
const promise = rxObsQuery.fetchMore(options);

assert.deepEqual(stubbed.args[0], [options]);
assert.equal(promise, 'promise');
assert.equal(promise, promiseResult);
});

it('should be able to subscribeToMore', () => {
const stubbed = stub(obsQuery, 'subscribeToMore').returns('fn');
const mockFetchMore = () => { return; };
const stubbed = stub(obsQuery, 'subscribeToMore').returns(mockFetchMore);
const options = {};
const fn = rxObsQuery.subscribeToMore(options);

assert.deepEqual(stubbed.args[0], [options]);
assert.equal(fn, 'fn');
assert.equal(fn, mockFetchMore);
});

it('should be able to updateQuery', () => {
Expand All @@ -145,39 +160,39 @@ describe('RxObservableQuery', () => {
});

it('should be able to use result', () => {
stub(obsQuery, 'result').returns('promise');
stub(obsQuery, 'result').returns(promiseResult);
const promise = rxObsQuery.result();

assert.equal(promise, 'promise');
assert.equal(promise, promiseResult);
});

it('should be able to use currentResult', () => {
stub(obsQuery, 'currentResult').returns('ApolloQueryResult');
const result = rxObsQuery.currentResult();
stub(obsQuery, 'currentResult').returns(promiseResult);
const obsQueryResult = rxObsQuery.currentResult();

assert.equal(result, 'ApolloQueryResult');
assert.equal(obsQueryResult, promiseResult);
});

it('should be able to get variables', () => {
assert.isTrue(rxObsQuery.variables === obsQuery.variables);
});

it('should be able to setOptions', () => {
const stubbed = stub(obsQuery, 'setOptions').returns('promise');
const stubbed = stub(obsQuery, 'setOptions').returns(promiseResult);
const options = {};
const promise = rxObsQuery.setOptions(options);

assert.deepEqual(stubbed.args[0], [options]);
assert.equal(promise, 'promise');
assert.equal(promise, promiseResult);
});

it('should be able to setVariables', () => {
const stubbed = stub(obsQuery, 'setVariables').returns('promise');
const stubbed = stub(obsQuery, 'setVariables').returns(promiseResult);
const variables = {};
const promise = rxObsQuery.setVariables(variables);

assert.deepEqual(stubbed.args[0], [variables, false]);
assert.equal(promise, 'promise');
assert.equal(promise, promiseResult);
});
});
});

0 comments on commit 1298b16

Please sign in to comment.