Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions e2e/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ module.exports = {
PWA_E2E_USER_EMAIL: process.env.PWA_E2E_USER_EMAIL,
PWA_E2E_USER_PASSWORD: process.env.PWA_E2E_USER_PASSWORD,
EXTRA_FEATURES_E2E_RETAIL_APP_HOME:
process.env.EXTRA_FEATURES_E2E_RETAIL_APP_HOME ||
'https://scaffold-pwa-extra-features-e2e.mobify-storefront.com',
EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE: 'RefArchGlobal'
}
19 changes: 7 additions & 12 deletions e2e/tests/desktop/extra-features.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ test('Verify passwordless login request', async ({page}) => {
await page.locator('#email').scrollIntoViewIfNeeded()
await page.fill('#email', config.PWA_E2E_USER_EMAIL)

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

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

expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
expect(params.get('mode')).toBe('callback')
expect(params.get('mode')).toBe('email')
expect(params.get('channel_id')).toBe(config.EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE)
expect(params.get('callback_uri')).toMatch(/.*\/passwordless-login-callback$/)
})

test('Verify password reset callback request', async ({page}) => {
test('Verify password reset request', async ({page}) => {
let interceptedRequest = null

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

expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
expect(params.get('mode')).toBe('callback')
expect(params.get('mode')).toBe('email')
expect(params.get('channel_id')).toBe(config.EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE)
expect(params.get('callback_uri')).toMatch(/.*\/reset-password-callback$/)
expect(params.get('hint')).toBe('cross_device')
})

// Verify on the login UI that looks different when extra login features are not enabled
test('Verify password reset callback request when extra login features are not enabled', async ({
page
}) => {
test('Verify password reset request when extra login features are not enabled', async ({page}) => {
let interceptedRequest = null

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

expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
expect(params.get('mode')).toBe('callback')
expect(params.get('mode')).toBe('email')
expect(params.get('channel_id')).toBe(config.RETAIL_APP_HOME_SITE)
expect(params.get('callback_uri')).toMatch(/.*\/reset-password-callback$/)
expect(params.get('hint')).toBe('cross_device')
})

test('Verify password reset request', async ({page}) => {
test('Verify password reset action request', async ({page}) => {
let interceptedRequest = null
await page.route(
'**/mobify/slas/private/shopper/auth/v1/organizations/*/oauth2/password/action',
Expand Down
21 changes: 8 additions & 13 deletions e2e/tests/mobile/extra-features.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ test('Verify passwordless login request on mobile', async ({page}) => {
await page.locator('#email').scrollIntoViewIfNeeded()
await page.fill('#email', config.PWA_E2E_USER_EMAIL)

await page.getByRole('button', {name: 'Continue Securely'}).scrollIntoViewIfNeeded()
await page.getByRole('button', {name: 'Continue Securely'}).click()
await page.getByRole('button', {name: 'Continue'}).scrollIntoViewIfNeeded()
await page.getByRole('button', {name: 'Continue'}).click()

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

expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
expect(params.get('mode')).toBe('callback')
expect(params.get('mode')).toBe('email')
expect(params.get('channel_id')).toBe(config.EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE)
expect(params.get('callback_uri')).toMatch(/.*\/passwordless-login-callback$/)
})

test('Verify password reset callback request on mobile (extra features enabled)', async ({
page
}) => {
test('Verify password reset request on mobile (extra features enabled)', async ({page}) => {
let interceptedRequest = null

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

expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
expect(params.get('mode')).toBe('callback')
expect(params.get('mode')).toBe('email')
expect(params.get('channel_id')).toBe(config.EXTRA_FEATURES_E2E_RETAIL_APP_HOME_SITE)
expect(params.get('callback_uri')).toMatch(/.*\/reset-password-callback$/)
expect(params.get('hint')).toBe('cross_device')
})

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

expect(params.get('user_id')).toBe(config.PWA_E2E_USER_EMAIL)
expect(params.get('mode')).toBe('callback')
expect(params.get('mode')).toBe('email')
expect(params.get('channel_id')).toBe(config.RETAIL_APP_HOME_SITE)
expect(params.get('callback_uri')).toMatch(/.*\/reset-password-callback$/)
expect(params.get('hint')).toBe('cross_device')
})

test('Verify password reset request on mobile', async ({page}) => {
test('Verify password reset action request on mobile', async ({page}) => {
let interceptedRequest = null
await page.route(
'**/mobify/slas/private/shopper/auth/v1/organizations/*/oauth2/password/action',
Expand Down
4 changes: 4 additions & 0 deletions packages/commerce-sdk-react/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
## v4.4.0-dev (Dec 17, 2025)
- [Bugfix]Ensure code_verifier can be optional in resetPassword call [#3567](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3567)

- Update `authorizePasswordless` to pass locale and simplify mode selection to respect user's explicit mode choice while still defaulting to callback mode for backward compatibility [#3492](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3492)
- Update `getPasswordResetToken` to default locale to the one in CommerceApiProvider and pass callback_uri and idp_name only when they are defined [#3547](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3547)
- Update `resetPassword` to default hint to `cross_device` and pass code_verifier only when it is defined [#3547](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3547)

## v4.3.0 (Dec 17, 2025)

- Upgrade to commerce-sdk-isomorphic v4.2.0 and introduce Shopper Configurations SCAPI integration [#3071](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3071)
Expand Down
Loading
Loading