graphql-compose-mongoose
Version:
Plugin for `graphql-compose` which derive a graphql types from a mongoose model.
148 lines (135 loc) • 5.82 kB
JavaScript
;
var _graphqlCompose = require("graphql-compose");
var _composeWithMongooseDiscriminators = require("../../composeWithMongooseDiscriminators");
var _characterModels = require("../__mocks__/characterModels");
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
const DKeyFieldName = 'type';
const _getCharacterModels = (0, _characterModels.getCharacterModels)(DKeyFieldName),
CharacterModel = _getCharacterModels.CharacterModel,
PersonModel = _getCharacterModels.PersonModel;
beforeAll(() => CharacterModel.base.connect());
afterAll(() => CharacterModel.base.disconnect());
describe('prepareChildResolvers()', () => {
describe('setQueryDKey()', () => {
let PersonTC;
beforeAll(() => {
PersonTC = (0, _composeWithMongooseDiscriminators.composeWithMongooseDiscriminators)(CharacterModel).discriminator(PersonModel);
});
beforeEach(
/*#__PURE__*/
_asyncToGenerator(function* () {
yield PersonModel.remove({});
}));
it('should set DKey on createOne',
/*#__PURE__*/
_asyncToGenerator(function* () {
const res = yield PersonTC.getResolver('createOne').resolve({
args: {
record: {
name: 'Agent 007',
dob: 124343
}
}
});
expect(res.record[DKeyFieldName]).toBe(PersonModel.modelName);
}));
it('should set DKey on createMany',
/*#__PURE__*/
_asyncToGenerator(function* () {
const res = yield PersonTC.getResolver('createMany').resolve({
args: {
records: [{
name: 'Agent 007',
dob: 124343
}, {
name: 'Agent 007',
dob: 124343
}]
}
});
expect(res.records[0][DKeyFieldName]).toBe(PersonModel.modelName);
expect(res.records[1][DKeyFieldName]).toBe(PersonModel.modelName);
}));
});
describe('hideDKey()', () => {
const resolversWithFilterArgs = [];
const resolversWithRecordArgs = [];
const resolversWithRecordsArgs = [];
const interestArgs = ['filter', 'record', 'records'];
beforeAll(() => {
const PersonTC = (0, _composeWithMongooseDiscriminators.composeWithMongooseDiscriminators)(CharacterModel).discriminator(PersonModel);
const resolvers = PersonTC.getResolvers();
resolvers.forEach(resolver => {
const argNames = resolver.getArgNames();
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = argNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
const argName = _step.value;
if (argName === interestArgs[0]) {
resolversWithFilterArgs.push(resolver);
}
if (argName === interestArgs[1]) {
resolversWithRecordArgs.push(resolver);
}
if (argName === interestArgs[2]) {
resolversWithRecordsArgs.push(resolver);
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
});
});
it('should hide DKey field on filter args', () => {
for (var _i = 0; _i < resolversWithFilterArgs.length; _i++) {
const resolver = resolversWithFilterArgs[_i];
expect(interestArgs[0]).toEqual('filter');
expect(resolver.getArgTC(interestArgs[0]).hasField(DKeyFieldName)).toBeFalsy();
}
});
it('should hide DKey field on record args', () => {
for (var _i2 = 0; _i2 < resolversWithRecordArgs.length; _i2++) {
const resolver = resolversWithRecordArgs[_i2];
expect(interestArgs[1]).toEqual('record');
expect(resolver.getArgTC(interestArgs[1]).hasField(DKeyFieldName)).toBeFalsy();
}
});
it('should hide DKey field on records args', () => {
for (var _i3 = 0; _i3 < resolversWithRecordsArgs.length; _i3++) {
const resolver = resolversWithRecordsArgs[_i3];
expect(interestArgs[2]).toEqual('records');
expect(resolver.getArgTC(interestArgs[2]).hasField(DKeyFieldName)).toBeFalsy();
}
});
});
describe('copyResolverArgTypes()', () => {
afterAll(() => {
_graphqlCompose.schemaComposer.clear();
}); // Note childResolver Arg fields are copied from baseResolver
const baseDTC = (0, _composeWithMongooseDiscriminators.composeWithMongooseDiscriminators)(CharacterModel, {
resolvers: {
createOne: {
requiredFields: ['kind']
}
}
});
const PersonTC = baseDTC.discriminator(PersonModel);
it('should copy base common ResolverArgTypes to child', () => {
expect(baseDTC.getResolver('createOne').getArgTC('record').getFieldType('kind')).toEqual(PersonTC.getResolver('createOne').getArgTC('record').getFieldType('kind'));
});
});
});