Skip to content

Commit 3c7cf8c

Browse files
committed
Set up defaultScalarType tests
1 parent 5d5c965 commit 3c7cf8c

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
import { mergeOutputs } from '@graphql-codegen/plugin-helpers';
2+
import { validateTs } from '@graphql-codegen/testing';
3+
import { buildSchema, parse } from 'graphql';
4+
import { plugin } from '../src/index.js';
5+
6+
describe('TypeScript Operations Plugin - Default Scalar types', () => {
7+
it('generates `unknown` as the default custom defaultScalarType', async () => {
8+
const schema = buildSchema(/* GraphQL */ `
9+
type Query {
10+
user(id: ID!, nonNullableDate: DateTime!, nullableDate: DateTime, input: UserInput!): User
11+
}
12+
13+
input UserInput {
14+
nonNullableDate: DateTime!
15+
nullableDate: DateTime
16+
}
17+
18+
type User {
19+
id: ID!
20+
nonNullableDate: DateTime!
21+
nullableDate: DateTime
22+
}
23+
24+
scalar DateTime
25+
`);
26+
const document = parse(/* GraphQL */ `
27+
query User($nonNullableDate: DateTime!, $nullableDate: DateTime, $input: UserInput!) {
28+
user(id: "1", nonNullableDate: $nonNullableDate, nullableDate: $nullableDate, input: $input) {
29+
id
30+
nonNullableDate
31+
nullableDate
32+
}
33+
}
34+
`);
35+
36+
const result = mergeOutputs([await plugin(schema, [{ document }], {}, { outputFile: '' })]);
37+
38+
expect(result).toMatchInlineSnapshot(`
39+
"type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
40+
export type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
41+
type UserInput = {
42+
nonNullableDate: unknown;
43+
nullableDate?: unknown;
44+
};
45+
46+
export type UserQueryVariables = Exact<{
47+
nonNullableDate: unknown;
48+
nullableDate?: unknown;
49+
input: UserInput;
50+
}>;
51+
52+
53+
export type UserQuery = { user: { id: string, nonNullableDate: unknown, nullableDate: unknown } | null };
54+
"
55+
`);
56+
57+
validateTs(result, undefined, undefined, undefined, undefined, true);
58+
});
59+
60+
it("generates `any` when defaultScalarType:'any'", async () => {
61+
const schema = buildSchema(/* GraphQL */ `
62+
type Query {
63+
user(id: ID!, nonNullableDate: DateTime!, nullableDate: DateTime, input: UserInput!): User
64+
}
65+
66+
input UserInput {
67+
nonNullableDate: DateTime!
68+
nullableDate: DateTime
69+
}
70+
71+
type User {
72+
id: ID!
73+
nonNullableDate: DateTime!
74+
nullableDate: DateTime
75+
}
76+
77+
scalar DateTime
78+
`);
79+
const document = parse(/* GraphQL */ `
80+
query User($nonNullableDate: DateTime!, $nullableDate: DateTime, $input: UserInput!) {
81+
user(id: "1", nonNullableDate: $nonNullableDate, nullableDate: $nullableDate, input: $input) {
82+
id
83+
nonNullableDate
84+
nullableDate
85+
}
86+
}
87+
`);
88+
89+
const result = mergeOutputs([
90+
await plugin(schema, [{ document }], { defaultScalarType: 'any' }, { outputFile: '' }),
91+
]);
92+
93+
expect(result).toMatchInlineSnapshot(`
94+
"type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
95+
export type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
96+
type UserInput = {
97+
nonNullableDate: any;
98+
nullableDate?: any;
99+
};
100+
101+
export type UserQueryVariables = Exact<{
102+
nonNullableDate: any;
103+
nullableDate?: any;
104+
input: UserInput;
105+
}>;
106+
107+
108+
export type UserQuery = { user: { id: string, nonNullableDate: any, nullableDate: any } | null };
109+
"
110+
`);
111+
112+
validateTs(result, undefined, undefined, undefined, undefined, true);
113+
});
114+
115+
it('generates `any` when defaultScalarType is set to arbitrary types', async () => {
116+
const schema = buildSchema(/* GraphQL */ `
117+
type Query {
118+
user(id: ID!, nonNullableDate: DateTime!, nullableDate: DateTime, input: UserInput!): User
119+
}
120+
121+
input UserInput {
122+
nonNullableDate: DateTime!
123+
nullableDate: DateTime
124+
}
125+
126+
type User {
127+
id: ID!
128+
nonNullableDate: DateTime!
129+
nullableDate: DateTime
130+
}
131+
132+
scalar DateTime
133+
`);
134+
const document = parse(/* GraphQL */ `
135+
query User($nonNullableDate: DateTime!, $nullableDate: DateTime, $input: UserInput!) {
136+
user(id: "1", nonNullableDate: $nonNullableDate, nullableDate: $nullableDate, input: $input) {
137+
id
138+
nonNullableDate
139+
nullableDate
140+
}
141+
}
142+
`);
143+
144+
const result = mergeOutputs([
145+
await plugin(schema, [{ document }], { defaultScalarType: 'Date' }, { outputFile: '' }),
146+
]);
147+
148+
expect(result).toMatchInlineSnapshot(`
149+
"type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
150+
export type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
151+
type UserInput = {
152+
nonNullableDate: Date;
153+
nullableDate?: Date | null | undefined;
154+
};
155+
156+
export type UserQueryVariables = Exact<{
157+
nonNullableDate: Date;
158+
nullableDate?: Date | null | undefined;
159+
input: UserInput;
160+
}>;
161+
162+
163+
export type UserQuery = { user: { id: string, nonNullableDate: Date, nullableDate: Date | null } | null };
164+
"
165+
`);
166+
167+
validateTs(result, undefined, undefined, undefined, undefined, true);
168+
});
169+
});

0 commit comments

Comments
 (0)