Skip to content
This repository was archived by the owner on Dec 8, 2021. It is now read-only.

Commit 5505044

Browse files
committed
Add test to compile typescript-yoga template
1 parent ae86882 commit 5505044

File tree

9 files changed

+132
-47
lines changed

9 files changed

+132
-47
lines changed

packages/graphqlgen/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
"jest": "23.6.0",
6363
"ts-jest": "23.10.4",
6464
"ts-node": "7.0.1",
65-
"tslint": "5.11.0"
65+
"tslint": "5.11.0",
66+
"typescript": "^3.1.6"
6667
}
6768
}

packages/graphqlgen/src/index.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ export function generateCode(
114114
return { generatedTypes, generatedResolvers }
115115
}
116116

117-
function writeTypes(types: string, config: GraphQLGenDefinition): void {
117+
export function writeTypes(types: string, config: GraphQLGenDefinition): void {
118118
// Create generation target folder, if it does not exist
119119
// TODO: Error handling around this
120120
mkdirp.sync(path.dirname(config.output))
@@ -135,7 +135,7 @@ function writeTypes(types: string, config: GraphQLGenDefinition): void {
135135
)
136136
}
137137

138-
function writeResolversScaffolding(
138+
export function writeResolversScaffolding(
139139
resolvers: CodeFileLike[],
140140
config: GraphQLGenDefinition,
141141
) {
@@ -172,8 +172,6 @@ function writeResolversScaffolding(
172172
})
173173

174174
console.log(chalk.green(`Resolvers scaffolded at ${outputResolversDir}`))
175-
176-
process.exit(0)
177175
}
178176

179177
function bootstrapYamlFile() {
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
interface Data {
1+
export interface Data {
22
users: User[]
33
}
44

5-
interface Context {
5+
export interface Context {
66
data: Data
77
}
88

9-
interface User {
9+
export interface User {
1010
id: string
1111
}

packages/graphqlgen/src/tests/flow/basic.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ test('basic enum', async () => {
2626
models: {
2727
files: [relative('../fixtures/enum/types-flow.js')],
2828
},
29-
output: relative('./generated/enum/graphqlgen.ts'),
29+
output: relative('./generated/enum/graphqlgen.js'),
3030
['resolver-scaffolding']: {
3131
output: relative('./tmp/enum/'),
3232
layout: 'file-per-type',
@@ -41,7 +41,7 @@ test('basic union', async () => {
4141
models: {
4242
files: [relative('../fixtures/union/flow-types.js')],
4343
},
44-
output: relative('./generated/union/graphqlgen.ts'),
44+
output: relative('./generated/union/graphqlgen.js'),
4545
['resolver-scaffolding']: {
4646
output: relative('./tmp/union/'),
4747
layout: 'file-per-type',
@@ -61,7 +61,7 @@ test('defaultName', async () => {
6161
},
6262
],
6363
},
64-
output: relative('./generated/defaultName/graphqlgen.ts'),
64+
output: relative('./generated/defaultName/graphqlgen.js'),
6565
['resolver-scaffolding']: {
6666
output: relative('./tmp/scalar/'),
6767
layout: 'file-per-type',
@@ -76,7 +76,7 @@ test('basic scalar', async () => {
7676
models: {
7777
files: [relative('../fixtures/scalar/flow-types.js')],
7878
},
79-
output: relative('./generated/scalar/graphqlgen.ts'),
79+
output: relative('./generated/scalar/graphqlgen.js'),
8080
['resolver-scaffolding']: {
8181
output: relative('./tmp/scalar/'),
8282
layout: 'file-per-type',
Lines changed: 85 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,62 @@
1-
import { GraphQLGenDefinition } from "graphqlgen-json-schema";
2-
import { parseModels, parseSchema } from "../parse";
3-
import { validateConfig } from "../validation";
4-
import { generateCode } from "../index";
1+
import * as ts from 'typescript'
2+
import * as rimraf from 'rimraf'
3+
import * as path from 'path'
4+
import { GraphQLGenDefinition } from 'graphqlgen-json-schema'
5+
import { parseModels, parseSchema } from '../parse'
6+
import { validateConfig } from '../validation'
7+
import { generateCode, writeResolversScaffolding, writeTypes } from '../index'
8+
9+
function printTypescriptErrors(diagnotics: ReadonlyArray<ts.Diagnostic>) {
10+
diagnotics.forEach(diagnostic => {
11+
if (diagnostic.file) {
12+
let { line, character } = diagnostic.file.getLineAndCharacterOfPosition(
13+
diagnostic.start!,
14+
)
15+
let message = ts.flattenDiagnosticMessageText(
16+
diagnostic.messageText,
17+
'\n',
18+
)
19+
console.log(
20+
`${diagnostic.file.fileName} (${line + 1},${character +
21+
1}): ${message}`,
22+
)
23+
} else {
24+
console.log(
25+
`${ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n')}`,
26+
)
27+
}
28+
})
29+
}
30+
31+
function compileTypescript(fileNames: string[], compiledOutputDir: string) {
32+
const errors = ts
33+
.createProgram(fileNames, {
34+
sourceMap: false,
35+
noEmitOnError: true,
36+
target: ts.ScriptTarget.ESNext,
37+
module: ts.ModuleKind.CommonJS,
38+
outDir: compiledOutputDir,
39+
})
40+
.emit().diagnostics
41+
42+
if (errors.length > 0) {
43+
printTypescriptErrors(errors)
44+
}
45+
46+
expect(errors.length).toEqual(0)
47+
}
548

649
export function testGeneration(config: GraphQLGenDefinition) {
750
const schema = parseSchema(config.schema)
851

952
expect(validateConfig(config, schema)).toBe(true)
1053

11-
const modelMap = parseModels(config.models, schema, config.output, config.language)
54+
const modelMap = parseModels(
55+
config.models,
56+
schema,
57+
config.output,
58+
config.language,
59+
)
1260
const { generatedTypes, generatedResolvers } = generateCode({
1361
schema,
1462
language: config.language,
@@ -19,4 +67,36 @@ export function testGeneration(config: GraphQLGenDefinition) {
1967

2068
expect(generatedTypes).toMatchSnapshot()
2169
expect(generatedResolvers).toMatchSnapshot()
70+
71+
const restoreLog = console.log
72+
73+
// Mock console.log
74+
console.log = jest.fn()
75+
76+
writeTypes(generatedTypes, config)
77+
writeResolversScaffolding(generatedResolvers, config)
78+
79+
// Restore console log to print errors if there are any
80+
console.log = restoreLog
81+
82+
const outputResolversDir = config['resolver-scaffolding']!.output
83+
84+
const fileNames = [
85+
...generatedResolvers.map(resolver =>
86+
path.join(outputResolversDir, resolver.path),
87+
),
88+
config.output,
89+
]
90+
91+
const compiledOutputDir = path.join(path.dirname(config.output), 'compiled')
92+
93+
if (config.language === 'typescript') {
94+
compileTypescript(fileNames, compiledOutputDir)
95+
}
96+
97+
if (config.language === 'flow') {
98+
// compileFlow(fileNames)
99+
}
100+
101+
rimraf.sync(path.dirname(config.output))
22102
}

packages/graphqlgen/src/tests/typescript/__snapshots__/basic.test.ts.snap

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ exports[`basic enum 1`] = `
44
"// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT.
55
66
import { GraphQLResolveInfo } from \\"graphql\\";
7-
import { User } from \\"../../../fixtures/enum/types\\";
7+
import { User } from \\"../../fixtures/enum/types\\";
88
type Context = any;
99
1010
type EnumAnnotation = \\"EDITOR\\" | \\"COLLABORATOR\\";
@@ -167,7 +167,7 @@ exports[`basic input 1`] = `
167167
"// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT.
168168
169169
import { GraphQLResolveInfo } from \\"graphql\\";
170-
import { AddMemberPayload } from \\"../../../fixtures/input/types\\";
170+
import { AddMemberPayload } from \\"../../fixtures/input/types\\";
171171
type Context = any;
172172
173173
export namespace MutationResolvers {
@@ -337,7 +337,7 @@ exports[`basic scalar 1`] = `
337337
"// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT.
338338
339339
import { GraphQLResolveInfo } from \\"graphql\\";
340-
import { AddMemberPayload } from \\"../../../fixtures/scalar/types\\";
340+
import { AddMemberPayload } from \\"../../fixtures/scalar/types\\";
341341
type Context = any;
342342
343343
export namespace MutationResolvers {
@@ -453,7 +453,7 @@ exports[`basic schema 1`] = `
453453
"// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT.
454454
455455
import { GraphQLResolveInfo } from \\"graphql\\";
456-
import { Number } from \\"../../../fixtures/basic\\";
456+
import { Number } from \\"../../fixtures/basic\\";
457457
type Context = any;
458458
459459
export namespace QueryResolvers {
@@ -795,7 +795,7 @@ exports[`basic union 1`] = `
795795
"// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT.
796796
797797
import { GraphQLResolveInfo } from \\"graphql\\";
798-
import { User, Student, Professor } from \\"../../../fixtures/union/types\\";
798+
import { User, Student, Professor } from \\"../../fixtures/union/types\\";
799799
type Context = any;
800800
801801
export namespace UserResolvers {
@@ -972,8 +972,8 @@ exports[`context 1`] = `
972972
"// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT.
973973
974974
import { GraphQLResolveInfo } from \\"graphql\\";
975-
import { User } from \\"../../../fixtures/context/types\\";
976-
import { Context } from \\"../../../fixtures/context/types\\";
975+
import { User } from \\"../../fixtures/context/types\\";
976+
import { Context } from \\"../../fixtures/context/types\\";
977977
978978
export namespace QueryResolvers {
979979
export const defaultResolvers = {};
@@ -1079,7 +1079,7 @@ exports[`defaultName 1`] = `
10791079
"// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT.
10801080
10811081
import { GraphQLResolveInfo } from \\"graphql\\";
1082-
import { NumberNode } from \\"../../../fixtures/defaultName\\";
1082+
import { NumberNode } from \\"../../fixtures/defaultName\\";
10831083
type Context = any;
10841084
10851085
export namespace QueryResolvers {
@@ -1421,7 +1421,7 @@ exports[`subscription 1`] = `
14211421
"// Code generated by github.com/prisma/graphqlgen, DO NOT EDIT.
14221422
14231423
import { GraphQLResolveInfo } from \\"graphql\\";
1424-
import { User } from \\"../../../fixtures/subscription/types\\";
1424+
import { User } from \\"../../fixtures/subscription/types\\";
14251425
type Context = any;
14261426
14271427
export namespace SubscriptionResolvers {

packages/graphqlgen/src/tests/typescript/__snapshots__/large-schema.test.ts.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import {
3333
Message,
3434
AuthPayload,
3535
MutationResult
36-
} from \\"../../../fixtures/prisma/types\\";
36+
} from \\"../../fixtures/prisma/types\\";
3737
type Context = any;
3838

3939
type PLACE_SIZES =

packages/graphqlgen/src/tests/typescript/basic.test.ts

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,22 @@
11
import { testGeneration } from '../generation'
22
import { join } from 'path'
33

4-
const language = 'typescript'
54
const relative = (p: string) => join(__dirname, p)
65

6+
const typesDir = relative('./generated-basic/graphqlgen.ts')
7+
const resolversDir = relative('./generated-basic/tmp-resolvers/')
8+
const language = 'typescript'
9+
710
test('basic schema', async () => {
811
testGeneration({
912
language,
1013
schema: relative('../fixtures/basic/schema.graphql'),
1114
models: {
1215
files: [relative('../fixtures/basic/index.ts')],
1316
},
14-
output: relative('./generated/basic/graphqlgen.ts'),
17+
output: typesDir,
1518
['resolver-scaffolding']: {
16-
output: relative('./tmp/basic/'),
19+
output: resolversDir,
1720
layout: 'file-per-type',
1821
},
1922
})
@@ -26,9 +29,9 @@ test('basic enum', async () => {
2629
models: {
2730
files: [relative('../fixtures/enum/types.ts')],
2831
},
29-
output: relative('./generated/enum/graphqlgen.ts'),
32+
output: typesDir,
3033
['resolver-scaffolding']: {
31-
output: relative('./tmp/enum/'),
34+
output: resolversDir,
3235
layout: 'file-per-type',
3336
},
3437
})
@@ -41,9 +44,9 @@ test('basic union', async () => {
4144
models: {
4245
files: [relative('../fixtures/union/types.ts')],
4346
},
44-
output: relative('./generated/union/graphqlgen.ts'),
47+
output: typesDir,
4548
['resolver-scaffolding']: {
46-
output: relative('./tmp/union/'),
49+
output: resolversDir,
4750
layout: 'file-per-type',
4851
},
4952
})
@@ -61,9 +64,9 @@ test('defaultName', async () => {
6164
},
6265
],
6366
},
64-
output: relative('./generated/defaultName/graphqlgen.ts'),
67+
output: typesDir,
6568
['resolver-scaffolding']: {
66-
output: relative('./tmp/scalar/'),
69+
output: resolversDir,
6770
layout: 'file-per-type',
6871
},
6972
})
@@ -76,9 +79,9 @@ test('basic scalar', async () => {
7679
models: {
7780
files: [relative('../fixtures/scalar/types.ts')],
7881
},
79-
output: relative('./generated/scalar/graphqlgen.ts'),
82+
output: typesDir,
8083
['resolver-scaffolding']: {
81-
output: relative('./tmp/scalar/'),
84+
output: resolversDir,
8285
layout: 'file-per-type',
8386
},
8487
})
@@ -91,9 +94,9 @@ test('basic input', async () => {
9194
models: {
9295
files: [relative('../fixtures/input/types.ts')],
9396
},
94-
output: relative('./generated/input/graphqlgen.ts'),
97+
output: typesDir,
9598
['resolver-scaffolding']: {
96-
output: relative('./tmp/input/'),
99+
output: resolversDir,
97100
layout: 'file-per-type',
98101
},
99102
})
@@ -107,9 +110,9 @@ test('context', async () => {
107110
models: {
108111
files: [relative('../fixtures/context/types.ts')],
109112
},
110-
output: relative('./generated/context/graphqlgen.ts'),
113+
output: typesDir,
111114
['resolver-scaffolding']: {
112-
output: relative('./tmp/input/'),
115+
output: resolversDir,
113116
layout: 'file-per-type',
114117
},
115118
})
@@ -122,9 +125,9 @@ test('subscription', () => {
122125
models: {
123126
files: [relative('../fixtures/subscription/types.ts')],
124127
},
125-
output: relative('./generated/subscription/graphqlgen.ts'),
128+
output: typesDir,
126129
['resolver-scaffolding']: {
127-
output: relative('./tmp/input/'),
130+
output: resolversDir,
128131
layout: 'file-per-type',
129132
},
130133
})

0 commit comments

Comments
 (0)