Skip to content

Commit 92defaa

Browse files
simonljusCode-Hex
authored andcommitted
add test case for yup
1 parent 80a0f53 commit 92defaa

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

tests/yup.spec.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,89 @@ describe('yup', () => {
459459
expect(result.content).not.toContain(wantNotContain);
460460
}
461461
});
462+
it('generate object type contains interface type', async () => {
463+
const schema = buildSchema(/* GraphQL */ `
464+
interface Book {
465+
title: String!
466+
author: Author!
467+
}
468+
469+
type Textbook implements Book {
470+
title: String!
471+
author: Author!
472+
courses: [String!]!
473+
}
474+
475+
type ColoringBook implements Book {
476+
title: String!
477+
author: Author!
478+
colors: [String!]!
479+
}
480+
481+
type Author {
482+
books: [Book!]
483+
name: String
484+
}
485+
`);
486+
const result = await plugin(
487+
schema,
488+
[],
489+
{
490+
schema: 'yup',
491+
withInterfaceType: true,
492+
withObjectType: true,
493+
},
494+
{}
495+
);
496+
const wantContains = [
497+
[
498+
'export function BookSchema(): yup.ObjectSchema<Book> {',
499+
'return yup.object({',
500+
'title: yup.string().defined().nonNullable(),',
501+
'author: AuthorSchema().nonNullable()',
502+
'})',
503+
'}',
504+
],
505+
506+
[
507+
'export function TextbookSchema(): yup.ObjectSchema<Textbook> {',
508+
'return yup.object({',
509+
"__typename: yup.string<'Textbook'>().optional(),",
510+
'title: yup.string().defined().nonNullable(),',
511+
'author: AuthorSchema().nonNullable(),',
512+
'courses: yup.array(yup.string().defined().nonNullable()).defined()',
513+
'})',
514+
'}',
515+
],
516+
517+
[
518+
'export function ColoringBookSchema(): yup.ObjectSchema<ColoringBook> {',
519+
'return yup.object({',
520+
"__typename: yup.string<'ColoringBook'>().optional(),",
521+
'title: yup.string().defined().nonNullable(),',
522+
'author: AuthorSchema().nonNullable(),',
523+
'colors: yup.array(yup.string().defined().nonNullable()).defined()',
524+
'})',
525+
'}',
526+
],
527+
528+
[
529+
'export function AuthorSchema(): yup.ObjectSchema<Author> {',
530+
'return yup.object({',
531+
"__typename: yup.string<'Author'>().optional(),",
532+
'books: yup.array(BookSchema().nonNullable()).defined().nullable().optional(),',
533+
'name: yup.string().defined().nullable().optional()',
534+
'})',
535+
'}',
536+
],
537+
];
538+
539+
for (const wantContain of wantContains) {
540+
for (const wantContainLine of wantContain) {
541+
expect(result.content).toContain(wantContainLine);
542+
}
543+
}
544+
});
462545
});
463546

464547
describe('with withObjectType', () => {

0 commit comments

Comments
 (0)