rx-elasticsearch
Version:
RxJS Observables for the Elasticsearch client
53 lines (45 loc) • 1.55 kB
text/typescript
import 'expectations';
import * as sinon from 'sinon';
import * as elasticsearch from 'elasticsearch';
import {Scroll} from '../src/Scroll';
describe('The scrolling function tested with a spy Elasticsearch client', () => {
let client:any = new elasticsearch.Client({});
let responses = [{
_scroll_id: 1000,
hits: {hits: [{}, {}, {}, {}, {}]}
}, {
_scroll_id: 1001,
hits: {hits: [{}, {}, {}, {}, {}]}
}, {
_scroll_id: 1002,
hits: {hits: []}
}];
beforeEach(() => {
sinon
.stub(client, 'search', null)
.returns(Promise.resolve(responses[0]));
sinon
.stub(client, 'scroll', null)
.onFirstCall().returns(Promise.resolve(responses[1]))
.onSecondCall().returns(Promise.resolve(responses[2]))
.onThirdCall().returns(Promise.resolve(null));
sinon
.stub(client, 'clearScroll', null)
.returns(Promise.resolve());
});
it('check if scrollable returns correct results', () => {
return Scroll.scroll({}, client)
.do(
res => {
expect(res).toEqual(responses[0]);
responses.shift();
}
)
.toPromise()
.then(() => {
expect(client.search.calledOnce).toBe(true);
expect(client.scroll.calledTwice).toBe(true);
expect(client.clearScroll.calledOnce).toBe(true);
});
});
});