UNPKG

apollo-mobx

Version:

HOC for querying graphql server

172 lines (171 loc) 7.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var mobx_1 = require("mobx"); var mobx_react_1 = require("mobx-react"); var React = require("react"); var sinon = require("Sinon"); var index_1 = require("../index"); var index_2 = require("../testing/index"); var State = (function () { function State() { this.detail = 'Detail'; } return State; }()); tslib_1.__decorate([ mobx_1.observable, tslib_1.__metadata("design:type", Object) ], State.prototype, "detail", void 0); var state = new State(); describe('container', function () { var typeDefs = "\n type Query {\n helloWorld: String\n }\n\n type Mutation {\n changeDetail(what: String): String\n }\n\n schema {\n query: Query\n mutation: Mutation\n }\n"; var greeting = function () { return 'Hello from Apollo!!'; }; var mutation; var queries = { helloWorld: function () { return greeting(); } }; var mutations = { changeDetail: function (query, variables) { return mutation(variables.what); } }; var HelloWorld = mobx_react_1.observer(function (_a) { var data = _a.data; var hello = data && data.helloWorld; if (data && data.loading) { return React.createElement("h1", { id: "loading" }, "Loading one second please!"); } return (React.createElement("div", null, React.createElement("h1", { id: "content" }, hello), React.createElement("div", { id: "detail" }, state.detail))); }); var query = (_a = ["\n query hello {\n helloWorld\n }\n "], _a.raw = ["\n query hello {\n helloWorld\n }\n "], gql(_a)); var mutationText = (_b = ["\n mutation changeDetail($what: String) {\n changeDetail(what: $what)\n }\n "], _b.raw = ["\n mutation changeDetail($what: String) {\n changeDetail(what: $what)\n }\n "], gql(_b)); var Composed = index_1.graphql(query)(HelloWorld); var context = {}; var _c = index_2.initialiseApolloDecorator({ context: context, mutations: mutations, queries: queries, typeDefs: typeDefs }), ApolloDecorator = _c.ApolloDecorator, graphqlClient = _c.graphqlClient; beforeEach(function () { greeting = function () { return 'Hello from Apollo!!'; }; mutation = function (what) { state.detail = what; return 'Returned'; }; }); it('can call query with callbacks', function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var thenCallback, finalCallback, catchCallback, greetings; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: thenCallback = sinon.stub(); finalCallback = sinon.stub(); catchCallback = sinon.stub(); return [4, graphqlClient.query({ finalCallback: finalCallback, query: query, thenCallback: thenCallback })]; case 1: greetings = _a.sent(); greetings.data.should.deep.equal({ helloWorld: 'Hello from Apollo!!' }); thenCallback.should.have.been.calledWith({ helloWorld: 'Hello from Apollo!!' }, context); finalCallback.should.have.been.calledWith(context); catchCallback.should.not.have.been.called; graphqlClient.resetStore(); greeting = function () { throw new Error('Failed'); }; return [4, graphqlClient .query({ catchCallback: catchCallback, finalCallback: finalCallback, query: query, thenCallback: thenCallback }) .should.be.rejectedWith('GraphQL error: Failed')]; case 2: _a.sent(); catchCallback.should.have.been.called; return [2]; } }); }); }); it('can call mutation with callbacks', function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var thenCallback, finalCallback, catchCallback, greetings; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: thenCallback = sinon.stub(); finalCallback = sinon.stub(); catchCallback = sinon.stub(); return [4, graphqlClient.mutate({ mutation: mutationText, variables: { what: 'Resolved' }, thenCallback: thenCallback, finalCallback: finalCallback, catchCallback: catchCallback })]; case 1: greetings = _a.sent(); greetings.data.should.deep.equal({ changeDetail: 'Returned' }); thenCallback.should.have.been.calledWith({ changeDetail: 'Returned' }, context); finalCallback.should.have.been.calledWith(context); catchCallback.should.not.have.been.called; graphqlClient.resetStore(); mutation = function () { throw new Error('Failed'); }; return [4, graphqlClient .mutate({ mutation: mutationText, variables: { what: 'Resolved' }, thenCallback: thenCallback, finalCallback: finalCallback, catchCallback: catchCallback }) .should.be.rejectedWith('GraphQL error: Failed')]; case 2: _a.sent(); catchCallback.should.have.been.called; graphqlClient.mobxQueryStore.activeQueries.length.should.equal(0); return [2]; } }); }); }); it('can mount container', function () { return tslib_1.__awaiter(this, void 0, void 0, function () { var component, wrapper; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: component = (React.createElement(ApolloDecorator, null, React.createElement(Composed, null))); return [4, index_2.mountContainer(component)]; case 1: wrapper = _a.sent(); wrapper .find('#content') .text() .should.equal('Hello from Apollo!!'); return [2]; } }); }); }); var _a, _b; });