Skip to content

Commit d9ed864

Browse files
authored
@W-20279800 Update Passwordless E2E tests and change "Continue Securely" to "Continue" (#3556)
* update passwordless and password reset e2e tests to veirfy mode email is used * Update EXTRA_FEATURES_E2E_RETAIL_APP_HOME to support environment variable configuration * Update mobile e2e tests to verify 'email' mode for passwordless login and password reset requests * update "continue securely" to "continue"
1 parent 11be87e commit d9ed864

File tree

14 files changed

+36
-45
lines changed

14 files changed

+36
-45
lines changed

e2e/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ module.exports = {
170170
PWA_E2E_USER_EMAIL: process.env.PWA_E2E_USER_EMAIL,
171171
PWA_E2E_USER_PASSWORD: process.env.PWA_E2E_USER_PASSWORD,
172172
EXTRA_FEATURES_E2E_RETAIL_APP_HOME:
173+
process.env.EXTRA_FEATURES_E2E_RETAIL_APP_HOME ||
173174
'https://scaffold-pwa-extra-features-e2e.mobify-storefront.com',
174175
EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE: 'RefArchGlobal'
175176
}

e2e/tests/desktop/extra-features.spec.js

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ test('Verify passwordless login request', async ({page}) => {
3232
await page.locator('#email').scrollIntoViewIfNeeded()
3333
await page.fill('#email', config.PWA_E2E_USER_EMAIL)
3434

35-
await page.getByRole('button', {name: 'Continue Securely'}).click()
35+
await page.getByRole('button', {name: 'Continue'}).click()
3636

3737
await page.waitForResponse(
3838
'**/mobify/slas/private/shopper/auth/v1/organizations/*/oauth2/passwordless/login'
@@ -47,12 +47,11 @@ test('Verify passwordless login request', async ({page}) => {
4747
const params = new URLSearchParams(postData)
4848

4949
expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
50-
expect(params.get('mode')).toBe('callback')
50+
expect(params.get('mode')).toBe('email')
5151
expect(params.get('channel_id')).toBe(config.EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE)
52-
expect(params.get('callback_uri')).toMatch(/.*\/passwordless-login-callback$/)
5352
})
5453

55-
test('Verify password reset callback request', async ({page}) => {
54+
test('Verify password reset request', async ({page}) => {
5655
let interceptedRequest = null
5756

5857
await page.route(
@@ -88,16 +87,13 @@ test('Verify password reset callback request', async ({page}) => {
8887
const params = new URLSearchParams(postData)
8988

9089
expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
91-
expect(params.get('mode')).toBe('callback')
90+
expect(params.get('mode')).toBe('email')
9291
expect(params.get('channel_id')).toBe(config.EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE)
93-
expect(params.get('callback_uri')).toMatch(/.*\/reset-password-callback$/)
9492
expect(params.get('hint')).toBe('cross_device')
9593
})
9694

9795
// Verify on the login UI that looks different when extra login features are not enabled
98-
test('Verify password reset callback request when extra login features are not enabled', async ({
99-
page
100-
}) => {
96+
test('Verify password reset request when extra login features are not enabled', async ({page}) => {
10197
let interceptedRequest = null
10298

10399
await page.route(
@@ -132,13 +128,12 @@ test('Verify password reset callback request when extra login features are not e
132128
const params = new URLSearchParams(postData)
133129

134130
expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
135-
expect(params.get('mode')).toBe('callback')
131+
expect(params.get('mode')).toBe('email')
136132
expect(params.get('channel_id')).toBe(config.RETAIL_APP_HOME_SITE)
137-
expect(params.get('callback_uri')).toMatch(/.*\/reset-password-callback$/)
138133
expect(params.get('hint')).toBe('cross_device')
139134
})
140135

141-
test('Verify password reset request', async ({page}) => {
136+
test('Verify password reset action request', async ({page}) => {
142137
let interceptedRequest = null
143138
await page.route(
144139
'**/mobify/slas/private/shopper/auth/v1/organizations/*/oauth2/password/action',

e2e/tests/mobile/extra-features.spec.js

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ test('Verify passwordless login request on mobile', async ({page}) => {
3333
await page.locator('#email').scrollIntoViewIfNeeded()
3434
await page.fill('#email', config.PWA_E2E_USER_EMAIL)
3535

36-
await page.getByRole('button', {name: 'Continue Securely'}).scrollIntoViewIfNeeded()
37-
await page.getByRole('button', {name: 'Continue Securely'}).click()
36+
await page.getByRole('button', {name: 'Continue'}).scrollIntoViewIfNeeded()
37+
await page.getByRole('button', {name: 'Continue'}).click()
3838

3939
await page.waitForResponse(
4040
'**/mobify/slas/private/shopper/auth/v1/organizations/*/oauth2/passwordless/login'
@@ -49,14 +49,11 @@ test('Verify passwordless login request on mobile', async ({page}) => {
4949
const params = new URLSearchParams(postData)
5050

5151
expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
52-
expect(params.get('mode')).toBe('callback')
52+
expect(params.get('mode')).toBe('email')
5353
expect(params.get('channel_id')).toBe(config.EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE)
54-
expect(params.get('callback_uri')).toMatch(/.*\/passwordless-login-callback$/)
5554
})
5655

57-
test('Verify password reset callback request on mobile (extra features enabled)', async ({
58-
page
59-
}) => {
56+
test('Verify password reset request on mobile (extra features enabled)', async ({page}) => {
6057
let interceptedRequest = null
6158

6259
await page.route(
@@ -92,13 +89,12 @@ test('Verify password reset callback request on mobile (extra features enabled)'
9289
const params = new URLSearchParams(postData)
9390

9491
expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
95-
expect(params.get('mode')).toBe('callback')
92+
expect(params.get('mode')).toBe('email')
9693
expect(params.get('channel_id')).toBe(config.EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE)
97-
expect(params.get('callback_uri')).toMatch(/.*\/reset-password-callback$/)
9894
expect(params.get('hint')).toBe('cross_device')
9995
})
10096

101-
test('Verify password reset callback request on mobile when extra login features are not enabled', async ({
97+
test('Verify password reset request on mobile when extra login features are not enabled', async ({
10298
page
10399
}) => {
104100
let interceptedRequest = null
@@ -136,13 +132,12 @@ test('Verify password reset callback request on mobile when extra login features
136132
const params = new URLSearchParams(postData)
137133

138134
expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
139-
expect(params.get('mode')).toBe('callback')
135+
expect(params.get('mode')).toBe('email')
140136
expect(params.get('channel_id')).toBe(config.RETAIL_APP_HOME_SITE)
141-
expect(params.get('callback_uri')).toMatch(/.*\/reset-password-callback$/)
142137
expect(params.get('hint')).toBe('cross_device')
143138
})
144139

145-
test('Verify password reset request on mobile', async ({page}) => {
140+
test('Verify password reset action request on mobile', async ({page}) => {
146141
let interceptedRequest = null
147142
await page.route(
148143
'**/mobify/slas/private/shopper/auth/v1/organizations/*/oauth2/password/action',

packages/template-retail-react-app/CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
## v8.4.0-dev (Dec 17, 2025)
22
- [Feature] Add `fuzzyPathMatching` to reduce computational overhead of route generation at time of application load [#3530](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3530)
3+
- Update passwordless login and password reset to use email mode by default. The mode can now be configured across the login page, auth modal, and checkout page [#3492](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3492) [#3547](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3547)
4+
- Update "Continue Securely" button text to "Continue" for passwordless login [#3556](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3556)
35

46
## v8.3.0 (Dec 17, 2025)
57
- [Bugfix] Fix Forgot Password link not working from Account Profile password update form [#3493](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3493)
68
- Introduce Address Autocompletion feature in the checkout flow, powered by Google Maps Platform [#3071](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3071)
79

8-
- Update passwordless login and password reset to use email mode by default. The mode can now be configured across the login page, auth modal, and checkout page [#3492](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3492) [#3547](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3547)
9-
1010
## v8.2.0 (Nov 04, 2025)
1111
- Add support for Rule Based Promotions for Choice of Bonus Products. We are currently supporting only one product level rule based promotion per product [#3418](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3418)
1212
- Add support for Rule Based Promotions for Choice of Bonus Products. We are currently supporting only one product level rule based promotion per product [#3418](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3418)

packages/template-retail-react-app/app/components/login/index.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ describe('LoginForm', () => {
2323
expect(screen.getByText(/Welcome Back/)).toBeInTheDocument()
2424
expect(screen.getByLabelText('Email')).toBeInTheDocument()
2525
expect(screen.queryByLabelText('Password')).not.toBeInTheDocument()
26-
expect(screen.getByRole('button', {name: 'Continue Securely'})).toBeInTheDocument()
26+
expect(screen.getByRole('button', {name: 'Continue'})).toBeInTheDocument()
2727
expect(screen.getByText(/Or Login With/)).toBeInTheDocument()
2828
expect(screen.getByRole('button', {name: 'Password'})).toBeInTheDocument()
2929
expect(screen.getByText(/Don't have an account/)).toBeInTheDocument()
3030
expect(screen.getByRole('button', {name: 'Create account'})).toBeInTheDocument()
3131
})
3232

33-
test('renders form errors when "Continue Securely" button is clicked', async () => {
33+
test('renders form errors when "Continue" button is clicked', async () => {
3434
const mockPasswordlessLoginClick = jest.fn()
3535
const {user} = renderWithProviders(
3636
<WrapperComponent
@@ -39,7 +39,7 @@ describe('LoginForm', () => {
3939
/>
4040
)
4141

42-
await user.click(screen.getByRole('button', {name: 'Continue Securely'}))
42+
await user.click(screen.getByRole('button', {name: 'Continue'}))
4343
expect(screen.getByText(/Please enter your email address./)).toBeInTheDocument()
4444
})
4545

packages/template-retail-react-app/app/components/passwordless-login/index.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const PasswordlessLogin = ({
5454
isLoading={form.formState.isSubmitting}
5555
>
5656
<FormattedMessage
57-
defaultMessage="Continue Securely"
57+
defaultMessage="Continue"
5858
id="login_form.button.continue_securely"
5959
/>
6060
</Button>

packages/template-retail-react-app/app/components/passwordless-login/index.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ describe('PasswordlessLogin component', () => {
2525

2626
expect(screen.getByLabelText('Email')).toBeInTheDocument()
2727
expect(screen.queryByLabelText('Password')).not.toBeInTheDocument()
28-
expect(screen.getByRole('button', {name: 'Continue Securely'})).toBeInTheDocument()
28+
expect(screen.getByRole('button', {name: 'Continue'})).toBeInTheDocument()
2929
expect(screen.getByText(/Or Login With/)).toBeInTheDocument()
3030
expect(screen.getByRole('button', {name: 'Password'})).toBeInTheDocument()
3131
})

packages/template-retail-react-app/app/hooks/use-auth-modal.test.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ test('allows regular login via Enter key in password mode', async () => {
192192
await user.click(trigger)
193193

194194
await waitFor(() => {
195-
expect(screen.getByText(/continue securely/i)).toBeInTheDocument()
195+
expect(screen.getByText(/Continue/i)).toBeInTheDocument()
196196
})
197197

198198
// enter email and switch to password mode
@@ -223,7 +223,7 @@ describe('Passwordless enabled', () => {
223223
await user.click(trigger)
224224

225225
await waitFor(() => {
226-
expect(screen.getByText(/continue securely/i)).toBeInTheDocument()
226+
expect(screen.getByText(/Continue/i)).toBeInTheDocument()
227227
})
228228
})
229229

@@ -240,14 +240,14 @@ describe('Passwordless enabled', () => {
240240
await user.click(trigger)
241241

242242
await waitFor(() => {
243-
expect(screen.getByText(/continue securely/i)).toBeInTheDocument()
243+
expect(screen.getByText(/Continue/i)).toBeInTheDocument()
244244
})
245245

246246
// enter a valid email address
247247
await user.type(screen.getByLabelText('Email'), validEmail)
248248

249249
// initiate passwordless login
250-
const passwordlessLoginButton = screen.getByText(/continue securely/i)
250+
const passwordlessLoginButton = screen.getByText(/Continue/i)
251251
await user.click(passwordlessLoginButton)
252252
expect(
253253
mockAuthHelperFunctions[AuthHelpers.AuthorizePasswordless].mutateAsync
@@ -289,7 +289,7 @@ describe('Passwordless enabled', () => {
289289
await user.click(trigger)
290290

291291
await waitFor(() => {
292-
expect(screen.getByText(/continue securely/i)).toBeInTheDocument()
292+
expect(screen.getByText(/Continue/i)).toBeInTheDocument()
293293
})
294294

295295
// enter a valid email address
@@ -343,11 +343,11 @@ describe('Passwordless enabled', () => {
343343
await user.click(trigger)
344344

345345
await waitFor(() => {
346-
expect(screen.getByText(/continue securely/i)).toBeInTheDocument()
346+
expect(screen.getByText(/Continue/i)).toBeInTheDocument()
347347
})
348348

349349
await user.type(screen.getByLabelText('Email'), validEmail)
350-
await user.click(screen.getByText(/continue securely/i))
350+
await user.click(screen.getByText(/Continue/i))
351351

352352
expect(
353353
mockAuthHelperFunctions[AuthHelpers.AuthorizePasswordless].mutateAsync

packages/template-retail-react-app/app/pages/login/index.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ describe('Passwordless login tests', () => {
362362
await user.type(screen.getByLabelText('Email'), testEmail)
363363

364364
// Click the submit button
365-
await user.click(screen.getByRole('button', {name: /Continue Securely/i}))
365+
await user.click(screen.getByRole('button', {name: /Continue/i}))
366366

367367
// Verify that authorizePasswordless is called with correct parameters
368368
await waitFor(() => {

packages/template-retail-react-app/app/static/translations/compiled/en-GB.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2624,7 +2624,7 @@
26242624
"login_form.button.continue_securely": [
26252625
{
26262626
"type": 0,
2627-
"value": "Continue Securely"
2627+
"value": "Continue"
26282628
}
26292629
],
26302630
"login_form.button.google": [

0 commit comments

Comments
 (0)