|
8 | 8 | import React from 'react' |
9 | 9 | import StoresList from '@salesforce/retail-react-app/app/components/store-locator-modal/stores-list' |
10 | 10 | import {renderWithProviders} from '@salesforce/retail-react-app/app/utils/test-utils' |
11 | | -import {waitFor, screen} from '@testing-library/react' |
| 11 | +import {waitFor, screen, fireEvent} from '@testing-library/react' |
12 | 12 | import userEvent from '@testing-library/user-event' |
13 | 13 | import {Accordion} from '@salesforce/retail-react-app/app/components/shared/ui' |
| 14 | +import mockConfig from '@salesforce/retail-react-app/config/mocks/default' |
14 | 15 |
|
15 | 16 | const mockSearchStoresData = [ |
16 | 17 | { |
@@ -73,10 +74,9 @@ const mockSearchStoresData = [ |
73 | 74 | distance: 81.1, |
74 | 75 | distanceUnit: 'km', |
75 | 76 | id: '00021', |
76 | | - inventoryId: 'inventory_m_store_store13', |
77 | 77 | latitude: 49.4077, |
78 | 78 | longitude: 8.6908, |
79 | | - name: 'Heidelberg Tech Mart', |
| 79 | + name: 'Store with no inventoryId', |
80 | 80 | phone: '+49 6221 123456', |
81 | 81 | posEnabled: false, |
82 | 82 | postalCode: '69117', |
@@ -104,18 +104,26 @@ describe('StoresList', () => { |
104 | 104 | </Accordion> |
105 | 105 | ) |
106 | 106 |
|
| 107 | + expect(screen.queryAllByRole('radio')).toHaveLength(mockSearchStoresData.length) |
| 108 | + |
107 | 109 | await waitFor(async () => { |
108 | | - const aStoreName = screen.getByText(/Wiesbaden Tech Depot/i) |
109 | | - const aStoreAddress = screen.getByText(/Kirchgasse 12/i) |
110 | | - const aStoreCityAndPostalCode = screen.getByText(/Wiesbaden, 65185/i) |
111 | | - const aStoreDistance = screen.getByText(/0.74 km away/i) |
112 | | - const aStorePhoneNumber = screen.getByText(/49 611 876543/i) |
113 | | - |
114 | | - expect(aStoreName).toBeInTheDocument() |
115 | | - expect(aStoreAddress).toBeInTheDocument() |
116 | | - expect(aStoreCityAndPostalCode).toBeInTheDocument() |
117 | | - expect(aStoreDistance).toBeInTheDocument() |
118 | | - expect(aStorePhoneNumber).toBeInTheDocument() |
| 110 | + mockSearchStoresData.forEach((store) => { |
| 111 | + const storeName = screen.getByText(store.name) |
| 112 | + const storeAddress = screen.getByText(store.address1) |
| 113 | + const storeCityAndPostalCode = screen.getByText( |
| 114 | + `${store.city}, ${store.postalCode}` |
| 115 | + ) |
| 116 | + const storeDistance = screen.getByText( |
| 117 | + `${store.distance} ${store.distanceUnit} away` |
| 118 | + ) |
| 119 | + const storePhoneNumber = screen.getByText(`Phone: ${store.phone}`) |
| 120 | + |
| 121 | + expect(storeName).toBeInTheDocument() |
| 122 | + expect(storeAddress).toBeInTheDocument() |
| 123 | + expect(storeCityAndPostalCode).toBeInTheDocument() |
| 124 | + expect(storeDistance).toBeInTheDocument() |
| 125 | + expect(storePhoneNumber).toBeInTheDocument() |
| 126 | + }) |
119 | 127 | }) |
120 | 128 | }) |
121 | 129 |
|
@@ -169,4 +177,23 @@ describe('StoresList', () => { |
169 | 177 | expect(positions).toEqual([...positions].sort((a, b) => a - b)) |
170 | 178 | }) |
171 | 179 | }) |
| 180 | + |
| 181 | + test('Can select store', async () => { |
| 182 | + renderWithProviders( |
| 183 | + <Accordion> |
| 184 | + <StoresList storesInfo={mockSearchStoresData} /> |
| 185 | + </Accordion> |
| 186 | + ) |
| 187 | + |
| 188 | + await waitFor(async () => { |
| 189 | + const {id, name, inventoryId} = mockSearchStoresData[1] |
| 190 | + const radioButton = screen.getByDisplayValue(id) |
| 191 | + fireEvent.click(radioButton) |
| 192 | + |
| 193 | + const expectedStoreInfo = {id, name, inventoryId} |
| 194 | + expect(localStorage.getItem(`store_${mockConfig.app.defaultSite}`)).toEqual( |
| 195 | + JSON.stringify(expectedStoreInfo) |
| 196 | + ) |
| 197 | + }) |
| 198 | + }) |
172 | 199 | }) |
0 commit comments