Skip to content

Commit 7bb33d9

Browse files
committed
fix(settings): Fix back arrow navigation from step 2 of recovery phone setup
Because: * Back arrow on step 2 was returning to settings This commit: * Return to step 1 * Add test cases Closes #FXA-11178
1 parent 126ea5c commit 7bb33d9

File tree

3 files changed

+80
-7
lines changed

3 files changed

+80
-7
lines changed

packages/fxa-settings/src/components/Settings/PageRecoveryPhoneSetup/en.ftl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@
33
page-setup-recovery-phone-heading = Add recovery phone
44
55
page-setup-recovery-phone-back-button-title = Back to settings
6+
# Back arrow to return to step 1 of recovery phone setup flow
7+
page-setup-recovery-phone-step2-back-button-title = Change phone number

packages/fxa-settings/src/components/Settings/PageRecoveryPhoneSetup/index.test.tsx

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ import {
1414

1515
jest.mock('../../../models/AlertBarInfo');
1616

17+
const mockNavigate = jest.fn();
18+
jest.mock('@reach/router', () => ({
19+
...jest.requireActual('@reach/router'),
20+
useNavigate: () => mockNavigate,
21+
}));
22+
1723
const phoneNumberWithoutCountryCode = MOCK_FULL_PHONE_NUMBER.slice(2);
1824
const otpCode = '123456';
1925
const mockSuccessResponse = {
@@ -118,4 +124,58 @@ describe('PageRecoveryPhoneSetup', () => {
118124
MOCK_FULL_PHONE_NUMBER
119125
);
120126
});
127+
128+
it('at step 1, handles back arrow click to return to settings', async () => {
129+
const user = userEvent.setup();
130+
const confirmRecoveryPhone = jest
131+
.fn()
132+
.mockResolvedValueOnce(mockSuccessResponse);
133+
const addRecoveryPhone = jest
134+
.fn()
135+
.mockResolvedValueOnce(mockSuccessResponse);
136+
renderWithRouter(
137+
<Subject account={{ confirmRecoveryPhone, addRecoveryPhone }} />
138+
);
139+
140+
await waitFor(() =>
141+
expect(
142+
screen.getByRole('heading', { name: 'Verify your phone number' })
143+
).toBeVisible()
144+
);
145+
146+
await waitFor(async () => {
147+
user.click(screen.getByRole('button', { name: 'Back to settings' }));
148+
});
149+
150+
await waitFor(() => expect(mockNavigate).toHaveBeenCalledTimes(1));
151+
});
152+
153+
it('at step 2, handles back arrow click to return to step 1', async () => {
154+
const user = userEvent.setup();
155+
const confirmRecoveryPhone = jest
156+
.fn()
157+
.mockResolvedValueOnce(mockSuccessResponse);
158+
const addRecoveryPhone = jest
159+
.fn()
160+
.mockResolvedValueOnce(mockSuccessResponse);
161+
renderWithRouter(
162+
<Subject account={{ confirmRecoveryPhone, addRecoveryPhone }} />
163+
);
164+
165+
await completeStepOne(user);
166+
await waitFor(() => {
167+
expect(
168+
screen.getByText(/A six-digit code was sent/i)
169+
).toBeInTheDocument();
170+
});
171+
await waitFor(async () => {
172+
user.click(screen.getByRole('button', { name: 'Change phone number' }));
173+
});
174+
175+
await waitFor(() =>
176+
expect(
177+
screen.getByRole('heading', { name: 'Verify your phone number' })
178+
).toBeVisible()
179+
);
180+
});
121181
});

packages/fxa-settings/src/components/Settings/PageRecoveryPhoneSetup/index.tsx

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,24 @@ export const PageRecoveryPhoneSetup = (_: RouteComponentProps) => {
3636
'Add recovery phone'
3737
);
3838

39-
const localizedBackButtonTitle = ftlMsgResolver.getMsg(
40-
'page-setup-recovery-phone-back-button-title',
41-
'Back to settings'
42-
);
43-
44-
const navigateBackward = () => {
45-
navigate(SETTINGS_PATH);
39+
const localizedBackButtonTitle =
40+
currentStep === 1
41+
? ftlMsgResolver.getMsg(
42+
'page-setup-recovery-phone-back-button-title',
43+
'Back to settings'
44+
)
45+
: ftlMsgResolver.getMsg(
46+
'page-setup-recovery-phone-step2-back-button-title',
47+
'Change phone number'
48+
);
49+
50+
const navigateBackward = (e?: React.MouseEvent<HTMLElement>) => {
51+
e?.preventDefault();
52+
if (currentStep > 1) {
53+
setCurrentStep(currentStep - 1);
54+
} else {
55+
navigate(SETTINGS_PATH);
56+
}
4657
};
4758

4859
const navigateForward = (e?: React.MouseEvent<HTMLElement>) => {

0 commit comments

Comments
 (0)