apollo-mobx
Version:
HOC for querying graphql server
172 lines (171 loc) • 7.8 kB
JavaScript
;
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;
});