Skip to content

Commit

Permalink
fix: properly construct Union types from ComposeConfig
Browse files Browse the repository at this point in the history
  • Loading branch information
nodkz committed Apr 4, 2019
1 parent abb0d18 commit f4f0bc2
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/UnionTypeComposer.js
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ export class UnionTypeComposer<TSource, TContext> {
const types = this.gqType.getTypes();
const m: Map<string, ComposeObjectType> = new Map();
types.forEach(type => {
m.set(type.name, type);
m.set(getComposeTypeName(type), type);
});
this.gqType._gqcTypeMap = m;

Expand Down
17 changes: 17 additions & 0 deletions src/__tests__/InputTypeComposer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,23 @@ describe('InputTypeComposer', () => {
expect((itc1.getFieldType('f2'): any).ofType).toBe(GraphQLInt);
});

it('should create ITC by ComposeObjectTypeConfig with unexisted types', () => {
const itc1 = schemaComposer.createInputTC({
name: 'TestTypeInput',
fields: {
f1: {
type: 'Type1',
},
f2: 'Type2!',
},
});
expect(itc1).toBeInstanceOf(InputTypeComposer);
expect(itc1.getField('f1')).toEqual({
type: 'Type1',
});
expect(itc1.getField('f2')).toEqual('Type2!');
});

it('should create ITC by GraphQLObjectTypeConfig with fields as Thunk', () => {
const itc1 = schemaComposer.createInputTC({
name: 'TestTypeInput',
Expand Down
17 changes: 17 additions & 0 deletions src/__tests__/InterfaceTypeComposer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,23 @@ describe('InterfaceTypeComposer', () => {
expect((myIFTC.getFieldType('f2'): any).ofType).toBe(GraphQLInt);
});

it('should create TC by ComposeInterfaceTypeConfig with unexisted types', () => {
const myIFTC = schemaComposer.createInterfaceTC({
name: 'TestType',
fields: {
f1: {
type: 'Type1',
},
f2: 'Type2!',
},
});
expect(myIFTC).toBeInstanceOf(InterfaceTypeComposer);
expect(myIFTC.getField('f1')).toEqual({
type: 'Type1',
});
expect(myIFTC.getField('f2')).toEqual('Type2!');
});

it('should create TC by GraphQLInterfaceTypeConfig with fields as Thunk', () => {
const myIFTC = schemaComposer.createInterfaceTC({
name: 'TestType',
Expand Down
20 changes: 19 additions & 1 deletion src/__tests__/ObjectTypeComposer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ describe('ObjectTypeComposer', () => {
expect(myTC.getFields()).toEqual({});
});

it('should create TC by type template string', () => {
it('should create TC by SDL', () => {
const myTC = ObjectTypeComposer.create(
`
type TestTypeTpl {
Expand Down Expand Up @@ -485,6 +485,24 @@ describe('ObjectTypeComposer', () => {
expect((myTC.getFieldType('f2'): any).ofType).toBe(GraphQLInt);
});

it('should create TC by ComposeObjectTypeConfig with unexisted types', () => {
const myTC = ObjectTypeComposer.create(
{
name: 'TestType',
fields: {
f1: {
type: 'Type1',
},
f2: 'Type2!',
},
},
schemaComposer
);
expect(myTC).toBeInstanceOf(ObjectTypeComposer);
expect(myTC.getField('f1')).toEqual({ type: 'Type1' });
expect(myTC.getField('f2')).toEqual('Type2!');
});

it('should create TC by GraphQLObjectTypeConfig with fields as Thunk', () => {
const myTC = ObjectTypeComposer.create(
{
Expand Down
10 changes: 5 additions & 5 deletions src/__tests__/UnionTypeComposer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,20 +61,20 @@ describe('UnionTypeComposer', () => {
expect(types[1]).toBeInstanceOf(GraphQLObjectType);
});

it('should create UTC by UnionTypeConfig', () => {
it('should create UTC by UnionTypeConfig with unexisted types', () => {
const myUTC = UnionTypeComposer.create(
{
name: 'TestType',
types: () => [`type AA { a: Int }`, `BB`],
types: [`type AA { a: Int }`, `BB`],
},
sc
);
expect(myUTC).toBeInstanceOf(UnionTypeComposer);
ObjectTypeComposer.create(`type BB { b: Int }`, sc);
expect(myUTC.getTypeNames()).toEqual(['AA', 'BB']);
const types = myUTC.getTypes();
expect(types).toHaveLength(2);
expect(types[0]).toBeInstanceOf(GraphQLObjectType);
expect(types[1]).toBeInstanceOf(GraphQLObjectType);
expect(types[0]).toBe(`type AA { a: Int }`);
expect(types[1]).toBe(`BB`);
});

it('should create UTC by GraphQLUnionType', () => {
Expand Down

0 comments on commit f4f0bc2

Please sign in to comment.