apollo-mobx
Version:
HOC for querying graphql server
153 lines (152 loc) • 6.73 kB
JavaScript
;
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;