diff --git a/packages/graphqlgen/src/tests/fixtures/override/override-1.ts b/packages/graphqlgen/src/tests/fixtures/override/override-1.ts new file mode 100644 index 00000000..1d5e0eff --- /dev/null +++ b/packages/graphqlgen/src/tests/fixtures/override/override-1.ts @@ -0,0 +1,4 @@ +export interface Foo { + id: string + value: number +} diff --git a/packages/graphqlgen/src/tests/fixtures/override/override-2.ts b/packages/graphqlgen/src/tests/fixtures/override/override-2.ts new file mode 100644 index 00000000..5065f590 --- /dev/null +++ b/packages/graphqlgen/src/tests/fixtures/override/override-2.ts @@ -0,0 +1,4 @@ +export interface Foo { + id: string + value: string +} diff --git a/packages/graphqlgen/src/tests/fixtures/override/schema.graphql b/packages/graphqlgen/src/tests/fixtures/override/schema.graphql new file mode 100644 index 00000000..6fc8399e --- /dev/null +++ b/packages/graphqlgen/src/tests/fixtures/override/schema.graphql @@ -0,0 +1,15 @@ +type Query { + id: ID! + foo: Foo! + bar: Bar! +} + +type Foo { + id: ID + value: Float +} + +type Bar { + id: ID + value: String +} diff --git a/packages/graphqlgen/src/tests/fixtures/override/types-flow.js b/packages/graphqlgen/src/tests/fixtures/override/types-flow.js new file mode 100644 index 00000000..6e42e5be --- /dev/null +++ b/packages/graphqlgen/src/tests/fixtures/override/types-flow.js @@ -0,0 +1,11 @@ +// @flow + +export interface Foo { + id: string + value: number +} + +export interface Bar { + id: string + value: string +} diff --git a/packages/graphqlgen/src/tests/fixtures/override/types.ts b/packages/graphqlgen/src/tests/fixtures/override/types.ts new file mode 100644 index 00000000..d2bc9ac2 --- /dev/null +++ b/packages/graphqlgen/src/tests/fixtures/override/types.ts @@ -0,0 +1,9 @@ +export interface Foo { + id: string + value: number +} + +export interface Bar { + id: string + value: string +} diff --git a/packages/graphqlgen/src/tests/typescript/__snapshots__/basic.test.ts.snap b/packages/graphqlgen/src/tests/typescript/__snapshots__/basic.test.ts.snap index 58d267cd..b97b3163 100644 --- a/packages/graphqlgen/src/tests/typescript/__snapshots__/basic.test.ts.snap +++ b/packages/graphqlgen/src/tests/typescript/__snapshots__/basic.test.ts.snap @@ -1759,6 +1759,216 @@ export const resolvers: Resolvers = { ] `; +exports[`override model same names 1`] = ` +"// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT. + +import { GraphQLResolveInfo } from \\"graphql\\"; +import { Foo } from \\"../../../fixtures/override/override-1\\"; +import { Foo } from \\"../../../fixtures/override/override-2\\"; +type Context = any; + +export namespace QueryResolvers { + export const defaultResolvers = {}; + + export type IdResolver = ( + parent: undefined, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => string | Promise; + + export type FooResolver = ( + parent: undefined, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => Foo | Promise; + + export type BarResolver = ( + parent: undefined, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => Foo | Promise; + + export interface Type { + id: ( + parent: undefined, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => string | Promise; + + foo: ( + parent: undefined, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => Foo | Promise; + + bar: ( + parent: undefined, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => Foo | Promise; + } +} + +export namespace FooResolvers { + export const defaultResolvers = { + id: (parent: Foo) => parent.id, + value: (parent: Foo) => parent.value + }; + + export type IdResolver = ( + parent: Foo, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => string | null | Promise; + + export type ValueResolver = ( + parent: Foo, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => number | null | Promise; + + export interface Type { + id: ( + parent: Foo, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => string | null | Promise; + + value: ( + parent: Foo, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => number | null | Promise; + } +} + +export namespace BarResolvers { + export const defaultResolvers = { + id: (parent: Foo) => parent.id, + value: (parent: Foo) => parent.value + }; + + export type IdResolver = ( + parent: Foo, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => string | null | Promise; + + export type ValueResolver = ( + parent: Foo, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => string | null | Promise; + + export interface Type { + id: ( + parent: Foo, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => string | null | Promise; + + value: ( + parent: Foo, + args: {}, + ctx: Context, + info: GraphQLResolveInfo + ) => string | null | Promise; + } +} + +export interface Resolvers { + Query: QueryResolvers.Type; + Foo: FooResolvers.Type; + Bar: BarResolvers.Type; +} +" +`; + +exports[`override model same names 2`] = ` +Array [ + Object { + "code": "// This resolver file was scaffolded by github.com/prisma/graphqlgen, DO NOT EDIT. +// Please do not import this file directly but copy & paste to your application code. + +import { FooResolvers } from \\"[TEMPLATE-INTERFACES-PATH]\\"; + +export const Foo: FooResolvers.Type = { + ...FooResolvers.defaultResolvers +}; +", + "force": false, + "path": "Foo.ts", + }, + Object { + "code": "// This resolver file was scaffolded by github.com/prisma/graphqlgen, DO NOT EDIT. +// Please do not import this file directly but copy & paste to your application code. + +import { BarResolvers } from \\"[TEMPLATE-INTERFACES-PATH]\\"; + +export const Bar: BarResolvers.Type = { + ...BarResolvers.defaultResolvers +}; +", + "force": false, + "path": "Bar.ts", + }, + Object { + "code": "// This resolver file was scaffolded by github.com/prisma/graphqlgen, DO NOT EDIT. +// Please do not import this file directly but copy & paste to your application code. + +import { QueryResolvers } from \\"[TEMPLATE-INTERFACES-PATH]\\"; + +export const Query: QueryResolvers.Type = { + ...QueryResolvers.defaultResolvers, + id: (parent, args, ctx) => { + throw new Error(\\"Resolver not implemented\\"); + }, + foo: (parent, args, ctx) => { + throw new Error(\\"Resolver not implemented\\"); + }, + bar: (parent, args, ctx) => { + throw new Error(\\"Resolver not implemented\\"); + } +}; +", + "force": false, + "path": "Query.ts", + }, + Object { + "code": "// This resolver file was scaffolded by github.com/prisma/graphqlgen, DO NOT EDIT. +// Please do not import this file directly but copy & paste to your application code. + +import { Resolvers } from \\"[TEMPLATE-INTERFACES-PATH]\\"; + +import { Query } from \\"./Query\\"; +import { Foo } from \\"./Foo\\"; +import { Bar } from \\"./Bar\\"; + +export const resolvers: Resolvers = { + Query, + Foo, + Bar +}; +", + "force": false, + "path": "index.ts", + }, +] +`; + exports[`subscription 1`] = ` "// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT. diff --git a/packages/graphqlgen/src/tests/typescript/basic.test.ts b/packages/graphqlgen/src/tests/typescript/basic.test.ts index 0b5eb31e..721cff60 100644 --- a/packages/graphqlgen/src/tests/typescript/basic.test.ts +++ b/packages/graphqlgen/src/tests/typescript/basic.test.ts @@ -146,3 +146,22 @@ test('override model', async () => { }, }) }) + +test('override model same names', async () => { + testGeneration({ + language, + schema: relative('../fixtures/override/schema.graphql'), + models: { + files: [relative('../fixtures/override/types.ts')], + override: { + Foo: `${relative('../fixtures/override/override-1.ts')}:Foo`, + Bar: `${relative('../fixtures/override/override-2.ts')}:Foo`, + }, + }, + output: relative('./generated/override/graphqlgen.ts'), + ['resolver-scaffolding']: { + output: relative('./tmp/override/'), + layout: 'file-per-type', + }, + }) +})