@times-components/ts-components 1.146.2-0831d531868ee6854720b5b42c0a1ccdbe6a4a70.45 → 1.146.2-784617dc4a33959b8795da1d7f425c9929322fae.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/components/travel-mini-cta/__tests__/index.test.js +262 -0
  2. package/dist/components/travel-mini-cta/index.d.ts +10 -0
  3. package/dist/components/travel-mini-cta/index.js +93 -0
  4. package/dist/components/travel-mini-cta/styles.d.ts +42 -0
  5. package/dist/components/travel-mini-cta/styles.js +268 -0
  6. package/dist/components/travel-mini-cta/travel-mini-cta.stories.js +8 -0
  7. package/dist/components/travel-mini-cta/types.d.ts +10 -0
  8. package/dist/components/{trip-cards → travel-mini-cta}/types.js +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +2 -2
  11. package/dist/utils/applyDarkMode.d.ts +1 -0
  12. package/dist/utils/applyDarkMode.js +12 -0
  13. package/dist/utils/getMediaQuery.d.ts +11 -0
  14. package/dist/utils/getMediaQuery.js +19 -0
  15. package/dist/utils/index.d.ts +2 -0
  16. package/dist/utils/index.js +3 -0
  17. package/package.json +3 -3
  18. package/rnw.js +1 -1
  19. package/src/components/travel-mini-cta/__tests__/__snapshots__/index.test.tsx.snap +211 -0
  20. package/src/components/travel-mini-cta/__tests__/index.test.tsx +330 -0
  21. package/src/components/travel-mini-cta/index.tsx +190 -0
  22. package/src/components/travel-mini-cta/styles.ts +331 -0
  23. package/src/components/travel-mini-cta/travel-mini-cta.stories.tsx +23 -0
  24. package/src/components/travel-mini-cta/types.ts +10 -0
  25. package/src/index.ts +1 -2
  26. package/src/utils/applyDarkMode.ts +12 -0
  27. package/src/utils/getMediaQuery.ts +25 -0
  28. package/src/utils/index.ts +2 -0
  29. package/dist/components/carousel-component/CarouselComponent.stories.js +0 -146
  30. package/dist/components/carousel-component/CarouselItem.d.ts +0 -3
  31. package/dist/components/carousel-component/CarouselItem.js +0 -12
  32. package/dist/components/carousel-component/DefaultNavigationArrow.d.ts +0 -8
  33. package/dist/components/carousel-component/DefaultNavigationArrow.js +0 -6
  34. package/dist/components/carousel-component/DefaultPageDot.d.ts +0 -8
  35. package/dist/components/carousel-component/DefaultPageDot.js +0 -4
  36. package/dist/components/carousel-component/__tests__/CarouselComponent.test.d.ts +0 -1
  37. package/dist/components/carousel-component/__tests__/CarouselComponent.test.js +0 -163
  38. package/dist/components/carousel-component/__tests__/CarouselItem.test.d.ts +0 -1
  39. package/dist/components/carousel-component/__tests__/CarouselItem.test.js +0 -80
  40. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.d.ts +0 -1
  41. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.js +0 -62
  42. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.d.ts +0 -1
  43. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.js +0 -68
  44. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.d.ts +0 -1
  45. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.js +0 -459
  46. package/dist/components/carousel-component/hooks/useCarousel.d.ts +0 -2
  47. package/dist/components/carousel-component/hooks/useCarousel.js +0 -167
  48. package/dist/components/carousel-component/index.d.ts +0 -4
  49. package/dist/components/carousel-component/index.js +0 -20
  50. package/dist/components/carousel-component/styles.d.ts +0 -28
  51. package/dist/components/carousel-component/styles.js +0 -172
  52. package/dist/components/carousel-component/types.d.ts +0 -53
  53. package/dist/components/carousel-component/types.js +0 -2
  54. package/dist/components/trip-cards/SkeletonCard.d.ts +0 -7
  55. package/dist/components/trip-cards/SkeletonCard.js +0 -22
  56. package/dist/components/trip-cards/TripCard.d.ts +0 -3
  57. package/dist/components/trip-cards/TripCard.js +0 -62
  58. package/dist/components/trip-cards/TripCards.stories.d.ts +0 -1
  59. package/dist/components/trip-cards/TripCards.stories.js +0 -159
  60. package/dist/components/trip-cards/TripCardsLayout.d.ts +0 -3
  61. package/dist/components/trip-cards/TripCardsLayout.js +0 -63
  62. package/dist/components/trip-cards/__tests__/SkeletonCard.test.d.ts +0 -1
  63. package/dist/components/trip-cards/__tests__/SkeletonCard.test.js +0 -139
  64. package/dist/components/trip-cards/__tests__/TripCard.test.d.ts +0 -1
  65. package/dist/components/trip-cards/__tests__/TripCard.test.js +0 -95
  66. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.d.ts +0 -1
  67. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.js +0 -351
  68. package/dist/components/trip-cards/__tests__/assets.test.d.ts +0 -1
  69. package/dist/components/trip-cards/__tests__/assets.test.js +0 -165
  70. package/dist/components/trip-cards/__tests__/helpers.test.d.ts +0 -1
  71. package/dist/components/trip-cards/__tests__/helpers.test.js +0 -220
  72. package/dist/components/trip-cards/__tests__/index.test.js +0 -478
  73. package/dist/components/trip-cards/__tests__/mockData.test.d.ts +0 -1
  74. package/dist/components/trip-cards/__tests__/mockData.test.js +0 -57
  75. package/dist/components/trip-cards/__tests__/skeletonStyles.test.d.ts +0 -1
  76. package/dist/components/trip-cards/__tests__/skeletonStyles.test.js +0 -194
  77. package/dist/components/trip-cards/assets/BoatIcon.d.ts +0 -1
  78. package/dist/components/trip-cards/assets/BoatIcon.js +0 -4
  79. package/dist/components/trip-cards/assets/CalendarIcon.d.ts +0 -1
  80. package/dist/components/trip-cards/assets/CalendarIcon.js +0 -4
  81. package/dist/components/trip-cards/assets/ChevronRightIcon.d.ts +0 -1
  82. package/dist/components/trip-cards/assets/ChevronRightIcon.js +0 -4
  83. package/dist/components/trip-cards/assets/LocationIcon.d.ts +0 -1
  84. package/dist/components/trip-cards/assets/LocationIcon.js +0 -4
  85. package/dist/components/trip-cards/assets/MoonIcon.d.ts +0 -1
  86. package/dist/components/trip-cards/assets/MoonIcon.js +0 -4
  87. package/dist/components/trip-cards/assets/index.d.ts +0 -6
  88. package/dist/components/trip-cards/assets/index.js +0 -7
  89. package/dist/components/trip-cards/helpers.d.ts +0 -12
  90. package/dist/components/trip-cards/helpers.js +0 -158
  91. package/dist/components/trip-cards/index.d.ts +0 -4
  92. package/dist/components/trip-cards/index.js +0 -68
  93. package/dist/components/trip-cards/mockData.d.ts +0 -3
  94. package/dist/components/trip-cards/mockData.js +0 -317
  95. package/dist/components/trip-cards/skeletonStyles.d.ts +0 -9
  96. package/dist/components/trip-cards/skeletonStyles.js +0 -37
  97. package/dist/components/trip-cards/styles.d.ts +0 -43
  98. package/dist/components/trip-cards/styles.js +0 -404
  99. package/dist/components/trip-cards/types.d.ts +0 -122
  100. package/src/components/carousel-component/CarouselComponent.stories.tsx +0 -220
  101. package/src/components/carousel-component/CarouselItem.tsx +0 -26
  102. package/src/components/carousel-component/DefaultNavigationArrow.tsx +0 -37
  103. package/src/components/carousel-component/DefaultPageDot.tsx +0 -20
  104. package/src/components/carousel-component/__tests__/CarouselComponent.test.tsx +0 -259
  105. package/src/components/carousel-component/__tests__/CarouselItem.test.tsx +0 -140
  106. package/src/components/carousel-component/__tests__/DefaultNavigationArrow.test.tsx +0 -153
  107. package/src/components/carousel-component/__tests__/DefaultPageDot.test.tsx +0 -105
  108. package/src/components/carousel-component/hooks/__tests__/useCarousel.test.ts +0 -625
  109. package/src/components/carousel-component/hooks/useCarousel.ts +0 -229
  110. package/src/components/carousel-component/index.tsx +0 -92
  111. package/src/components/carousel-component/styles.ts +0 -188
  112. package/src/components/carousel-component/types.ts +0 -62
  113. package/src/components/trip-cards/SkeletonCard.tsx +0 -64
  114. package/src/components/trip-cards/TripCard.tsx +0 -187
  115. package/src/components/trip-cards/TripCards.stories.tsx +0 -224
  116. package/src/components/trip-cards/TripCardsLayout.tsx +0 -169
  117. package/src/components/trip-cards/__tests__/SkeletonCard.test.tsx +0 -169
  118. package/src/components/trip-cards/__tests__/TripCard.test.tsx +0 -120
  119. package/src/components/trip-cards/__tests__/TripCardsLayout.test.tsx +0 -669
  120. package/src/components/trip-cards/__tests__/assets.test.tsx +0 -206
  121. package/src/components/trip-cards/__tests__/helpers.test.ts +0 -272
  122. package/src/components/trip-cards/__tests__/index.test.tsx +0 -550
  123. package/src/components/trip-cards/__tests__/mockData.test.ts +0 -67
  124. package/src/components/trip-cards/__tests__/skeletonStyles.test.tsx +0 -256
  125. package/src/components/trip-cards/assets/BoatIcon.tsx +0 -17
  126. package/src/components/trip-cards/assets/CalendarIcon.tsx +0 -17
  127. package/src/components/trip-cards/assets/ChevronRightIcon.tsx +0 -20
  128. package/src/components/trip-cards/assets/LocationIcon.tsx +0 -17
  129. package/src/components/trip-cards/assets/MoonIcon.tsx +0 -17
  130. package/src/components/trip-cards/assets/index.ts +0 -7
  131. package/src/components/trip-cards/helpers.ts +0 -207
  132. package/src/components/trip-cards/index.tsx +0 -122
  133. package/src/components/trip-cards/mockData.ts +0 -345
  134. package/src/components/trip-cards/skeletonStyles.ts +0 -46
  135. package/src/components/trip-cards/styles.ts +0 -450
  136. package/src/components/trip-cards/types.ts +0 -131
  137. /package/dist/components/{trip-cards → travel-mini-cta}/__tests__/index.test.d.ts +0 -0
  138. /package/dist/components/{carousel-component/CarouselComponent.stories.d.ts → travel-mini-cta/travel-mini-cta.stories.d.ts} +0 -0
@@ -1,351 +0,0 @@
1
- import React from 'react';
2
- import { render, screen, fireEvent } from '@testing-library/react';
3
- import '@testing-library/jest-dom';
4
- import { TripCardsLayout } from '../TripCardsLayout';
5
- import { tealiumTrackingHandler } from '../../../helpers/tracking/TrackingHandler';
6
- jest.mock('../../../helpers/tracking/TrackingHandler', () => ({
7
- tealiumTrackingHandler: jest.fn()
8
- }));
9
- const mockElement = {
10
- class: 'trip-cards',
11
- tripcards: btoa(JSON.stringify([1, 2])),
12
- title: 'Test Cruises',
13
- titleurl: 'https://example.com',
14
- description: 'Test Description'
15
- };
16
- const MockCard = ({ card }) => (React.createElement("div", { "data-testid": "mock-card" }, card ? card.headline || 'Mock Card' : 'Mock Card'));
17
- // Mock ResizeObserver
18
- global.ResizeObserver = class ResizeObserver {
19
- observe() {
20
- // Mock implementation
21
- }
22
- unobserve() {
23
- // Mock implementation
24
- }
25
- disconnect() {
26
- // Mock implementation
27
- }
28
- };
29
- describe('TripCardsLayout', () => {
30
- beforeEach(() => {
31
- jest.clearAllMocks();
32
- Element.prototype.scrollTo = jest.fn();
33
- // Mock matchMedia for each test
34
- Object.defineProperty(window, 'matchMedia', {
35
- writable: true,
36
- configurable: true,
37
- value: jest.fn().mockImplementation(query => ({
38
- matches: false,
39
- media: query,
40
- onchange: null,
41
- addListener: jest.fn(),
42
- removeListener: jest.fn(),
43
- addEventListener: jest.fn(),
44
- removeEventListener: jest.fn(),
45
- dispatchEvent: jest.fn()
46
- }))
47
- });
48
- });
49
- afterEach(() => {
50
- jest.clearAllMocks();
51
- });
52
- describe('Rendering', () => {
53
- it('renders with title and description', () => {
54
- const items = [
55
- { id: '1', data: undefined },
56
- { id: '2', data: undefined }
57
- ];
58
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
59
- expect(screen.getByText('Test Cruises')).toBeInTheDocument();
60
- expect(screen.getByText('Test Description')).toBeInTheDocument();
61
- });
62
- it('renders empty title when not provided', () => {
63
- const elementWithoutTitle = {
64
- ...mockElement,
65
- title: undefined
66
- };
67
- const items = [{ id: '1', data: undefined }];
68
- const { container } = render(React.createElement(TripCardsLayout, { element: elementWithoutTitle, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
69
- const title = container.querySelector('h2');
70
- expect(title).toBeInTheDocument();
71
- expect(title).toBeEmptyDOMElement();
72
- });
73
- it('renders empty description when not provided', () => {
74
- const elementWithoutDesc = {
75
- ...mockElement,
76
- description: undefined
77
- };
78
- const items = [{ id: '1', data: undefined }];
79
- const { container } = render(React.createElement(TripCardsLayout, { element: elementWithoutDesc, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
80
- const description = container.querySelector('p');
81
- expect(description).toBeInTheDocument();
82
- expect(description).toBeEmptyDOMElement();
83
- });
84
- it('renders title link when provided', () => {
85
- const items = [{ id: '1', data: undefined }];
86
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
87
- const link = screen.getByTestId('trip-cards-title-link');
88
- expect(link).toHaveAttribute('href', 'https://example.com');
89
- expect(link).toHaveAttribute('target', '_blank');
90
- expect(link).toHaveAttribute('rel', 'noopener noreferrer');
91
- });
92
- it('renders two links when titleurl is provided', () => {
93
- const items = [{ id: '1', data: undefined }];
94
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
95
- const links = screen.getAllByRole('link');
96
- expect(links).toHaveLength(2);
97
- const titleLink = screen.getByTestId('trip-cards-title-link');
98
- const iconLink = screen.getByTestId('title-link');
99
- expect(titleLink).toHaveAttribute('href', 'https://example.com');
100
- expect(iconLink).toHaveAttribute('href', 'https://example.com');
101
- });
102
- it('does not render title link when not provided', () => {
103
- const elementWithoutLink = {
104
- ...mockElement,
105
- titleurl: undefined
106
- };
107
- const items = [{ id: '1', data: undefined }];
108
- render(React.createElement(TripCardsLayout, { element: elementWithoutLink, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
109
- const links = screen.queryAllByRole('link');
110
- expect(links.length).toBe(0);
111
- });
112
- it('renders ChevronRightIcon in title link', () => {
113
- const items = [{ id: '1', data: undefined }];
114
- const { container } = render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
115
- const svg = container.querySelector('svg');
116
- expect(svg).toBeInTheDocument();
117
- });
118
- });
119
- describe('Static Grid Layout', () => {
120
- it('renders static grid for exactly 2 items', () => {
121
- const items = [
122
- { id: '1', data: undefined },
123
- { id: '2', data: undefined }
124
- ];
125
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
126
- const staticGrid = screen.getByTestId('static-cards-grid');
127
- expect(staticGrid).toBeInTheDocument();
128
- });
129
- it('renders correct number of cards in static grid', () => {
130
- const items = [
131
- { id: '1', data: undefined },
132
- { id: '2', data: undefined }
133
- ];
134
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
135
- const cards = screen.getAllByTestId('mock-card');
136
- expect(cards.length).toBe(2);
137
- });
138
- it('passes correct props to CardComponent in static grid', () => {
139
- const mockData = {
140
- cruise_id: '1',
141
- image: 'test.jpg',
142
- headline: 'Test Cruise',
143
- date: 'Jan 2024',
144
- duration: '7 nights',
145
- route: 'Test Route',
146
- ship: 'Test Ship',
147
- price: '£1000',
148
- logo: 'logo.png',
149
- logo_url: 'https://example.com',
150
- cta_url: 'https://example.com',
151
- cta_text: 'View'
152
- };
153
- const items = [{ id: '1', data: mockData }, { id: '2', data: undefined }];
154
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
155
- expect(screen.getByText('Test Cruise')).toBeInTheDocument();
156
- });
157
- });
158
- describe('Carousel Layout', () => {
159
- it('renders carousel for more than 2 items', () => {
160
- const items = [
161
- { id: '1', data: undefined },
162
- { id: '2', data: undefined },
163
- { id: '3', data: undefined }
164
- ];
165
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
166
- const cards = screen.getAllByTestId('mock-card');
167
- expect(cards.length).toBe(3);
168
- });
169
- it('renders navigation arrows in carousel', () => {
170
- const items = [
171
- { id: '1', data: undefined },
172
- { id: '2', data: undefined },
173
- { id: '3', data: undefined }
174
- ];
175
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
176
- expect(screen.getByLabelText('Previous items')).toBeInTheDocument();
177
- expect(screen.getByLabelText('Next items')).toBeInTheDocument();
178
- });
179
- it('renders page dots in carousel', () => {
180
- const items = [
181
- { id: '1', data: undefined },
182
- { id: '2', data: undefined },
183
- { id: '3', data: undefined },
184
- { id: '4', data: undefined }
185
- ];
186
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
187
- expect(screen.getByLabelText('Previous items')).toBeInTheDocument();
188
- expect(screen.getByLabelText('Next items')).toBeInTheDocument();
189
- // With 4 items and 2 per page, we have 2 pages, so we should have 2 dot buttons
190
- const pageDots = screen.getAllByLabelText(/Go to page/i);
191
- expect(pageDots.length).toBe(2);
192
- });
193
- it('renders carousel for 1 item', () => {
194
- const items = [{ id: '1', data: undefined }];
195
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
196
- const cards = screen.getAllByTestId('mock-card');
197
- expect(cards.length).toBe(1);
198
- });
199
- it('wraps cards in CarouselItem with correct widthConfig', () => {
200
- const items = [
201
- { id: '1', data: undefined },
202
- { id: '2', data: undefined },
203
- { id: '3', data: undefined }
204
- ];
205
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
206
- // Verify carousel is rendering by checking for cards
207
- const cards = screen.getAllByTestId('mock-card');
208
- expect(cards.length).toBe(3);
209
- });
210
- });
211
- describe('Card Rendering', () => {
212
- it('renders each item with unique key', () => {
213
- const items = [
214
- { id: 'card-1', data: undefined },
215
- { id: 'card-2', data: undefined }
216
- ];
217
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
218
- const cards = screen.getAllByTestId('mock-card');
219
- expect(cards.length).toBe(2);
220
- });
221
- it('passes data to CardComponent', () => {
222
- const mockData = {
223
- cruise_id: '123',
224
- image: 'image.jpg',
225
- headline: 'Specific Cruise',
226
- date: 'Feb 2024',
227
- duration: '10 nights',
228
- route: 'Route A',
229
- ship: 'Ship X',
230
- price: '£2000',
231
- logo: 'logo.png',
232
- logo_url: 'https://example.com',
233
- cta_url: 'https://example.com',
234
- cta_text: 'Book'
235
- };
236
- const items = [
237
- { id: '1', data: mockData },
238
- { id: '2', data: undefined },
239
- { id: '3', data: undefined }
240
- ];
241
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
242
- expect(screen.getByText('Specific Cruise')).toBeInTheDocument();
243
- });
244
- it('handles empty items array', () => {
245
- const { container } = render(React.createElement(TripCardsLayout, { element: mockElement, items: [], CardComponent: MockCard, itemsPerPage: 2 }));
246
- expect(container.firstChild).toBeInTheDocument();
247
- const cards = screen.queryAllByTestId('mock-card');
248
- expect(cards.length).toBe(0);
249
- });
250
- });
251
- describe('Container Structure', () => {
252
- it('renders main container', () => {
253
- const items = [{ id: '1', data: undefined }];
254
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
255
- const mainContainer = screen.getByTestId('trip-cards-container');
256
- expect(mainContainer).toBeInTheDocument();
257
- });
258
- it('renders title section', () => {
259
- const items = [{ id: '1', data: undefined }];
260
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
261
- const titleSection = screen.getByTestId('title-section');
262
- expect(titleSection).toBeInTheDocument();
263
- });
264
- it('renders title bar with content', () => {
265
- const items = [{ id: '1', data: undefined }];
266
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
267
- const titleBar = screen.getByTestId('title-bar');
268
- const titleContent = screen.getByTestId('title-content');
269
- expect(titleBar).toBeInTheDocument();
270
- expect(titleContent).toBeInTheDocument();
271
- });
272
- });
273
- describe('ItemsPerPage', () => {
274
- it('respects itemsPerPage prop', () => {
275
- const items = Array.from({ length: 6 }, (_, i) => ({
276
- id: `${i}`,
277
- data: undefined
278
- }));
279
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 3 }));
280
- const cards = screen.getAllByTestId('mock-card');
281
- expect(cards.length).toBe(6);
282
- });
283
- it('handles itemsPerPage of 1', () => {
284
- const items = [
285
- { id: '1', data: undefined },
286
- { id: '2', data: undefined }
287
- ];
288
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 1 }));
289
- const cards = screen.getAllByTestId('mock-card');
290
- expect(cards.length).toBe(2);
291
- });
292
- });
293
- describe('Edge Cases', () => {
294
- it('handles large number of items', () => {
295
- const items = Array.from({ length: 50 }, (_, i) => ({
296
- id: `${i}`,
297
- data: undefined
298
- }));
299
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
300
- const cards = screen.getAllByTestId('mock-card');
301
- expect(cards.length).toBe(50);
302
- });
303
- it('handles empty title and description', () => {
304
- const emptyElement = {
305
- ...mockElement,
306
- title: '',
307
- description: ''
308
- };
309
- const items = [{ id: '1', data: undefined }];
310
- const { container } = render(React.createElement(TripCardsLayout, { element: emptyElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
311
- const title = container.querySelector('h2');
312
- const description = container.querySelector('p');
313
- expect(title).toBeInTheDocument();
314
- expect(description).toBeInTheDocument();
315
- if (title && description) {
316
- expect(title.textContent).toBe('');
317
- expect(description.textContent).toBe('');
318
- }
319
- });
320
- });
321
- describe('Tracking', () => {
322
- it('calls tealiumTrackingHandler when title link is clicked', () => {
323
- const items = [{ id: '1', data: undefined }];
324
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
325
- const titleLink = screen.getByTestId('trip-cards-title-link');
326
- fireEvent.click(titleLink);
327
- expect(tealiumTrackingHandler).toHaveBeenCalledWith('trip cards section title', 'navigation', 'click', 'Trip Cards', 'Test Cruises', {
328
- source_page: 'unknown'
329
- });
330
- });
331
- it('calls tealiumTrackingHandler when icon link is clicked', () => {
332
- const items = [{ id: '1', data: undefined }];
333
- render(React.createElement(TripCardsLayout, { element: mockElement, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
334
- const iconLink = screen.getByTestId('title-link');
335
- fireEvent.click(iconLink);
336
- expect(tealiumTrackingHandler).toHaveBeenCalledWith('trip cards section title', 'navigation', 'click', 'Trip Cards', 'Test Cruises', {
337
- source_page: 'unknown'
338
- });
339
- });
340
- it('does not call tealiumTrackingHandler when title link is not clicked', () => {
341
- const elementWithoutLink = {
342
- ...mockElement,
343
- titleurl: undefined
344
- };
345
- const items = [{ id: '1', data: undefined }];
346
- render(React.createElement(TripCardsLayout, { element: elementWithoutLink, items: items, CardComponent: MockCard, itemsPerPage: 2 }));
347
- expect(tealiumTrackingHandler).not.toHaveBeenCalled();
348
- });
349
- });
350
- });
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJpcENhcmRzTGF5b3V0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL19fdGVzdHNfXy9UcmlwQ2FyZHNMYXlvdXQudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25FLE9BQU8sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRW5GLElBQUksQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM1RCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ2xDLENBQUMsQ0FBQyxDQUFDO0FBRUosTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLFlBQVk7SUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsS0FBSyxFQUFFLGNBQWM7SUFDckIsUUFBUSxFQUFFLHFCQUFxQjtJQUMvQixXQUFXLEVBQUUsa0JBQWtCO0NBQ2hDLENBQUM7QUFFRixNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUE4QixFQUFFLEVBQUUsQ0FBQyxDQUN6RCw0Q0FBaUIsV0FBVyxJQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQzlDLENBQ1AsQ0FBQztBQUVGLHNCQUFzQjtBQUN0QixNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sY0FB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
@@ -1 +0,0 @@
1
- import '@testing-library/jest-dom';
@@ -1,165 +0,0 @@
1
- import React from 'react';
2
- import { render } from '@testing-library/react';
3
- import '@testing-library/jest-dom';
4
- import { BoatIcon, CalendarIcon, ChevronRightIcon, LocationIcon, MoonIcon } from '../assets';
5
- describe('Trip Cards Assets', () => {
6
- describe('BoatIcon', () => {
7
- it('renders correctly', () => {
8
- const { container } = render(React.createElement(BoatIcon, null));
9
- const svg = container.querySelector('svg');
10
- expect(svg).toBeInTheDocument();
11
- });
12
- it('has correct viewBox', () => {
13
- const { container } = render(React.createElement(BoatIcon, null));
14
- const svg = container.querySelector('svg');
15
- expect(svg).toHaveAttribute('viewBox');
16
- });
17
- it('accepts custom props', () => {
18
- const { container } = render(React.createElement(BoatIcon, { className: "custom-class" }));
19
- const svg = container.querySelector('svg');
20
- expect(svg).toHaveClass('custom-class');
21
- });
22
- it('has fill attribute', () => {
23
- const { container } = render(React.createElement(BoatIcon, null));
24
- const svg = container.querySelector('svg');
25
- expect(svg).toHaveAttribute('fill');
26
- });
27
- });
28
- describe('CalendarIcon', () => {
29
- it('renders correctly', () => {
30
- const { container } = render(React.createElement(CalendarIcon, null));
31
- const svg = container.querySelector('svg');
32
- expect(svg).toBeInTheDocument();
33
- });
34
- it('has correct viewBox', () => {
35
- const { container } = render(React.createElement(CalendarIcon, null));
36
- const svg = container.querySelector('svg');
37
- expect(svg).toHaveAttribute('viewBox');
38
- });
39
- it('accepts custom props', () => {
40
- const { container } = render(React.createElement(CalendarIcon, { "data-testid": "calendar" }));
41
- const svg = container.querySelector('svg');
42
- expect(svg).toHaveAttribute('data-testid', 'calendar');
43
- });
44
- it('renders path elements', () => {
45
- const { container } = render(React.createElement(CalendarIcon, null));
46
- const paths = container.querySelectorAll('path');
47
- expect(paths.length).toBeGreaterThan(0);
48
- });
49
- });
50
- describe('ChevronRightIcon', () => {
51
- it('renders correctly', () => {
52
- const { container } = render(React.createElement(ChevronRightIcon, null));
53
- const svg = container.querySelector('svg');
54
- expect(svg).toBeInTheDocument();
55
- });
56
- it('has correct dimensions', () => {
57
- const { container } = render(React.createElement(ChevronRightIcon, null));
58
- const svg = container.querySelector('svg');
59
- expect(svg).toHaveAttribute('width', '16');
60
- expect(svg).toHaveAttribute('height', '16');
61
- });
62
- it('has correct viewBox', () => {
63
- const { container } = render(React.createElement(ChevronRightIcon, null));
64
- const svg = container.querySelector('svg');
65
- expect(svg).toHaveAttribute('viewBox', '0 0 16 16');
66
- });
67
- it('renders with currentColor stroke', () => {
68
- const { container } = render(React.createElement(ChevronRightIcon, null));
69
- const path = container.querySelector('path');
70
- expect(path).toHaveAttribute('stroke', 'currentColor');
71
- });
72
- it('accepts custom props', () => {
73
- const { container } = render(React.createElement(ChevronRightIcon, { style: { color: 'red' } }));
74
- const svg = container.querySelector('svg');
75
- expect(svg).toHaveStyle({ color: 'red' });
76
- });
77
- });
78
- describe('LocationIcon', () => {
79
- it('renders correctly', () => {
80
- const { container } = render(React.createElement(LocationIcon, null));
81
- const svg = container.querySelector('svg');
82
- expect(svg).toBeInTheDocument();
83
- });
84
- it('has correct viewBox', () => {
85
- const { container } = render(React.createElement(LocationIcon, null));
86
- const svg = container.querySelector('svg');
87
- expect(svg).toHaveAttribute('viewBox');
88
- });
89
- it('accepts custom props', () => {
90
- const { container } = render(React.createElement(LocationIcon, { "aria-label": "location" }));
91
- const svg = container.querySelector('svg');
92
- expect(svg).toHaveAttribute('aria-label', 'location');
93
- });
94
- it('renders path elements', () => {
95
- const { container } = render(React.createElement(LocationIcon, null));
96
- const path = container.querySelector('path');
97
- expect(path).toBeInTheDocument();
98
- });
99
- });
100
- describe('MoonIcon', () => {
101
- it('renders correctly', () => {
102
- const { container } = render(React.createElement(MoonIcon, null));
103
- const svg = container.querySelector('svg');
104
- expect(svg).toBeInTheDocument();
105
- });
106
- it('has correct viewBox', () => {
107
- const { container } = render(React.createElement(MoonIcon, null));
108
- const svg = container.querySelector('svg');
109
- expect(svg).toHaveAttribute('viewBox');
110
- });
111
- it('has correct dimensions', () => {
112
- const { container } = render(React.createElement(MoonIcon, null));
113
- const svg = container.querySelector('svg');
114
- expect(svg).toHaveAttribute('width');
115
- expect(svg).toHaveAttribute('height');
116
- });
117
- it('accepts custom props', () => {
118
- const { container } = render(React.createElement(MoonIcon, { id: "moon-icon" }));
119
- const svg = container.querySelector('svg');
120
- expect(svg).toHaveAttribute('id', 'moon-icon');
121
- });
122
- it('renders path with fill color', () => {
123
- const { container } = render(React.createElement(MoonIcon, null));
124
- const path = container.querySelector('path');
125
- expect(path).toHaveAttribute('fill');
126
- });
127
- });
128
- describe('Icons Integration', () => {
129
- it('all icons render without errors', () => {
130
- const { container } = render(React.createElement("div", null,
131
- React.createElement(BoatIcon, null),
132
- React.createElement(CalendarIcon, null),
133
- React.createElement(ChevronRightIcon, null),
134
- React.createElement(LocationIcon, null),
135
- React.createElement(MoonIcon, null)));
136
- const svgs = container.querySelectorAll('svg');
137
- expect(svgs.length).toBe(5);
138
- });
139
- it('icons can be styled with className', () => {
140
- const { container } = render(React.createElement("div", null,
141
- React.createElement(BoatIcon, { className: "icon-style" }),
142
- React.createElement(CalendarIcon, { className: "icon-style" }),
143
- React.createElement(LocationIcon, { className: "icon-style" })));
144
- const svgs = container.querySelectorAll('.icon-style');
145
- expect(svgs.length).toBe(3);
146
- });
147
- it('icons maintain SVG structure', () => {
148
- const icons = [
149
- React.createElement(BoatIcon, { key: "boat" }),
150
- React.createElement(CalendarIcon, { key: "calendar" }),
151
- React.createElement(ChevronRightIcon, { key: "chevron" }),
152
- React.createElement(LocationIcon, { key: "location" }),
153
- React.createElement(MoonIcon, { key: "moon" })
154
- ];
155
- icons.forEach(icon => {
156
- const { container } = render(icon);
157
- const svg = container.querySelector('svg');
158
- if (svg) {
159
- expect(svg.tagName).toBe('svg');
160
- }
161
- });
162
- });
163
- });
164
- });
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmlwLWNhcmRzL19fdGVzdHNfXy9hc3NldHMudGVzdC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDTCxRQUFRLEVBQ1IsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osUUFBUSxFQUNULE1BQU0sV0FBVyxDQUFDO0FBRW5CLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7SUFDakMsUUFBUSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7UUFDeEIsRUFBRSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtZQUMzQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxDQUFDLG9CQUFDLFFBQVEsT0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7WUFDN0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxvQkFBQyxRQUFRLE9BQUcsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzQkFBc0IsRUFB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