Skip to content

Commit

Permalink
test: added test to zod unions
Browse files Browse the repository at this point in the history
  • Loading branch information
logaretm committed Aug 17, 2024
1 parent 8a96a3c commit e20a4ed
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions packages/schema-zod/src/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -204,4 +204,59 @@ describe('schema-zod', () => {
expect(screen.getByTestId('e1').textContent).toBe('');
expect(screen.getByTestId('e2').textContent).toBe('');
});

test('handles zod union errors', async () => {
await render({
components: { Child: createInputComponent() },
setup() {
const schema = z.object({
email: z.string().email({ message: 'valid email' }).min(1, 'Email is required'),
name: z.string().min(1, 'Name is required'),
});

const schemaBothUndefined = z.object({
email: z.undefined(),
name: z.undefined(),
});

const bothOrNeither = schema.or(schemaBothUndefined);

const { getError } = useForm({
schema: defineSchema(bothOrNeither),
});

return {
schema,
getError,
};
},
template: `
<div>
<Child name="email" />
<span data-testid="emailErr">{{ getError('email') }}</span>
<Child name="name" />
<span data-testid="nameErr">{{ getError('name') }}</span>
</div>
`,
});

const emailField = screen.getByTestId('email');
const nameField = screen.getByTestId('name');
const emailError = screen.getByTestId('emailErr');
const nameError = screen.getByTestId('nameErr');

await flush();

await fireEvent.update(nameField, '4');
await fireEvent.blur(nameField);
await flush();
expect(nameError.textContent).toBe('Expected undefined, received string');
await fireEvent.update(emailField, '[email protected]');
await fireEvent.blur(nameField);
await flush();

expect(emailError.textContent).toBe('');
expect(nameError.textContent).toBe('');
});
});

0 comments on commit e20a4ed

Please sign in to comment.