UNPKG

graphql-compose-mongoose

Version:

Plugin for `graphql-compose` which derive a graphql types from a mongoose model.

41 lines (40 loc) 1.77 kB
import { schemaComposer } from 'graphql-compose'; import { getCharacterModels } from '../__mocks__/characterModels'; import { composeWithMongooseDiscriminators } from '../../composeWithMongooseDiscriminators'; const { CharacterModel, PersonModel, DroidModel } = getCharacterModels('type'); beforeAll(() => schemaComposer.clear()); describe('composeChildTC ->', () => { const CharacterDTC = composeWithMongooseDiscriminators(CharacterModel); const PersonTC = CharacterDTC.discriminator(PersonModel); const DroidTC = CharacterDTC.discriminator(DroidModel); it('should set DInterface to childTC', () => { expect(DroidTC.hasInterface(CharacterDTC.getDInterface())).toBeTruthy(); expect(PersonTC.hasInterface(CharacterDTC.getDInterface())).toBeTruthy(); }); it('should copy all baseFields from BaseDTC to ChildTCs', () => { expect(DroidTC.getFieldNames()).toEqual(expect.arrayContaining(CharacterDTC.getFieldNames())); expect(PersonTC.getFieldNames()).toEqual(expect.arrayContaining(CharacterDTC.getFieldNames())); }); it('should make childTC have same fieldTypes as baseTC', () => { const characterFields = CharacterDTC.getFieldNames(); for (const field of characterFields) { expect(DroidTC.getFieldType(field)).toEqual(CharacterDTC.getFieldType(field)); expect(PersonTC.getFieldType(field)).toEqual(CharacterDTC.getFieldType(field)); } }); it('should operate normally like any other ObjectTypeComposer', () => { const fields = PersonTC.getFieldNames(); PersonTC.addFields({ field: { type: 'String' } }); expect(PersonTC.getFieldNames()).toEqual(fields.concat(['field'])); PersonTC.removeField('field'); expect(PersonTC.getFieldNames()).toEqual(fields); }); });