Skip to content

Commit 8d9d640

Browse files
committed
test: refactor IterableEmbeddedView tests to use renderWithEmbeddedSession for context management
1 parent 249173f commit 8d9d640

1 file changed

Lines changed: 42 additions & 30 deletions

File tree

src/embedded/components/IterableEmbeddedView.test.tsx

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
2+
import type { ReactElement } from 'react';
23
import { render } from '@testing-library/react-native';
34

5+
import { EmbeddedSessionContext } from '../context/EmbeddedSessionContext';
46
import { IterableEmbeddedViewType } from '../enums/IterableEmbeddedViewType';
57
import { IterableEmbeddedView } from './IterableEmbeddedView';
68
import { IterableEmbeddedBanner } from './IterableEmbeddedBanner';
@@ -20,6 +22,12 @@ jest.mock('./IterableEmbeddedNotification', () => ({
2022
IterableEmbeddedNotification: jest.fn(() => null),
2123
}));
2224

25+
function renderWithEmbeddedSession(ui: ReactElement) {
26+
return render(
27+
<EmbeddedSessionContext.Provider value={true}>{ui}</EmbeddedSessionContext.Provider>
28+
);
29+
}
30+
2331
describe('IterableEmbeddedView', () => {
2432
const mockMessage = {
2533
metadata: {
@@ -46,7 +54,7 @@ describe('IterableEmbeddedView', () => {
4654

4755
describe('View Type Rendering', () => {
4856
it('should render IterableEmbeddedCard when viewType is Card', () => {
49-
render(
57+
renderWithEmbeddedSession(
5058
<IterableEmbeddedView
5159
viewType={IterableEmbeddedViewType.Card}
5260
message={mockMessage}
@@ -59,7 +67,7 @@ describe('IterableEmbeddedView', () => {
5967
});
6068

6169
it('should render IterableEmbeddedNotification when viewType is Notification', () => {
62-
render(
70+
renderWithEmbeddedSession(
6371
<IterableEmbeddedView
6472
viewType={IterableEmbeddedViewType.Notification}
6573
message={mockMessage}
@@ -72,7 +80,7 @@ describe('IterableEmbeddedView', () => {
7280
});
7381

7482
it('should render IterableEmbeddedBanner when viewType is Banner', () => {
75-
render(
83+
renderWithEmbeddedSession(
7684
<IterableEmbeddedView
7785
viewType={IterableEmbeddedViewType.Banner}
7886
message={mockMessage}
@@ -85,7 +93,7 @@ describe('IterableEmbeddedView', () => {
8593
});
8694

8795
it('should render null for invalid viewType', () => {
88-
render(
96+
renderWithEmbeddedSession(
8997
<IterableEmbeddedView
9098
viewType={999 as IterableEmbeddedViewType}
9199
message={mockMessage}
@@ -98,7 +106,7 @@ describe('IterableEmbeddedView', () => {
98106
});
99107

100108
it('should render null for undefined viewType', () => {
101-
render(
109+
renderWithEmbeddedSession(
102110
<IterableEmbeddedView
103111
viewType={undefined as any}
104112
message={mockMessage}
@@ -113,7 +121,7 @@ describe('IterableEmbeddedView', () => {
113121

114122
describe('Props Passing', () => {
115123
it('should pass message prop to Card component', () => {
116-
render(
124+
renderWithEmbeddedSession(
117125
<IterableEmbeddedView
118126
viewType={IterableEmbeddedViewType.Card}
119127
message={mockMessage}
@@ -127,7 +135,7 @@ describe('IterableEmbeddedView', () => {
127135
});
128136

129137
it('should pass message prop to Banner component', () => {
130-
render(
138+
renderWithEmbeddedSession(
131139
<IterableEmbeddedView
132140
viewType={IterableEmbeddedViewType.Banner}
133141
message={mockMessage}
@@ -141,7 +149,7 @@ describe('IterableEmbeddedView', () => {
141149
});
142150

143151
it('should pass message prop to Notification component', () => {
144-
render(
152+
renderWithEmbeddedSession(
145153
<IterableEmbeddedView
146154
viewType={IterableEmbeddedViewType.Notification}
147155
message={mockMessage}
@@ -156,7 +164,7 @@ describe('IterableEmbeddedView', () => {
156164
});
157165

158166
it('should pass config prop to child component', () => {
159-
render(
167+
renderWithEmbeddedSession(
160168
<IterableEmbeddedView
161169
viewType={IterableEmbeddedViewType.Card}
162170
message={mockMessage}
@@ -172,7 +180,7 @@ describe('IterableEmbeddedView', () => {
172180
});
173181

174182
it('should pass onButtonClick prop to child component', () => {
175-
render(
183+
renderWithEmbeddedSession(
176184
<IterableEmbeddedView
177185
viewType={IterableEmbeddedViewType.Card}
178186
message={mockMessage}
@@ -188,7 +196,7 @@ describe('IterableEmbeddedView', () => {
188196
});
189197

190198
it('should pass all props to child component', () => {
191-
render(
199+
renderWithEmbeddedSession(
192200
<IterableEmbeddedView
193201
viewType={IterableEmbeddedViewType.Card}
194202
message={mockMessage}
@@ -208,7 +216,7 @@ describe('IterableEmbeddedView', () => {
208216

209217
describe('Component Memoization', () => {
210218
it('should memoize component selection based on viewType', () => {
211-
const { rerender } = render(
219+
const { rerender } = renderWithEmbeddedSession(
212220
<IterableEmbeddedView
213221
viewType={IterableEmbeddedViewType.Card}
214222
message={mockMessage}
@@ -227,10 +235,12 @@ describe('IterableEmbeddedView', () => {
227235
};
228236

229237
rerender(
230-
<IterableEmbeddedView
231-
viewType={IterableEmbeddedViewType.Card}
232-
message={newMessage}
233-
/>
238+
<EmbeddedSessionContext.Provider value={true}>
239+
<IterableEmbeddedView
240+
viewType={IterableEmbeddedViewType.Card}
241+
message={newMessage}
242+
/>
243+
</EmbeddedSessionContext.Provider>
234244
);
235245

236246
// Should still render Card component (memoization means same component reference)
@@ -243,7 +253,7 @@ describe('IterableEmbeddedView', () => {
243253
});
244254

245255
it('should update component when viewType changes', () => {
246-
const { rerender } = render(
256+
const { rerender } = renderWithEmbeddedSession(
247257
<IterableEmbeddedView
248258
viewType={IterableEmbeddedViewType.Card}
249259
message={mockMessage}
@@ -255,10 +265,12 @@ describe('IterableEmbeddedView', () => {
255265

256266
// Re-render with different viewType
257267
rerender(
258-
<IterableEmbeddedView
259-
viewType={IterableEmbeddedViewType.Banner}
260-
message={mockMessage}
261-
/>
268+
<EmbeddedSessionContext.Provider value={true}>
269+
<IterableEmbeddedView
270+
viewType={IterableEmbeddedViewType.Banner}
271+
message={mockMessage}
272+
/>
273+
</EmbeddedSessionContext.Provider>
262274
);
263275

264276
expect(IterableEmbeddedBanner).toHaveBeenCalledTimes(1);
@@ -269,7 +281,7 @@ describe('IterableEmbeddedView', () => {
269281

270282
describe('Edge Cases', () => {
271283
it('should handle null config gracefully', () => {
272-
render(
284+
renderWithEmbeddedSession(
273285
<IterableEmbeddedView
274286
viewType={IterableEmbeddedViewType.Card}
275287
message={mockMessage}
@@ -285,7 +297,7 @@ describe('IterableEmbeddedView', () => {
285297
});
286298

287299
it('should handle undefined config gracefully', () => {
288-
render(
300+
renderWithEmbeddedSession(
289301
<IterableEmbeddedView
290302
viewType={IterableEmbeddedViewType.Card}
291303
message={mockMessage}
@@ -301,7 +313,7 @@ describe('IterableEmbeddedView', () => {
301313
});
302314

303315
it('should handle missing onButtonClick gracefully', () => {
304-
render(
316+
renderWithEmbeddedSession(
305317
<IterableEmbeddedView
306318
viewType={IterableEmbeddedViewType.Card}
307319
message={mockMessage}
@@ -317,27 +329,27 @@ describe('IterableEmbeddedView', () => {
317329

318330
it('should handle numeric viewType values correctly', () => {
319331
// Test with numeric value 0 (Banner)
320-
render(<IterableEmbeddedView viewType={0} message={mockMessage} />);
332+
renderWithEmbeddedSession(<IterableEmbeddedView viewType={0} message={mockMessage} />);
321333
expect(IterableEmbeddedBanner).toHaveBeenCalledTimes(1);
322334

323335
jest.clearAllMocks();
324336

325337
// Test with numeric value 1 (Card)
326-
render(<IterableEmbeddedView viewType={1} message={mockMessage} />);
338+
renderWithEmbeddedSession(<IterableEmbeddedView viewType={1} message={mockMessage} />);
327339
expect(IterableEmbeddedCard).toHaveBeenCalledTimes(1);
328340

329341
jest.clearAllMocks();
330342

331343
// Test with numeric value 2 (Notification)
332-
render(<IterableEmbeddedView viewType={2} message={mockMessage} />);
344+
renderWithEmbeddedSession(<IterableEmbeddedView viewType={2} message={mockMessage} />);
333345
expect(IterableEmbeddedNotification).toHaveBeenCalledTimes(1);
334346
});
335347
});
336348

337349
describe('Component Type Verification', () => {
338350
it('should render correct component type for each enum value', () => {
339351
// Verify Banner enum value
340-
const bannerResult = render(
352+
const bannerResult = renderWithEmbeddedSession(
341353
<IterableEmbeddedView
342354
viewType={IterableEmbeddedViewType.Banner}
343355
message={mockMessage}
@@ -349,7 +361,7 @@ describe('IterableEmbeddedView', () => {
349361
jest.clearAllMocks();
350362

351363
// Verify Card enum value
352-
const cardResult = render(
364+
const cardResult = renderWithEmbeddedSession(
353365
<IterableEmbeddedView
354366
viewType={IterableEmbeddedViewType.Card}
355367
message={mockMessage}
@@ -361,7 +373,7 @@ describe('IterableEmbeddedView', () => {
361373
jest.clearAllMocks();
362374

363375
// Verify Notification enum value
364-
render(
376+
renderWithEmbeddedSession(
365377
<IterableEmbeddedView
366378
viewType={IterableEmbeddedViewType.Notification}
367379
message={mockMessage}

0 commit comments

Comments
 (0)