Skip to content

Commit abe963c

Browse files
committed
chore: Add unit tests for email and phone verification
1 parent a389214 commit abe963c

2 files changed

Lines changed: 72 additions & 2 deletions

File tree

packages/ui/src/components/UserProfile/__tests__/EmailsSection.test.tsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,42 @@ describe('EmailSection', () => {
9595
});
9696
});
9797

98+
describe('Add email with attribute disabled for sign-up but used for sign-in', () => {
99+
const disabledForSignUpConfig = createFixtures.config(f => {
100+
f.withEmailAddress({ enabled: false, used_for_first_factor: true });
101+
f.withUser({ username: 'georgeclerk' });
102+
});
103+
104+
it('renders add email screen', async () => {
105+
const { wrapper } = await createFixtures(disabledForSignUpConfig);
106+
107+
const { getByRole, userEvent, getByLabelText, findByRole } = render(<EmailsSection />, { wrapper });
108+
await userEvent.click(getByRole('button', { name: 'Add email address' }));
109+
await findByRole('heading', { name: /Add email address/i });
110+
getByLabelText(/email address/i);
111+
});
112+
113+
it('can add an email and reach the verification screen', async () => {
114+
const { wrapper, fixtures } = await createFixtures(disabledForSignUpConfig);
115+
116+
const { getByRole, userEvent, getByLabelText, findByRole } = render(<EmailsSection />, { wrapper });
117+
await userEvent.click(getByRole('button', { name: 'Add email address' }));
118+
await findByRole('heading', { name: /Add email address/i });
119+
120+
fixtures.clerk.user?.createEmailAddress.mockReturnValueOnce(
121+
Promise.resolve({
122+
emailAddress: 'test+2@clerk.com',
123+
prepareVerification: vi.fn().mockReturnValueOnce(Promise.resolve({} as any)),
124+
} as any),
125+
);
126+
127+
await userEvent.type(getByLabelText(/email address/i), 'test+2@clerk.com');
128+
await userEvent.click(getByRole('button', { name: /add$/i }));
129+
expect(fixtures.clerk.user?.createEmailAddress).toHaveBeenCalledWith({ email: 'test+2@clerk.com' });
130+
await findByRole('heading', { name: /Verify email address/i });
131+
});
132+
});
133+
98134
describe('Remove email', () => {
99135
it('Renders remove screen', async () => {
100136
const { wrapper } = await createFixtures(withEmails);

packages/ui/src/components/UserProfile/__tests__/PhoneSection.test.tsx

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { act } from '@testing-library/react';
2-
import { describe, expect, it } from 'vitest';
2+
import { describe, expect, it, vi } from 'vitest';
33

44
import { bindCreateFixtures } from '@/test/create-fixtures';
55
import { render, screen } from '@/test/utils';
@@ -335,5 +335,39 @@ describe('PhoneSection', () => {
335335
});
336336
});
337337

338-
it.todo('Test for verification of added phone number');
338+
describe('Add phone with attribute disabled for sign-up but used for sign-in', () => {
339+
const disabledForSignUpConfig = createFixtures.config(f => {
340+
f.withPhoneNumber({ enabled: false, used_for_first_factor: true });
341+
f.withUser({ email_addresses: ['test@clerk.com'] });
342+
});
343+
344+
it('renders add phone screen', async () => {
345+
const { wrapper } = await createFixtures(disabledForSignUpConfig);
346+
347+
const { getByRole, userEvent, getByLabelText, findByRole } = render(<PhoneSection />, { wrapper });
348+
await userEvent.click(getByRole('button', { name: 'Add phone number' }));
349+
await findByRole('heading', { name: /Add phone number/i });
350+
getByLabelText(/phone number/i);
351+
});
352+
353+
it('can add a phone and reach the verification screen', async () => {
354+
const { wrapper, fixtures } = await createFixtures(disabledForSignUpConfig);
355+
356+
const { getByRole, userEvent, getByLabelText, findByRole } = render(<PhoneSection />, { wrapper });
357+
await userEvent.click(getByRole('button', { name: 'Add phone number' }));
358+
await findByRole('heading', { name: /Add phone number/i });
359+
360+
fixtures.clerk.user?.createPhoneNumber.mockReturnValueOnce(
361+
Promise.resolve({
362+
phoneNumber: '+16911111111',
363+
prepareVerification: vi.fn().mockReturnValueOnce(Promise.resolve({} as any)),
364+
} as any),
365+
);
366+
367+
await userEvent.type(getByLabelText(/phone number/i), '6911111111');
368+
await userEvent.click(getByRole('button', { name: /add$/i }));
369+
expect(fixtures.clerk.user?.createPhoneNumber).toHaveBeenCalledWith({ phoneNumber: '+16911111111' });
370+
await findByRole('heading', { name: /Verify phone number/i });
371+
});
372+
});
339373
});

0 commit comments

Comments
 (0)