Skip to content

Commit 4b503f7

Browse files
authored
W-17908517 - Fix basket loading after logging out (#2323)
* fix basket loading after logging out
1 parent cf908db commit 4b503f7

File tree

7 files changed

+50
-41
lines changed

7 files changed

+50
-41
lines changed

packages/commerce-sdk-react/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
## v3.3.0-dev (Feb 18, 2025)
2+
- Invalidate cache instead of removing cache when triggering logout [#2323](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/2323)
23

34
## v3.2.1 (Mar 05, 2025)
45
- Update PWA-Kit SDKs to v3.9.1 [#2301](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/2301)

packages/commerce-sdk-react/src/hooks/useAuthHelper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ const cacheUpdateMatrix: CacheUpdateMatrix = {
107107
loginGuestUser: noop,
108108
logout() {
109109
return {
110-
remove: [{queryKey: ['/commerce-sdk-react']}]
110+
invalidate: [{queryKey: ['/commerce-sdk-react']}]
111111
}
112112
},
113113
register: noop,

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,5 @@ test('renders LinksList with horizontal variant', () => {
6060
<LinksList links={links} variant="horizontal" />
6161
</FooterStylesProvider>
6262
)
63-
screen.logTestingPlaygroundURL()
64-
6563
expect(container.querySelector(horizontalVariantSelector)).toBeInTheDocument()
6664
})

packages/template-retail-react-app/app/components/product-view-modal/bundle.test.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ beforeEach(() => {
6363
)
6464
})
6565

66+
afterEach(() => {
67+
jest.resetModules()
68+
jest.restoreAllMocks()
69+
})
70+
6671
test('renders bundle product view modal', async () => {
6772
renderWithProviders(<MockComponent />)
6873
await waitFor(() => {
@@ -165,9 +170,9 @@ test('bundle product view modal disables update button when quantity exceeds chi
165170
})
166171

167172
// Set product bundle quantity selection to 4
168-
quantityInput.focus()
169173
fireEvent.change(quantityInput, {target: {value: '4'}})
170174
fireEvent.keyDown(quantityInput, {key: 'Enter', code: 'Enter', charCode: 13})
175+
171176
fireEvent.click(sizeSelectBtn)
172177

173178
await waitFor(() => {

packages/template-retail-react-app/app/components/store-locator-modal/store-locator-content.test.jsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,6 @@ describe('StoreLocatorContent', () => {
354354
)
355355
})
356356
)
357-
screen.debug()
358357

359358
renderWithProviders(
360359
<WrapperComponent

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

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ import {
2020
mockOrderProducts,
2121
mockPasswordUpdateFalure
2222
} from '@salesforce/retail-react-app/app/mocks/mock-data'
23+
import {useCustomerType} from '@salesforce/commerce-sdk-react'
2324
import Account from '@salesforce/retail-react-app/app/pages/account/index'
2425
import Login from '@salesforce/retail-react-app/app/pages/login'
2526
import mockConfig from '@salesforce/retail-react-app/config/mocks/default'
26-
import * as sdk from '@salesforce/commerce-sdk-react'
2727

28+
jest.setTimeout(60000)
2829
jest.mock('@salesforce/commerce-sdk-react', () => ({
2930
...jest.requireActual('@salesforce/commerce-sdk-react'),
3031
useCustomerType: jest.fn()
@@ -73,7 +74,7 @@ beforeEach(() => {
7374
})
7475
afterEach(() => {
7576
jest.resetModules()
76-
localStorage.clear()
77+
jest.restoreAllMocks()
7778
})
7879

7980
const expectedBasePath = '/uk/en-GB'
@@ -86,50 +87,45 @@ describe('Test redirects', function () {
8687
)
8788
})
8889
test('Redirects to login page if the customer is not logged in', async () => {
89-
sdk.useCustomerType.mockReturnValue({isRegistered: false, isGuest: true})
90-
const Component = () => {
91-
return (
92-
<Switch>
93-
<Route
94-
path={createPathWithDefaults('/account')}
95-
render={(props) => <Account {...props} />}
96-
/>
97-
</Switch>
98-
)
99-
}
100-
renderWithProviders(<Component />, {
90+
useCustomerType.mockReturnValue({isRegistered: false, isGuest: true})
91+
renderWithProviders(<MockedComponent />, {
10192
wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app, isGuest: true}
10293
})
10394
await waitFor(() => expect(window.location.pathname).toBe(`${expectedBasePath}/login`))
10495
})
10596
})
106-
107-
test('Provides navigation for subpages', async () => {
108-
sdk.useCustomerType.mockReturnValue({isRegistered: true, isGuest: false})
109-
global.server.use(
110-
rest.get('*/products', (req, res, ctx) => {
111-
return res(ctx.delay(0), ctx.json(mockOrderProducts))
112-
}),
113-
rest.get('*/customers/:customerId/orders', (req, res, ctx) => {
114-
return res(ctx.delay(0), ctx.json(mockOrderHistory))
97+
describe('Page Navigation', () => {
98+
test('works for subpages', async () => {
99+
useCustomerType.mockReturnValue({isRegistered: true, isGuest: false})
100+
global.server.use(
101+
rest.get('*/products', (req, res, ctx) => {
102+
return res(ctx.delay(0), ctx.json(mockOrderProducts))
103+
}),
104+
rest.get('*/customers/:customerId/orders', (req, res, ctx) => {
105+
return res(ctx.delay(0), ctx.json(mockOrderHistory))
106+
})
107+
)
108+
const {user} = renderWithProviders(<MockedComponent />, {
109+
wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app}
115110
})
116-
)
117-
const {user} = renderWithProviders(<MockedComponent />, {
118-
wrapperProps: {siteAlias: 'uk', appConfig: mockConfig.app}
119-
})
120-
expect(await screen.findByTestId('account-page')).toBeInTheDocument()
111+
expect(await screen.findByTestId('account-page')).toBeInTheDocument()
121112

122-
const nav = within(screen.getByTestId('account-detail-nav'))
123-
await user.click(nav.getByText('Addresses'))
124-
await waitFor(() =>
125-
expect(window.location.pathname).toBe(`${expectedBasePath}/account/addresses`)
126-
)
127-
await user.click(nav.getByText('Order History'))
128-
await waitFor(() => expect(window.location.pathname).toBe(`${expectedBasePath}/account/orders`))
113+
const nav = within(screen.getByTestId('account-detail-nav'))
114+
await user.click(nav.getByText('Addresses'))
115+
await waitFor(() =>
116+
expect(window.location.pathname).toBe(`${expectedBasePath}/account/addresses`)
117+
)
118+
await user.click(nav.getByText('Order History'))
119+
await waitFor(() =>
120+
expect(window.location.pathname).toBe(`${expectedBasePath}/account/orders`)
121+
)
122+
})
129123
})
130124

131125
describe('Render and logs out', function () {
132126
test('Renders account detail page by default for logged-in customer, and can log out', async () => {
127+
useCustomerType.mockReturnValue({isRegistered: true, isGuest: false})
128+
133129
const {user} = renderWithProviders(<MockedComponent />)
134130

135131
// Render user profile page
@@ -145,7 +141,10 @@ describe('Render and logs out', function () {
145141
})
146142

147143
await user.click(screen.getAllByText(/Log Out/)[0])
144+
useCustomerType.mockReturnValue({isRegistered: false, isGuest: true})
145+
148146
await waitFor(() => {
147+
expect(window.location.pathname).toBe(`${expectedBasePath}/login`)
149148
expect(screen.getByTestId('login-page')).toBeInTheDocument()
150149
})
151150
})
@@ -166,7 +165,7 @@ describe('updating profile', function () {
166165
)
167166
})
168167
test('Allows customer to edit profile details', async () => {
169-
sdk.useCustomerType.mockReturnValue({isRegistered: true, isExternal: false})
168+
useCustomerType.mockReturnValue({isRegistered: true, isExternal: false})
170169
const {user} = renderWithProviders(<MockedComponent />)
171170
expect(await screen.findByTestId('account-page')).toBeInTheDocument()
172171
expect(await screen.findByTestId('account-detail-page')).toBeInTheDocument()
@@ -190,6 +189,7 @@ describe('updating profile', function () {
190189

191190
describe('updating password', function () {
192191
beforeEach(() => {
192+
useCustomerType.mockReturnValue({isRegistered: true, isExternal: false})
193193
global.server.use(
194194
rest.post('*/oauth2/token', (req, res, ctx) =>
195195
res(

packages/template-retail-react-app/jest-setup.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ export const setupMockServer = () => {
5050
rest.get('*/customers/:customerId/baskets', (req, res, ctx) =>
5151
res(ctx.delay(0), ctx.status(200), ctx.json(mockCustomerBaskets))
5252
),
53+
rest.get('*/shopper-context/:usid', (req, res, ctx) =>
54+
res(ctx.delay(0), ctx.status(200), ctx.json({}))
55+
),
56+
rest.get('*/shopper-experience/*', (req, res, ctx) =>
57+
res(ctx.delay(0), ctx.status(200), ctx.json({}))
58+
),
5359
rest.post('*/sessions', (req, res, ctx) => res(ctx.delay(0), ctx.status(200))),
5460
rest.post('*/oauth2/token', (req, res, ctx) =>
5561
res(

0 commit comments

Comments
 (0)