UNPKG

apollo-mobx

Version:

HOC for querying graphql server

153 lines (152 loc) 6.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var React = require("react"); var sinon = require("sinon"); var enzyme_1 = require("enzyme"); var mobx_1 = require("mobx"); var mobx_react_1 = require("mobx-react"); var index_1 = require("../index"); var index_2 = require("../testing/index"); var State = (function () { function State() { this.detail = 'Detail'; } tslib_1.__decorate([ mobx_1.observable, tslib_1.__metadata("design:type", Object) ], State.prototype, "detail", void 0); return State; }()); var state = new State(); describe('Mutations', function () { var typeDefs = "\n type Mutation {\n changeDetail(what: String): String\n }\n\n type Query {\n hello: String\n }\n\n schema {\n mutation: Mutation\n query: Query\n }\n"; 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("div", { id: "detail" }, state.detail))); }); var mutationText = index_1.gql(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n mutation changeDetail($what: String) {\n changeDetail(what: $what)\n }\n "], ["\n mutation changeDetail($what: String) {\n changeDetail(what: $what)\n }\n "]))); function init(mutation) { var context = {}; var mutations = { changeDetail: function (query, variables) { return mutation(variables.what); } }; var _a = index_2.initialiseApolloDecorator({ context: context, mutations: mutations, typeDefs: typeDefs }), ApolloDecorator = _a.ApolloDecorator, client = _a.client; var component = (React.createElement(ApolloDecorator, null, React.createElement(HelloWorld, null))); return { client: client, component: component, context: context, }; } it('can call mutation with callbacks', function () { return tslib_1.__awaiter(this, void 0, void 0, function () { function mutation(what) { return what; } var thenCallback, finalCallback, catchCallback, _a, client, context, greetings; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: thenCallback = sinon.stub(); finalCallback = sinon.stub(); catchCallback = sinon.stub(); _a = init(mutation), client = _a.client, context = _a.context; return [4, client.mutate({ catchCallback: catchCallback, finalCallback: finalCallback, mutation: mutationText, thenCallback: thenCallback, variables: { what: 'Returned' }, })]; case 1: greetings = _b.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; return [2]; } }); }); }); xit('throws errors', function () { return tslib_1.__awaiter(this, void 0, void 0, function () { function mutation(what) { throw new Error('Failed'); } var thenCallback, finalCallback, catchCallback, _a, client, context, result; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: thenCallback = sinon.stub(); finalCallback = sinon.stub(); catchCallback = sinon.stub(); _a = init(mutation), client = _a.client, context = _a.context; client.resetStore(); return [4, client .mutate({ catchCallback: catchCallback, finalCallback: finalCallback, mutation: mutationText, thenCallback: thenCallback, variables: { what: 'Resolved' }, }).should.be.rejectedWith('GraphQL error: Failed')]; case 1: result = _b.sent(); catchCallback.should.have.been.called; return [2]; } }); }); }); it('will wait for mutations and re-render accordingly', function () { return tslib_1.__awaiter(this, void 0, void 0, function () { function mutation(what) { state.detail = what; return what; } var _a, client, context, component, wrapper, result; return tslib_1.__generator(this, function (_b) { switch (_b.label) { case 0: _a = init(mutation), client = _a.client, context = _a.context, component = _a.component; wrapper = enzyme_1.mount(component); return [4, client.mutate({ mutation: mutationText, variables: { what: 'New Text' } })]; case 1: result = _b.sent(); return [4, index_2.waitForQueries(client)]; case 2: _b.sent(); wrapper .find('#detail') .text() .should.equal('New Text'); return [2]; } }); }); }); }); var templateObject_1;