Skip to content

Commit 0b36e76

Browse files
committed
Add standalone.input.spec.ts to TDD
1 parent db05491 commit 0b36e76

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
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 - Input', () => {
7+
it('generates nested input correctly', async () => {
8+
const schema = buildSchema(/* GraphQL */ `
9+
type Query {
10+
users(input: UsersInput!): [User!]!
11+
}
12+
13+
type ResponseError {
14+
error: ResponseErrorType!
15+
}
16+
17+
enum ResponseErrorType {
18+
NOT_FOUND
19+
INPUT_VALIDATION_ERROR
20+
FORBIDDEN_ERROR
21+
UNEXPECTED_ERROR
22+
}
23+
24+
type User {
25+
id: ID!
26+
ageRange1: [Int]
27+
ageRange2: [Int]!
28+
ageRange3: [Int!]
29+
ageRange4: [Int!]!
30+
}
31+
32+
"UserRole Description"
33+
enum UserRole {
34+
"UserRole ADMIN"
35+
ADMIN
36+
"UserRole CUSTOMER"
37+
CUSTOMER
38+
}
39+
40+
"UsersInput Description"
41+
input UsersInput {
42+
"UsersInput from"
43+
from: DateTime
44+
"UsersInput to"
45+
to: DateTime
46+
timezone: TimeZone
47+
role: UserRole
48+
ageRange1: [Int]
49+
ageRange2: [Int]!
50+
ageRange3: [Int!]
51+
ageRange4: [Int!]!
52+
bestFriend: UsersBestFriendInput
53+
nestedInput: UsersInput
54+
}
55+
56+
input UsersBestFriendInput {
57+
name: String
58+
}
59+
60+
type UsersResponseOk {
61+
result: [User!]!
62+
}
63+
union UsersResponse = UsersResponseOk | ResponseError
64+
65+
scalar DateTime
66+
scalar TimeZone
67+
`);
68+
const document = parse(/* GraphQL */ `
69+
query UsersWithScalarInput($inputNonNullable: UsersInput!, $inputNullable: UsersInput) {
70+
users(input: $inputNonNullable) {
71+
ageRange1
72+
ageRange2
73+
ageRange3
74+
ageRange4
75+
}
76+
}
77+
`);
78+
79+
const result = mergeOutputs([
80+
await plugin(
81+
schema,
82+
[{ document }],
83+
{
84+
scalars: {
85+
DateTime: 'Date',
86+
},
87+
},
88+
{ outputFile: '' }
89+
),
90+
]);
91+
92+
expect(result).toMatchInlineSnapshot(`
93+
"type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
94+
export type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
95+
/** UserRole Description */
96+
export type UserRole =
97+
/** UserRole ADMIN */
98+
| 'ADMIN'
99+
/** UserRole CUSTOMER */
100+
| 'CUSTOMER';
101+
102+
/** UsersInput Description */
103+
type UsersInput = {
104+
/** UsersInput from */
105+
from?: Date | null | undefined;
106+
/** UsersInput to */
107+
to?: Date | null | undefined;
108+
timezone?: any;
109+
role?: UserRole | null | undefined;
110+
ageRange1?: Array<number | null | undefined> | null | undefined;
111+
ageRange2: Array<number | null | undefined>;
112+
ageRange3?: Array<number> | null | undefined;
113+
ageRange4: Array<number>;
114+
bestFriend?: UsersBestFriendInput | null | undefined;
115+
nestedInput?: UsersInput | null | undefined;
116+
};
117+
118+
type UsersBestFriendInput = {
119+
name?: string | null | undefined;
120+
};
121+
122+
export type UsersWithScalarInputQueryVariables = Exact<{
123+
inputNonNullable: UsersInput;
124+
inputNullable?: UsersInput | null | undefined;
125+
}>;
126+
127+
128+
export type UsersWithScalarInputQuery = { __typename?: 'Query', users: Array<{ __typename?: 'User', ageRange1: Array<number | null> | null, ageRange2: Array<number | null>, ageRange3: Array<number> | null, ageRange4: Array<number> }> };
129+
"
130+
`);
131+
132+
validateTs(result, undefined, undefined, undefined, undefined, true);
133+
});
134+
});

0 commit comments

Comments
 (0)