···
560
+
describe('deduplication behavior', () => {
562
+
vi.useFakeTimers();
566
+
vi.useRealTimers();
569
+
it('deduplicates operations when no result has been sent yet', () => {
570
+
const onOperation = vi.fn();
572
+
const exchange: Exchange = () => ops$ => {
576
+
onPush(onOperation),
587
+
const client = createClient({
589
+
exchanges: [exchange],
592
+
const resultOne = vi.fn();
593
+
const resultTwo = vi.fn();
594
+
const operationOne = makeOperation('query', queryOperation, {
595
+
...queryOperation.context,
596
+
requestPolicy: 'cache-first',
598
+
const operationTwo = makeOperation('query', queryOperation, {
599
+
...queryOperation.context,
600
+
requestPolicy: 'network-only',
603
+
pipe(client.executeRequestOperation(operationOne), subscribe(resultOne));
604
+
pipe(client.executeRequestOperation(operationTwo), subscribe(resultTwo));
605
+
expect(resultOne).toHaveBeenCalledTimes(0);
606
+
expect(resultTwo).toHaveBeenCalledTimes(0);
608
+
vi.advanceTimersByTime(1);
610
+
expect(resultOne).toHaveBeenCalledTimes(1);
611
+
expect(resultTwo).toHaveBeenCalledTimes(1);
612
+
expect(onOperation).toHaveBeenCalledTimes(1);
615
+
it('deduplicates operations when hasNext: true is set', () => {
616
+
const onOperation = vi.fn();
618
+
const exchange: Exchange = () => ops$ => {
622
+
onPush(onOperation),
632
+
const client = createClient({
634
+
exchanges: [exchange],
637
+
const resultOne = vi.fn();
638
+
const resultTwo = vi.fn();
639
+
const operationOne = makeOperation('query', queryOperation, {
640
+
...queryOperation.context,
641
+
requestPolicy: 'cache-first',
643
+
const operationTwo = makeOperation('query', queryOperation, {
644
+
...queryOperation.context,
645
+
requestPolicy: 'network-only',
648
+
pipe(client.executeRequestOperation(operationOne), subscribe(resultOne));
649
+
pipe(client.executeRequestOperation(operationTwo), subscribe(resultTwo));
650
+
expect(resultOne).toHaveBeenCalledTimes(1);
651
+
expect(resultTwo).toHaveBeenCalledTimes(1);
653
+
vi.advanceTimersByTime(1);
655
+
expect(resultOne).toHaveBeenCalledTimes(1);
656
+
expect(resultTwo).toHaveBeenCalledTimes(1);
657
+
expect(onOperation).toHaveBeenCalledTimes(1);
describe('shared sources behavior', () => {