From a08152f92a75eb64ceac2f4176766de5582270b6 Mon Sep 17 00:00:00 2001 From: nodkz Date: Fri, 27 Apr 2018 18:48:59 +0600 Subject: [PATCH] feat(InputTypeComposer): add `makeFieldNonNull` and `makeFieldNullable` methods This methods have such names due similar naming with TypeComposer. Old methods `makeRequired` and `makeOptional` made as aliases and will continue to work. --- src/InputTypeComposer.d.ts | 9 ++++++++ src/InputTypeComposer.js | 20 +++++++++++++++--- src/__tests__/InputTypeComposer-test.js | 28 +++++++++++++++++++++++-- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/InputTypeComposer.d.ts b/src/InputTypeComposer.d.ts index 527685a9..eba09cde 100644 --- a/src/InputTypeComposer.d.ts +++ b/src/InputTypeComposer.d.ts @@ -83,6 +83,9 @@ export class InputTypeComposer { public reorderFields(names: string[]): this; + public isFieldNonNull(fieldName: string): boolean ; + + // alias for isFieldNonNull public isRequired(fieldName: string): boolean; public getFieldConfig(fieldName: string): GraphQLInputFieldConfig; @@ -91,8 +94,14 @@ export class InputTypeComposer { public getFieldTC(fieldName: string): InputTypeComposer; + public makeFieldNonNull(fieldNameOrArray: string | string[]): this; + + // alias for makeFieldNonNull public makeRequired(fieldNameOrArray: string | string[]): this; + public makeFieldNullable(fieldNameOrArray: string | string[]): this; + + // alias for makeFieldNullable public makeOptional(fieldNameOrArray: string | string[]): this; public clone(newTypeName: string): InputTypeComposer; diff --git a/src/InputTypeComposer.js b/src/InputTypeComposer.js index 97205d8e..6d5e96fc 100644 --- a/src/InputTypeComposer.js +++ b/src/InputTypeComposer.js @@ -246,10 +246,15 @@ export class InputTypeComposer { return this; } - isRequired(fieldName: string): boolean { + isFieldNonNull(fieldName: string): boolean { return this.getFieldType(fieldName) instanceof GraphQLNonNull; } + // alias for isFieldNonNull + isRequired(fieldName: string): boolean { + return this.isFieldNonNull(fieldName); + } + getFieldConfig(fieldName: string): GraphQLInputFieldConfig { const fc = this.getField(fieldName); if (!fc) { @@ -279,7 +284,7 @@ export class InputTypeComposer { return this.constructor.schemaComposer.InputTypeComposer.createTemp(fieldType); } - makeRequired(fieldNameOrArray: string | Array): InputTypeComposer { + makeFieldNonNull(fieldNameOrArray: string | Array): InputTypeComposer { const fieldNames = Array.isArray(fieldNameOrArray) ? fieldNameOrArray : [fieldNameOrArray]; fieldNames.forEach(fieldName => { if (this.hasField(fieldName)) { @@ -292,7 +297,12 @@ export class InputTypeComposer { return this; } - makeOptional(fieldNameOrArray: string | Array): InputTypeComposer { + // alias for makeFieldNonNull + makeRequired(fieldNameOrArray: string | Array): InputTypeComposer { + return this.makeFieldNonNull(fieldNameOrArray); + } + + makeFieldNullable(fieldNameOrArray: string | Array): InputTypeComposer { const fieldNames = Array.isArray(fieldNameOrArray) ? fieldNameOrArray : [fieldNameOrArray]; fieldNames.forEach(fieldName => { if (this.hasField(fieldName)) { @@ -305,6 +315,10 @@ export class InputTypeComposer { return this; } + makeOptional(fieldNameOrArray: string | Array): InputTypeComposer { + return this.makeFieldNullable(fieldNameOrArray); + } + clone(newTypeName: string): InputTypeComposer { if (!newTypeName) { throw new Error('You should provide new type name for clone() method'); diff --git a/src/__tests__/InputTypeComposer-test.js b/src/__tests__/InputTypeComposer-test.js index 3ee01bf4..42c15c64 100644 --- a/src/__tests__/InputTypeComposer-test.js +++ b/src/__tests__/InputTypeComposer-test.js @@ -193,16 +193,40 @@ describe('InputTypeComposer', () => { }); it('isRequired()', () => { + itc.setField('input1', 'String'); expect(itc.isRequired('input1')).toBe(false); + itc.setField('input1', 'String!'); + expect(itc.isRequired('input1')).toBe(true); }); - it('makeRequired()', () => { - itc.makeRequired('input1'); + it('isFieldNonNull()', () => { + itc.setField('input1', 'String'); + expect(itc.isFieldNonNull('input1')).toBe(false); + itc.setField('input1', 'String!'); + expect(itc.isFieldNonNull('input1')).toBe(true); + }); + + it('makeFieldNonNull()', () => { + itc.makeFieldNonNull('input1'); expect(itc.getFieldType('input1')).toBeInstanceOf(GraphQLNonNull); expect((itc.getFieldType('input1'): any).ofType).toBe(GraphQLString); + expect(itc.isFieldNonNull('input1')).toBe(true); expect(itc.isRequired('input1')).toBe(true); }); + it('makeRequired()', () => { + itc.setField('input1', 'String'); + itc.makeRequired('input1'); + expect(itc.isFieldNonNull('input1')).toBe(true); + }); + + it('makeFieldNullable()', () => { + itc.makeFieldNonNull('input1'); + expect(itc.isFieldNonNull('input1')).toBe(true); + itc.makeFieldNullable('input1'); + expect(itc.isFieldNonNull('input1')).toBe(false); + }); + it('makeOptional()', () => { itc.makeRequired('input1'); expect(itc.isRequired('input1')).toBe(true);