@times-components/ts-components 1.146.2-a0ffbb6bc2acbec91d140a39f6be06256e702094.5 → 1.146.2-c12ed7999a41984c2ba8c437357e7a5df1914881.48

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 (137) hide show
  1. package/dist/components/carousel-component/CarouselComponent.stories.d.ts +1 -0
  2. package/dist/components/carousel-component/CarouselComponent.stories.js +146 -0
  3. package/dist/components/carousel-component/CarouselItem.d.ts +3 -0
  4. package/dist/components/carousel-component/CarouselItem.js +12 -0
  5. package/dist/components/carousel-component/DefaultNavigationArrow.d.ts +8 -0
  6. package/dist/components/carousel-component/DefaultNavigationArrow.js +6 -0
  7. package/dist/components/carousel-component/DefaultPageDot.d.ts +8 -0
  8. package/dist/components/carousel-component/DefaultPageDot.js +4 -0
  9. package/dist/components/carousel-component/__tests__/CarouselComponent.test.d.ts +1 -0
  10. package/dist/components/carousel-component/__tests__/CarouselComponent.test.js +163 -0
  11. package/dist/components/carousel-component/__tests__/CarouselItem.test.d.ts +1 -0
  12. package/dist/components/carousel-component/__tests__/CarouselItem.test.js +80 -0
  13. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.d.ts +1 -0
  14. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.js +62 -0
  15. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.d.ts +1 -0
  16. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.js +68 -0
  17. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.d.ts +1 -0
  18. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.js +459 -0
  19. package/dist/components/carousel-component/hooks/useCarousel.d.ts +2 -0
  20. package/dist/components/carousel-component/hooks/useCarousel.js +167 -0
  21. package/dist/components/carousel-component/index.d.ts +4 -0
  22. package/dist/components/carousel-component/index.js +20 -0
  23. package/dist/components/carousel-component/styles.d.ts +28 -0
  24. package/dist/components/carousel-component/styles.js +172 -0
  25. package/dist/components/carousel-component/types.d.ts +53 -0
  26. package/dist/components/carousel-component/types.js +2 -0
  27. package/dist/components/social-embed/SocialMediaEmbed.js +15 -122
  28. package/dist/components/social-embed/SocialVendor.d.ts +16 -1
  29. package/dist/components/social-embed/SocialVendor.js +2 -41
  30. package/dist/components/social-embed/__tests__/SocialVendor.test.js +1 -8
  31. package/dist/components/social-embed/constants.d.ts +0 -1
  32. package/dist/components/social-embed/constants.js +2 -3
  33. package/dist/components/social-embed/helpers/socialMediaVendors.js +1 -6
  34. package/dist/components/social-embed/styles.d.ts +0 -1
  35. package/dist/components/social-embed/styles.js +1 -28
  36. package/dist/components/trip-cards/SkeletonCard.d.ts +7 -0
  37. package/dist/components/trip-cards/SkeletonCard.js +22 -0
  38. package/dist/components/trip-cards/TripCard.d.ts +3 -0
  39. package/dist/components/trip-cards/TripCard.js +61 -0
  40. package/dist/components/trip-cards/TripCards.stories.d.ts +1 -0
  41. package/dist/components/trip-cards/TripCards.stories.js +159 -0
  42. package/dist/components/trip-cards/TripCardsLayout.d.ts +3 -0
  43. package/dist/components/trip-cards/TripCardsLayout.js +63 -0
  44. package/dist/components/trip-cards/__tests__/SkeletonCard.test.d.ts +1 -0
  45. package/dist/components/trip-cards/__tests__/SkeletonCard.test.js +139 -0
  46. package/dist/components/trip-cards/__tests__/TripCard.test.d.ts +1 -0
  47. package/dist/components/trip-cards/__tests__/TripCard.test.js +165 -0
  48. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.d.ts +1 -0
  49. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.js +353 -0
  50. package/dist/components/trip-cards/__tests__/assets.test.d.ts +1 -0
  51. package/dist/components/trip-cards/__tests__/assets.test.js +165 -0
  52. package/dist/components/trip-cards/__tests__/helpers.test.d.ts +1 -0
  53. package/dist/components/trip-cards/__tests__/helpers.test.js +221 -0
  54. package/dist/components/trip-cards/__tests__/index.test.d.ts +1 -0
  55. package/dist/components/trip-cards/__tests__/index.test.js +482 -0
  56. package/dist/components/trip-cards/__tests__/mockData.test.d.ts +1 -0
  57. package/dist/components/trip-cards/__tests__/mockData.test.js +57 -0
  58. package/dist/components/trip-cards/__tests__/skeletonStyles.test.d.ts +1 -0
  59. package/dist/components/trip-cards/__tests__/skeletonStyles.test.js +194 -0
  60. package/dist/components/trip-cards/assets/BoatIcon.d.ts +1 -0
  61. package/dist/components/trip-cards/assets/BoatIcon.js +4 -0
  62. package/dist/components/trip-cards/assets/CalendarIcon.d.ts +1 -0
  63. package/dist/components/trip-cards/assets/CalendarIcon.js +4 -0
  64. package/dist/components/trip-cards/assets/ChevronRightIcon.d.ts +1 -0
  65. package/dist/components/trip-cards/assets/ChevronRightIcon.js +4 -0
  66. package/dist/components/trip-cards/assets/LocationIcon.d.ts +1 -0
  67. package/dist/components/trip-cards/assets/LocationIcon.js +4 -0
  68. package/dist/components/trip-cards/assets/MoonIcon.d.ts +1 -0
  69. package/dist/components/trip-cards/assets/MoonIcon.js +4 -0
  70. package/dist/components/trip-cards/assets/index.d.ts +6 -0
  71. package/dist/components/trip-cards/assets/index.js +7 -0
  72. package/dist/components/trip-cards/helpers.d.ts +11 -0
  73. package/dist/components/trip-cards/helpers.js +144 -0
  74. package/dist/components/trip-cards/index.d.ts +4 -0
  75. package/dist/components/trip-cards/index.js +68 -0
  76. package/dist/components/trip-cards/mockData.d.ts +3 -0
  77. package/dist/components/trip-cards/mockData.js +317 -0
  78. package/dist/components/trip-cards/skeletonStyles.d.ts +9 -0
  79. package/dist/components/trip-cards/skeletonStyles.js +37 -0
  80. package/dist/components/trip-cards/styles.d.ts +43 -0
  81. package/dist/components/trip-cards/styles.js +404 -0
  82. package/dist/components/trip-cards/types.d.ts +121 -0
  83. package/dist/components/trip-cards/types.js +2 -0
  84. package/dist/index.d.ts +1 -0
  85. package/dist/index.js +2 -1
  86. package/dist/utils/cookie.d.ts +1 -0
  87. package/dist/utils/cookie.js +8 -1
  88. package/package.json +3 -3
  89. package/rnw.js +1 -1
  90. package/src/components/carousel-component/CarouselComponent.stories.tsx +220 -0
  91. package/src/components/carousel-component/CarouselItem.tsx +26 -0
  92. package/src/components/carousel-component/DefaultNavigationArrow.tsx +37 -0
  93. package/src/components/carousel-component/DefaultPageDot.tsx +20 -0
  94. package/src/components/carousel-component/__tests__/CarouselComponent.test.tsx +259 -0
  95. package/src/components/carousel-component/__tests__/CarouselItem.test.tsx +140 -0
  96. package/src/components/carousel-component/__tests__/DefaultNavigationArrow.test.tsx +153 -0
  97. package/src/components/carousel-component/__tests__/DefaultPageDot.test.tsx +105 -0
  98. package/src/components/carousel-component/hooks/__tests__/useCarousel.test.ts +625 -0
  99. package/src/components/carousel-component/hooks/useCarousel.ts +229 -0
  100. package/src/components/carousel-component/index.tsx +92 -0
  101. package/src/components/carousel-component/styles.ts +188 -0
  102. package/src/components/carousel-component/types.ts +62 -0
  103. package/src/components/social-embed/SocialMediaEmbed.tsx +1 -111
  104. package/src/components/social-embed/SocialVendor.tsx +1 -46
  105. package/src/components/social-embed/__tests__/SocialVendor.test.tsx +0 -11
  106. package/src/components/social-embed/constants.ts +1 -2
  107. package/src/components/social-embed/helpers/socialMediaVendors.ts +0 -5
  108. package/src/components/social-embed/styles.ts +0 -30
  109. package/src/components/trip-cards/SkeletonCard.tsx +64 -0
  110. package/src/components/trip-cards/TripCard.tsx +172 -0
  111. package/src/components/trip-cards/TripCards.stories.tsx +224 -0
  112. package/src/components/trip-cards/TripCardsLayout.tsx +162 -0
  113. package/src/components/trip-cards/__tests__/SkeletonCard.test.tsx +169 -0
  114. package/src/components/trip-cards/__tests__/TripCard.test.tsx +255 -0
  115. package/src/components/trip-cards/__tests__/TripCardsLayout.test.tsx +671 -0
  116. package/src/components/trip-cards/__tests__/assets.test.tsx +206 -0
  117. package/src/components/trip-cards/__tests__/helpers.test.ts +273 -0
  118. package/src/components/trip-cards/__tests__/index.test.tsx +554 -0
  119. package/src/components/trip-cards/__tests__/mockData.test.ts +67 -0
  120. package/src/components/trip-cards/__tests__/skeletonStyles.test.tsx +256 -0
  121. package/src/components/trip-cards/assets/BoatIcon.tsx +17 -0
  122. package/src/components/trip-cards/assets/CalendarIcon.tsx +17 -0
  123. package/src/components/trip-cards/assets/ChevronRightIcon.tsx +20 -0
  124. package/src/components/trip-cards/assets/LocationIcon.tsx +17 -0
  125. package/src/components/trip-cards/assets/MoonIcon.tsx +17 -0
  126. package/src/components/trip-cards/assets/index.ts +7 -0
  127. package/src/components/trip-cards/helpers.ts +181 -0
  128. package/src/components/trip-cards/index.tsx +120 -0
  129. package/src/components/trip-cards/mockData.ts +345 -0
  130. package/src/components/trip-cards/skeletonStyles.ts +46 -0
  131. package/src/components/trip-cards/styles.ts +450 -0
  132. package/src/components/trip-cards/types.ts +130 -0
  133. package/src/index.ts +2 -0
  134. package/src/utils/cookie.ts +8 -0
  135. package/dist/components/social-embed/components/FacebookComponent.d.ts +0 -6
  136. package/dist/components/social-embed/components/FacebookComponent.js +0 -74
  137. package/src/components/social-embed/components/FacebookComponent.tsx +0 -93
@@ -0,0 +1,482 @@
1
+ import React from 'react';
2
+ import { render, screen, waitFor } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+ import { TripCards } from '../index';
5
+ import * as mockDataModule from '../mockData';
6
+ global.fetch = jest.fn();
7
+ // Mock ResizeObserver
8
+ global.ResizeObserver = class ResizeObserver {
9
+ observe() {
10
+ // Mock implementation
11
+ }
12
+ unobserve() {
13
+ // Mock implementation
14
+ }
15
+ disconnect() {
16
+ // Mock implementation
17
+ }
18
+ };
19
+ describe('TripCards', () => {
20
+ const mockCards = [
21
+ {
22
+ cruise_id: '1',
23
+ image: 'image1.jpg',
24
+ headline: 'Mock Cruise 1',
25
+ date: 'Jan 2024',
26
+ duration: '7 nights',
27
+ route: 'Route 1',
28
+ ship: 'Ship 1',
29
+ price: '£1000',
30
+ original_price: undefined,
31
+ logo: 'logo1.png',
32
+ logo_url: 'https://example.com',
33
+ logo_name: 'Mock Line 1',
34
+ cta_url: 'link1',
35
+ cta_text: 'View'
36
+ },
37
+ {
38
+ cruise_id: '2',
39
+ image: 'image2.jpg',
40
+ headline: 'Mock Cruise 2',
41
+ date: 'Feb 2024',
42
+ duration: '14 nights',
43
+ route: 'Route 2',
44
+ ship: 'Ship 2',
45
+ price: '£2000',
46
+ original_price: undefined,
47
+ logo: 'logo2.png',
48
+ logo_url: 'https://example.com',
49
+ logo_name: 'Mock Line 2',
50
+ cta_url: 'link2',
51
+ cta_text: 'View'
52
+ },
53
+ {
54
+ cruise_id: '3',
55
+ image: 'image3.jpg',
56
+ headline: 'Mock Cruise 3',
57
+ date: 'Mar 2024',
58
+ duration: '10 nights',
59
+ route: 'Route 3',
60
+ ship: 'Ship 3',
61
+ price: '£1500',
62
+ original_price: undefined,
63
+ logo: 'logo3.png',
64
+ logo_url: 'https://example.com',
65
+ logo_name: 'Mock Line 3',
66
+ cta_url: 'link3',
67
+ cta_text: 'View'
68
+ }
69
+ ];
70
+ const mockElement = {
71
+ title: 'Test Cruises',
72
+ description: 'Test Description',
73
+ tripcards: btoa(JSON.stringify([1, 2, 3])),
74
+ titleurl: 'https://example.com'
75
+ };
76
+ beforeEach(() => {
77
+ jest.clearAllMocks();
78
+ // Mock matchMedia for each test
79
+ Object.defineProperty(window, 'matchMedia', {
80
+ writable: true,
81
+ configurable: true,
82
+ value: jest.fn().mockImplementation(query => ({
83
+ matches: false,
84
+ media: query,
85
+ onchange: null,
86
+ addListener: jest.fn(),
87
+ removeListener: jest.fn(),
88
+ addEventListener: jest.fn(),
89
+ removeEventListener: jest.fn(),
90
+ dispatchEvent: jest.fn()
91
+ }))
92
+ });
93
+ jest
94
+ .spyOn(mockDataModule, 'getMockTripCards')
95
+ .mockImplementation((count) => {
96
+ return count ? mockCards.slice(0, count) : mockCards;
97
+ });
98
+ Object.defineProperty(window, 'innerWidth', {
99
+ writable: true,
100
+ configurable: true,
101
+ value: 1024
102
+ });
103
+ });
104
+ describe('Mock Data Mode', () => {
105
+ it('renders cards when useMockData is true', async () => {
106
+ render(React.createElement(TripCards, { element: mockElement, useMockData: true }));
107
+ await waitFor(() => {
108
+ expect(screen.getByText('Mock Cruise 1')).toBeInTheDocument();
109
+ expect(screen.getByText('Mock Cruise 2')).toBeInTheDocument();
110
+ });
111
+ });
112
+ it('renders title and description', async () => {
113
+ render(React.createElement(TripCards, { element: mockElement, useMockData: true }));
114
+ await waitFor(() => {
115
+ expect(screen.getByText('Test Cruises')).toBeInTheDocument();
116
+ expect(screen.getByText('Test Description')).toBeInTheDocument();
117
+ });
118
+ });
119
+ it('respects the number of IDs', async () => {
120
+ render(React.createElement(TripCards, { element: mockElement, useMockData: true }));
121
+ await waitFor(() => {
122
+ expect(mockDataModule.getMockTripCards).toHaveBeenCalledWith(3);
123
+ });
124
+ });
125
+ });
126
+ describe('Error Handling', () => {
127
+ it('returns null when no IDs are provided', async () => {
128
+ const emptyElement = {
129
+ title: 'Test',
130
+ description: 'Test',
131
+ tripcards: '',
132
+ titleurl: undefined
133
+ };
134
+ const { container } = render(React.createElement(TripCards, { element: emptyElement }));
135
+ await waitFor(() => {
136
+ expect(container.firstChild).toBeNull();
137
+ });
138
+ });
139
+ it('returns null when fetch fails', async () => {
140
+ global.fetch.mockRejectedValue(new Error('Network error'));
141
+ const { container } = render(React.createElement(TripCards, { element: mockElement }));
142
+ await waitFor(() => {
143
+ expect(container.firstChild).toBeNull();
144
+ });
145
+ });
146
+ it('returns null when response is not ok', async () => {
147
+ global.fetch.mockResolvedValue({
148
+ ok: false,
149
+ status: 404
150
+ });
151
+ const { container } = render(React.createElement(TripCards, { element: mockElement }));
152
+ await waitFor(() => {
153
+ expect(container.firstChild).toBeNull();
154
+ });
155
+ });
156
+ it('returns null when API response format is invalid', async () => {
157
+ global.fetch.mockResolvedValue({
158
+ ok: true,
159
+ json: async () => ({ invalid: 'data' })
160
+ });
161
+ const { container } = render(React.createElement(TripCards, { element: mockElement }));
162
+ await waitFor(() => {
163
+ expect(container.firstChild).toBeNull();
164
+ });
165
+ });
166
+ });
167
+ describe('API Data Fetching', () => {
168
+ it('fetches and displays cruise data from API', async () => {
169
+ const mockApiResponse = {
170
+ results: [
171
+ {
172
+ post_id: 1,
173
+ cruise_id: 1,
174
+ cruise_title: 'API Cruise 1',
175
+ cruise_line: {
176
+ name: 'API Line',
177
+ link: 'http://line.com',
178
+ logo: 'logo.png'
179
+ },
180
+ ship: {
181
+ name: 'API Ship',
182
+ link: 'http://ship.com',
183
+ image: 'api-image1.jpg'
184
+ },
185
+ departs: '2026-03-01',
186
+ ends: '2026-03-11',
187
+ date_label: 'March 2024',
188
+ destination: ['Port 1', 'Port 3'],
189
+ duration: 10,
190
+ itinerary: ['Port 1', 'Port 2', 'Port 3'],
191
+ prices: {
192
+ cheapest_price: 1500,
193
+ inside: 1500,
194
+ outside: 1800,
195
+ balcony: 2000,
196
+ suite: 2500
197
+ },
198
+ was_prices: {
199
+ inside: 2000,
200
+ outside: 2200,
201
+ balcony: 2500,
202
+ suite: 3000
203
+ },
204
+ link: 'api-link',
205
+ campaigns: ['Special'],
206
+ extras: {
207
+ date: 'March 2024',
208
+ duration: '10 nights',
209
+ destination: 'Mediterranean',
210
+ info: 'Additional info'
211
+ }
212
+ },
213
+ {
214
+ post_id: 2,
215
+ cruise_id: 2,
216
+ cruise_title: 'API Cruise 2',
217
+ cruise_line: {
218
+ name: 'API Line',
219
+ link: 'http://line.com',
220
+ logo: 'logo.png'
221
+ },
222
+ ship: {
223
+ name: 'API Ship 2',
224
+ link: 'http://ship.com',
225
+ image: 'api-image2.jpg'
226
+ },
227
+ departs: '2026-04-01',
228
+ ends: '2026-04-11',
229
+ date_label: 'April 2024',
230
+ destination: ['Port 2', 'Port 4'],
231
+ duration: 10,
232
+ itinerary: ['Port 2', 'Port 3', 'Port 4'],
233
+ prices: {
234
+ cheapest_price: 1600,
235
+ inside: 1600,
236
+ outside: 1900,
237
+ balcony: 2100,
238
+ suite: 2600
239
+ },
240
+ was_prices: {
241
+ inside: 0,
242
+ outside: 0,
243
+ balcony: 0,
244
+ suite: 0
245
+ },
246
+ link: 'api-link2',
247
+ campaigns: [],
248
+ extras: {
249
+ date: 'April 2024',
250
+ duration: '10 nights',
251
+ destination: 'Caribbean',
252
+ info: 'Additional info'
253
+ }
254
+ },
255
+ {
256
+ post_id: 3,
257
+ cruise_id: 3,
258
+ cruise_title: 'API Cruise 3',
259
+ cruise_line: {
260
+ name: 'API Line',
261
+ link: 'http://line.com',
262
+ logo: 'logo.png'
263
+ },
264
+ ship: {
265
+ name: 'API Ship 3',
266
+ link: 'http://ship.com',
267
+ image: 'api-image3.jpg'
268
+ },
269
+ departs: '2026-05-01',
270
+ ends: '2026-05-11',
271
+ date_label: 'May 2024',
272
+ destination: ['Port 3', 'Port 5'],
273
+ duration: 10,
274
+ itinerary: ['Port 3', 'Port 4', 'Port 5'],
275
+ prices: {
276
+ cheapest_price: 1700,
277
+ inside: 1700,
278
+ outside: 2000,
279
+ balcony: 2200,
280
+ suite: 2700
281
+ },
282
+ was_prices: {
283
+ inside: 2100,
284
+ outside: 2400,
285
+ balcony: 2600,
286
+ suite: 3100
287
+ },
288
+ link: 'api-link3',
289
+ campaigns: [],
290
+ extras: {
291
+ date: 'May 2024',
292
+ duration: '10 nights',
293
+ destination: 'Alaska',
294
+ info: 'Additional info'
295
+ }
296
+ }
297
+ ]
298
+ };
299
+ global.fetch.mockResolvedValue({
300
+ ok: true,
301
+ json: async () => mockApiResponse
302
+ });
303
+ render(React.createElement(TripCards, { element: mockElement }));
304
+ await waitFor(() => {
305
+ expect(screen.getByText('API Cruise 1')).toBeInTheDocument();
306
+ });
307
+ });
308
+ it('sends correct request to API', async () => {
309
+ const mockApiResponse = {
310
+ results: mockCards.map((card, index) => ({
311
+ post_id: index + 1,
312
+ cruise_id: parseInt(card.cruise_id, 10),
313
+ cruise_title: card.headline,
314
+ cruise_line: {
315
+ name: 'Test Line',
316
+ link: card.logo_url,
317
+ logo: card.logo
318
+ },
319
+ ship: {
320
+ name: card.ship,
321
+ link: 'http://ship.com',
322
+ image: card.image
323
+ },
324
+ departs: '2026-01-01',
325
+ ends: '2026-01-11',
326
+ date_label: card.date,
327
+ destination: ['Test Port'],
328
+ duration: 10,
329
+ itinerary: ['Port 1', 'Port 2', 'Port 3'],
330
+ prices: {
331
+ cheapest_price: 1500,
332
+ inside: 1500,
333
+ outside: 1800,
334
+ balcony: 2000,
335
+ suite: 2500
336
+ },
337
+ was_prices: {
338
+ inside: 0,
339
+ outside: 0,
340
+ balcony: 0,
341
+ suite: 0
342
+ },
343
+ link: card.cta_url,
344
+ campaigns: [],
345
+ extras: {
346
+ date: card.date,
347
+ duration: card.duration,
348
+ destination: 'Test',
349
+ info: 'Info'
350
+ }
351
+ }))
352
+ };
353
+ global.fetch.mockResolvedValue({
354
+ ok: true,
355
+ json: async () => mockApiResponse
356
+ });
357
+ render(React.createElement(TripCards, { element: mockElement }));
358
+ await waitFor(() => {
359
+ expect(global.fetch).toHaveBeenCalledWith('https://www.staging-thetimes.com/holidays/wp-admin/admin-ajax.php', expect.objectContaining({
360
+ method: 'POST',
361
+ body: expect.any(FormData)
362
+ }));
363
+ });
364
+ });
365
+ });
366
+ describe('Layout', () => {
367
+ it('uses static grid for exactly 2 cards', async () => {
368
+ const twoCardElement = {
369
+ ...mockElement,
370
+ tripcards: btoa(JSON.stringify([1, 2]))
371
+ };
372
+ render(React.createElement(TripCards, { element: twoCardElement, useMockData: true }));
373
+ await waitFor(() => {
374
+ expect(screen.getByText('Mock Cruise 1')).toBeInTheDocument();
375
+ });
376
+ expect(screen.queryByLabelText('Previous items')).not.toBeInTheDocument();
377
+ });
378
+ it('uses carousel for more than 2 cards', async () => {
379
+ const threeCards = [
380
+ ...mockCards,
381
+ {
382
+ cruise_id: '3',
383
+ image: 'image3.jpg',
384
+ headline: 'Mock Cruise 3',
385
+ date: 'Mar 2024',
386
+ duration: '21 nights',
387
+ route: 'Route 3',
388
+ ship: 'Ship 3',
389
+ price: '£3000',
390
+ original_price: undefined,
391
+ logo: 'logo3.png',
392
+ logo_url: 'https://example.com',
393
+ logo_name: 'Mock Line 3',
394
+ cta_url: 'link3',
395
+ cta_text: 'View'
396
+ }
397
+ ];
398
+ jest
399
+ .spyOn(mockDataModule, 'getMockTripCards')
400
+ .mockReturnValue(threeCards);
401
+ render(React.createElement(TripCards, { element: mockElement, useMockData: true }));
402
+ await waitFor(() => {
403
+ expect(screen.getByText('Mock Cruise 1')).toBeInTheDocument();
404
+ expect(screen.getByLabelText('Previous items')).toBeInTheDocument();
405
+ expect(screen.getByLabelText('Next items')).toBeInTheDocument();
406
+ });
407
+ });
408
+ });
409
+ describe('Responsive Behavior', () => {
410
+ it('uses matchMedia for responsive breakpoint detection', () => {
411
+ const mockMediaQuery = {
412
+ matches: false,
413
+ media: '(max-width: 767px)',
414
+ onchange: null,
415
+ addListener: jest.fn(),
416
+ removeListener: jest.fn(),
417
+ addEventListener: jest.fn(),
418
+ removeEventListener: jest.fn(),
419
+ dispatchEvent: jest.fn()
420
+ };
421
+ const matchMediaSpy = jest
422
+ .spyOn(window, 'matchMedia')
423
+ .mockReturnValue(mockMediaQuery);
424
+ const { unmount } = render(React.createElement(TripCards, { element: mockElement, useMockData: true }));
425
+ // Verify matchMedia was called with the correct query
426
+ expect(matchMediaSpy).toHaveBeenCalledWith('(max-width: 767px)');
427
+ // Verify addEventListener was called on the media query
428
+ expect(mockMediaQuery.addEventListener).toHaveBeenCalledWith('change', expect.any(Function));
429
+ unmount();
430
+ // Verify removeEventListener was called on cleanup
431
+ expect(mockMediaQuery.removeEventListener).toHaveBeenCalledWith('change', expect.any(Function));
432
+ matchMediaSpy.mockRestore();
433
+ });
434
+ });
435
+ describe('Props', () => {
436
+ it('renders empty title when not provided', async () => {
437
+ const elementWithoutTitle = {
438
+ ...mockElement,
439
+ title: undefined
440
+ };
441
+ render(React.createElement(TripCards, { element: elementWithoutTitle, useMockData: true }));
442
+ await waitFor(() => {
443
+ const titleElement = screen.getByTestId('trip-cards-title');
444
+ expect(titleElement).toBeInTheDocument();
445
+ expect(titleElement).toBeEmptyDOMElement();
446
+ });
447
+ });
448
+ it('renders empty description when not provided', async () => {
449
+ const elementWithoutDesc = {
450
+ ...mockElement,
451
+ description: undefined
452
+ };
453
+ render(React.createElement(TripCards, { element: elementWithoutDesc, useMockData: true }));
454
+ await waitFor(() => {
455
+ const descElement = screen.getByTestId('trip-cards-subtitle');
456
+ expect(descElement).toBeInTheDocument();
457
+ expect(descElement).toBeEmptyDOMElement();
458
+ });
459
+ });
460
+ it('renders title link when provided', async () => {
461
+ render(React.createElement(TripCards, { element: mockElement, useMockData: true }));
462
+ await waitFor(() => {
463
+ const link = screen.getByTestId('title-link');
464
+ expect(link).toHaveAttribute('href', 'https://example.com');
465
+ expect(link).toHaveAttribute('target', '_blank');
466
+ });
467
+ });
468
+ it('does not render title link when not provided', async () => {
469
+ const elementWithoutLink = {
470
+ ...mockElement,
471
+ titleurl: undefined
472
+ };
473
+ render(React.createElement(TripCards, { element: elementWithoutLink, useMockData: true }));
474
+ await waitFor(() => {
475
+ expect(screen.getByText('Mock Cruise 1')).toBeInTheDocument();
476
+ });
477
+ const links = screen.getAllByRole('link');
478
+ expect(links.length).toBeGreaterThan(0);
479
+ });
480
+ });
481
+ });
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyaXAtY2FyZHMvX190ZXN0c19fL2luZGV4LnRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFckMsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFFOUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFFekIsc0JBQXNCO0FBQ3RCLE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxjQUFjO0lBQ25DLE9BQU87UUFDWixzQkFBc0I7SUFDeEIsQ0FBQztJQUNNLFNBQVM7UUFDZCxzQkFBc0I7SUFDeEIsQ0FBQztJQUNNLFVBQVU7UUFDZixzQkFBc0I7SUFDeEIsQ0FBQztDQUNGLENBQUM7QUFFRixRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtJQUN6QixNQUFNLFNBQVMsR0FBRztRQUNoQjtZQUNFLFNBQVMsRUFBRSxHQUFHO1lBQ2QsS0FBSyxFQUFFLFlBQVk7WUFDbkIsUUFBUSxFQUFFLGVBQWU7WUFDekIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsUUFBUSxFQUFFLFVBQVU7WUFDcEIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxLQUFLLEVBQUUsT0FBTztZQUNkLGNBQWMsRUFBRSxTQUFTO1lBQ3pCLElBQUksRUFBRSxXQUFXO1lBQ2pCLFFBQVEsRUFBRSxxQkFBcUI7WUFDL0IsU0FBUyxFQUFFLGFBQWE7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxF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
@@ -0,0 +1,57 @@
1
+ import { getMockTripCards, mockApiResults } from '../mockData';
2
+ describe('mockData', () => {
3
+ describe('mockApiResults', () => {
4
+ it('contains 6 cruise results', () => {
5
+ expect(mockApiResults).toHaveLength(6);
6
+ });
7
+ it('each result has required fields', () => {
8
+ mockApiResults.forEach(result => {
9
+ expect(result).toHaveProperty('cruise_id');
10
+ expect(result).toHaveProperty('cruise_title');
11
+ expect(result).toHaveProperty('cruise_line');
12
+ expect(result).toHaveProperty('ship');
13
+ expect(result).toHaveProperty('prices');
14
+ expect(result).toHaveProperty('was_prices');
15
+ expect(result).toHaveProperty('extras');
16
+ });
17
+ });
18
+ it('extras object contains required fields', () => {
19
+ mockApiResults.forEach(result => {
20
+ expect(result.extras).toHaveProperty('date');
21
+ expect(result.extras).toHaveProperty('duration');
22
+ expect(result.extras).toHaveProperty('destination');
23
+ expect(result.extras).toHaveProperty('info');
24
+ });
25
+ });
26
+ });
27
+ describe('getMockTripCards', () => {
28
+ it('returns all transformed cards when no count specified', () => {
29
+ const cards = getMockTripCards();
30
+ expect(cards).toHaveLength(6);
31
+ });
32
+ it('returns specified number of cards', () => {
33
+ const cards = getMockTripCards(3);
34
+ expect(cards).toHaveLength(3);
35
+ });
36
+ it('returns transformed TripCardApiData objects', () => {
37
+ const cards = getMockTripCards(1);
38
+ expect(cards[0]).toHaveProperty('cruise_id');
39
+ expect(cards[0]).toHaveProperty('image');
40
+ expect(cards[0]).toHaveProperty('headline');
41
+ expect(cards[0]).toHaveProperty('date');
42
+ expect(cards[0]).toHaveProperty('duration');
43
+ expect(cards[0]).toHaveProperty('route');
44
+ expect(cards[0]).toHaveProperty('ship');
45
+ expect(cards[0]).toHaveProperty('price');
46
+ expect(cards[0]).toHaveProperty('logo');
47
+ expect(cards[0]).toHaveProperty('logo_url');
48
+ expect(cards[0]).toHaveProperty('cta_url');
49
+ expect(cards[0]).toHaveProperty('cta_text');
50
+ });
51
+ it('cruise_id is converted to string', () => {
52
+ const cards = getMockTripCards(1);
53
+ expect(typeof cards[0].cruise_id).toBe('string');
54
+ });
55
+ });
56
+ });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja0RhdGEudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyaXAtY2FyZHMvX190ZXN0c19fL21vY2tEYXRhLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUvRCxRQUFRLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtJQUN4QixRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1FBQzlCLEVBQUUsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7WUFDbkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLEVBQUU7WUFDekMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNM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
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';