UNPKG

react-apollo

Version:
123 lines 4.79 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import { ApolloLink, Observable, } from 'apollo-link'; import { print } from 'graphql/language/printer'; var MockLink = (function (_super) { __extends(MockLink, _super); function MockLink(mockedResponses) { var _this = _super.call(this) || this; _this.mockedResponsesByKey = {}; mockedResponses.forEach(function (mockedResponse) { _this.addMockedResponse(mockedResponse); }); return _this; } MockLink.prototype.addMockedResponse = function (mockedResponse) { var key = requestToKey(mockedResponse.request); var mockedResponses = this.mockedResponsesByKey[key]; if (!mockedResponses) { mockedResponses = []; this.mockedResponsesByKey[key] = mockedResponses; } mockedResponses.push(mockedResponse); }; MockLink.prototype.request = function (operation) { var key = requestToKey(operation); var responses = this.mockedResponsesByKey[key]; if (!responses || responses.length === 0) { throw new Error("No more mocked responses for the query: " + print(operation.query) + ", variables: " + JSON.stringify(operation.variables)); } var original = this.mockedResponsesByKey[key].slice(); var _a = this.mockedResponsesByKey[key].shift() || {}, result = _a.result, error = _a.error, delay = _a.delay, newData = _a.newData; if (newData) { original[0].result = newData(); this.mockedResponsesByKey[key].push(original[0]); } if (!result && !error) { throw new Error("Mocked response should contain either result or error: " + key); } return new Observable(function (observer) { var timer = setTimeout(function () { if (error) { observer.error(error); } else { if (result) observer.next(result); observer.complete(); } }, delay ? delay : 0); return function () { clearTimeout(timer); }; }); }; return MockLink; }(ApolloLink)); export { MockLink }; var MockSubscriptionLink = (function (_super) { __extends(MockSubscriptionLink, _super); function MockSubscriptionLink() { var _this = _super.call(this) || this; _this.unsubscribers = []; _this.setups = []; return _this; } MockSubscriptionLink.prototype.request = function (_req) { var _this = this; return new Observable(function (observer) { _this.setups.forEach(function (x) { return x(); }); _this.observer = observer; return function () { _this.unsubscribers.forEach(function (x) { return x(); }); }; }); }; MockSubscriptionLink.prototype.simulateResult = function (result) { var _this = this; setTimeout(function () { var observer = _this.observer; if (!observer) throw new Error('subscription torn down'); if (result.result && observer.next) observer.next(result.result); if (result.error && observer.error) observer.error(result.error); }, result.delay || 0); }; MockSubscriptionLink.prototype.onSetup = function (listener) { this.setups = this.setups.concat([listener]); }; MockSubscriptionLink.prototype.onUnsubscribe = function (listener) { this.unsubscribers = this.unsubscribers.concat([listener]); }; return MockSubscriptionLink; }(ApolloLink)); export { MockSubscriptionLink }; function requestToKey(request) { var queryString = request.query && print(request.query); var requestKey = { variables: request.variables || {}, query: queryString, }; return JSON.stringify(requestKey); } export function mockSingleLink() { var mockedResponses = []; for (var _i = 0; _i < arguments.length; _i++) { mockedResponses[_i] = arguments[_i]; } return new MockLink(mockedResponses); } export function mockObservableLink() { return new MockSubscriptionLink(); } //# sourceMappingURL=test-links.js.map