@times-components/ts-components 1.145.1-cfea81c4084e6f91221ea00fec9fc730d5b933cb.4 → 1.145.1-d1253ed8e87e7cdf861fbf772a5f9026182434db.4

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 (136) hide show
  1. package/dist/components/opta/cricket/scorecard/OptaCricketScorecard.js +10 -2
  2. package/dist/components/opta/cricket/scorecard/__tests__/OptaCricketScorecard.test.js +94 -17
  3. package/dist/components/opta/football/summary/OptaFootballSummary.js +10 -2
  4. package/dist/components/opta/football/summary/__tests__/OptaFootballSummary.test.js +95 -18
  5. package/dist/components/opta/rugby/summary/OptaRugbySummary.js +10 -2
  6. package/dist/components/opta/rugby/summary/__tests__/OptaRugbySummary.test.js +94 -17
  7. package/dist/components/opta/utils/__tests__/emitEvent.test.js +264 -0
  8. package/dist/components/opta/utils/emitEvent.d.ts +1 -0
  9. package/dist/components/opta/utils/emitEvent.js +15 -0
  10. package/dist/index.d.ts +0 -1
  11. package/dist/index.js +1 -2
  12. package/package.json +3 -3
  13. package/rnw.js +1 -1
  14. package/src/components/opta/cricket/scorecard/OptaCricketScorecard.tsx +13 -0
  15. package/src/components/opta/cricket/scorecard/__tests__/OptaCricketScorecard.test.tsx +126 -16
  16. package/src/components/opta/cricket/scorecard/__tests__/__snapshots__/OptaCricketScorecard.test.tsx.snap +5 -6
  17. package/src/components/opta/football/summary/OptaFootballSummary.tsx +13 -0
  18. package/src/components/opta/football/summary/__tests__/OptaFootballSummary.test.tsx +127 -18
  19. package/src/components/opta/football/summary/__tests__/__snapshots__/OptaFootballSummary.test.tsx.snap +5 -6
  20. package/src/components/opta/rugby/summary/OptaRugbySummary.tsx +13 -0
  21. package/src/components/opta/rugby/summary/__tests__/OptaRugbySummary.test.tsx +127 -17
  22. package/src/components/opta/rugby/summary/__tests__/__snapshots__/OptaRugbySummary.test.tsx.snap +5 -6
  23. package/src/components/opta/utils/__tests__/emitEvent.test.tsx +415 -0
  24. package/src/components/opta/utils/emitEvent.ts +20 -0
  25. package/src/index.ts +0 -2
  26. package/dist/components/carousel-component/CarouselComponent.stories.js +0 -146
  27. package/dist/components/carousel-component/CarouselItem.d.ts +0 -3
  28. package/dist/components/carousel-component/CarouselItem.js +0 -11
  29. package/dist/components/carousel-component/DefaultNavigationArrow.d.ts +0 -8
  30. package/dist/components/carousel-component/DefaultNavigationArrow.js +0 -6
  31. package/dist/components/carousel-component/DefaultPageDot.d.ts +0 -8
  32. package/dist/components/carousel-component/DefaultPageDot.js +0 -4
  33. package/dist/components/carousel-component/__tests__/CarouselComponent.test.d.ts +0 -1
  34. package/dist/components/carousel-component/__tests__/CarouselComponent.test.js +0 -163
  35. package/dist/components/carousel-component/__tests__/CarouselItem.test.d.ts +0 -1
  36. package/dist/components/carousel-component/__tests__/CarouselItem.test.js +0 -80
  37. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.d.ts +0 -1
  38. package/dist/components/carousel-component/__tests__/DefaultNavigationArrow.test.js +0 -62
  39. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.d.ts +0 -1
  40. package/dist/components/carousel-component/__tests__/DefaultPageDot.test.js +0 -68
  41. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.d.ts +0 -1
  42. package/dist/components/carousel-component/hooks/__tests__/useCarousel.test.js +0 -314
  43. package/dist/components/carousel-component/hooks/useCarousel.d.ts +0 -2
  44. package/dist/components/carousel-component/hooks/useCarousel.js +0 -140
  45. package/dist/components/carousel-component/index.d.ts +0 -4
  46. package/dist/components/carousel-component/index.js +0 -20
  47. package/dist/components/carousel-component/styles.d.ts +0 -30
  48. package/dist/components/carousel-component/styles.js +0 -120
  49. package/dist/components/carousel-component/types.d.ts +0 -46
  50. package/dist/components/carousel-component/types.js +0 -2
  51. package/dist/components/trip-cards/SkeletonCard.d.ts +0 -2
  52. package/dist/components/trip-cards/SkeletonCard.js +0 -21
  53. package/dist/components/trip-cards/TripCard.d.ts +0 -3
  54. package/dist/components/trip-cards/TripCard.js +0 -47
  55. package/dist/components/trip-cards/TripCards.stories.d.ts +0 -1
  56. package/dist/components/trip-cards/TripCards.stories.js +0 -40
  57. package/dist/components/trip-cards/TripCardsLayout.d.ts +0 -3
  58. package/dist/components/trip-cards/TripCardsLayout.js +0 -26
  59. package/dist/components/trip-cards/__tests__/SkeletonCard.test.d.ts +0 -1
  60. package/dist/components/trip-cards/__tests__/SkeletonCard.test.js +0 -139
  61. package/dist/components/trip-cards/__tests__/TripCard.test.d.ts +0 -1
  62. package/dist/components/trip-cards/__tests__/TripCard.test.js +0 -95
  63. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.d.ts +0 -1
  64. package/dist/components/trip-cards/__tests__/TripCardsLayout.test.js +0 -277
  65. package/dist/components/trip-cards/__tests__/assets.test.d.ts +0 -1
  66. package/dist/components/trip-cards/__tests__/assets.test.js +0 -165
  67. package/dist/components/trip-cards/__tests__/helpers.test.d.ts +0 -1
  68. package/dist/components/trip-cards/__tests__/helpers.test.js +0 -135
  69. package/dist/components/trip-cards/__tests__/index.test.d.ts +0 -1
  70. package/dist/components/trip-cards/__tests__/index.test.js +0 -437
  71. package/dist/components/trip-cards/__tests__/mockData.test.d.ts +0 -1
  72. package/dist/components/trip-cards/__tests__/mockData.test.js +0 -57
  73. package/dist/components/trip-cards/__tests__/skeletonStyles.test.d.ts +0 -1
  74. package/dist/components/trip-cards/__tests__/skeletonStyles.test.js +0 -194
  75. package/dist/components/trip-cards/assets/BoatIcon.d.ts +0 -1
  76. package/dist/components/trip-cards/assets/BoatIcon.js +0 -4
  77. package/dist/components/trip-cards/assets/CalendarIcon.d.ts +0 -1
  78. package/dist/components/trip-cards/assets/CalendarIcon.js +0 -4
  79. package/dist/components/trip-cards/assets/ChevronRightIcon.d.ts +0 -1
  80. package/dist/components/trip-cards/assets/ChevronRightIcon.js +0 -4
  81. package/dist/components/trip-cards/assets/LocationIcon.d.ts +0 -1
  82. package/dist/components/trip-cards/assets/LocationIcon.js +0 -4
  83. package/dist/components/trip-cards/assets/MoonIcon.d.ts +0 -1
  84. package/dist/components/trip-cards/assets/MoonIcon.js +0 -4
  85. package/dist/components/trip-cards/assets/index.d.ts +0 -6
  86. package/dist/components/trip-cards/assets/index.js +0 -7
  87. package/dist/components/trip-cards/helpers.d.ts +0 -4
  88. package/dist/components/trip-cards/helpers.js +0 -74
  89. package/dist/components/trip-cards/index.d.ts +0 -4
  90. package/dist/components/trip-cards/index.js +0 -70
  91. package/dist/components/trip-cards/mockData.d.ts +0 -3
  92. package/dist/components/trip-cards/mockData.js +0 -323
  93. package/dist/components/trip-cards/skeletonStyles.d.ts +0 -9
  94. package/dist/components/trip-cards/skeletonStyles.js +0 -37
  95. package/dist/components/trip-cards/styles.d.ts +0 -39
  96. package/dist/components/trip-cards/styles.js +0 -387
  97. package/dist/components/trip-cards/types.d.ts +0 -87
  98. package/dist/components/trip-cards/types.js +0 -2
  99. package/src/components/carousel-component/CarouselComponent.stories.tsx +0 -220
  100. package/src/components/carousel-component/CarouselItem.tsx +0 -20
  101. package/src/components/carousel-component/DefaultNavigationArrow.tsx +0 -37
  102. package/src/components/carousel-component/DefaultPageDot.tsx +0 -20
  103. package/src/components/carousel-component/__tests__/CarouselComponent.test.tsx +0 -259
  104. package/src/components/carousel-component/__tests__/CarouselItem.test.tsx +0 -140
  105. package/src/components/carousel-component/__tests__/DefaultNavigationArrow.test.tsx +0 -153
  106. package/src/components/carousel-component/__tests__/DefaultPageDot.test.tsx +0 -105
  107. package/src/components/carousel-component/hooks/__tests__/useCarousel.test.ts +0 -438
  108. package/src/components/carousel-component/hooks/useCarousel.ts +0 -187
  109. package/src/components/carousel-component/index.tsx +0 -88
  110. package/src/components/carousel-component/styles.ts +0 -140
  111. package/src/components/carousel-component/types.ts +0 -51
  112. package/src/components/trip-cards/SkeletonCard.tsx +0 -54
  113. package/src/components/trip-cards/TripCard.tsx +0 -135
  114. package/src/components/trip-cards/TripCards.stories.tsx +0 -67
  115. package/src/components/trip-cards/TripCardsLayout.tsx +0 -75
  116. package/src/components/trip-cards/__tests__/SkeletonCard.test.tsx +0 -169
  117. package/src/components/trip-cards/__tests__/TripCard.test.tsx +0 -120
  118. package/src/components/trip-cards/__tests__/TripCardsLayout.test.tsx +0 -532
  119. package/src/components/trip-cards/__tests__/assets.test.tsx +0 -206
  120. package/src/components/trip-cards/__tests__/helpers.test.ts +0 -165
  121. package/src/components/trip-cards/__tests__/index.test.tsx +0 -499
  122. package/src/components/trip-cards/__tests__/mockData.test.ts +0 -67
  123. package/src/components/trip-cards/__tests__/skeletonStyles.test.tsx +0 -256
  124. package/src/components/trip-cards/assets/BoatIcon.tsx +0 -17
  125. package/src/components/trip-cards/assets/CalendarIcon.tsx +0 -17
  126. package/src/components/trip-cards/assets/ChevronRightIcon.tsx +0 -20
  127. package/src/components/trip-cards/assets/LocationIcon.tsx +0 -17
  128. package/src/components/trip-cards/assets/MoonIcon.tsx +0 -17
  129. package/src/components/trip-cards/assets/index.ts +0 -7
  130. package/src/components/trip-cards/helpers.ts +0 -99
  131. package/src/components/trip-cards/index.tsx +0 -104
  132. package/src/components/trip-cards/mockData.ts +0 -351
  133. package/src/components/trip-cards/skeletonStyles.ts +0 -46
  134. package/src/components/trip-cards/styles.ts +0 -426
  135. package/src/components/trip-cards/types.ts +0 -91
  136. /package/dist/components/{carousel-component/CarouselComponent.stories.d.ts → opta/utils/__tests__/emitEvent.test.d.ts} +0 -0
@@ -1,105 +0,0 @@
1
- import React from 'react';
2
- import { render, screen, fireEvent } from '@testing-library/react';
3
- import '@testing-library/jest-dom';
4
- import { DefaultPageDot } from '../DefaultPageDot';
5
-
6
- describe('DefaultPageDot', () => {
7
- const mockOnClick = jest.fn();
8
-
9
- beforeEach(() => {
10
- mockOnClick.mockClear();
11
- });
12
-
13
- it('renders active dot', () => {
14
- render(<DefaultPageDot active={true} onClick={mockOnClick} index={0} />);
15
-
16
- const button = screen.getByRole('button');
17
- expect(button).toBeInTheDocument();
18
- });
19
-
20
- it('renders inactive dot', () => {
21
- render(<DefaultPageDot active={false} onClick={mockOnClick} index={0} />);
22
-
23
- const button = screen.getByRole('button');
24
- expect(button).toBeInTheDocument();
25
- });
26
-
27
- it('calls onClick when clicked', () => {
28
- render(<DefaultPageDot active={false} onClick={mockOnClick} index={0} />);
29
-
30
- const button = screen.getByRole('button');
31
- fireEvent.click(button);
32
-
33
- expect(mockOnClick).toHaveBeenCalledTimes(1);
34
- });
35
-
36
- it('renders multiple dots with different indices', () => {
37
- const { rerender } = render(
38
- <DefaultPageDot active={true} onClick={mockOnClick} index={0} />
39
- );
40
-
41
- expect(screen.getByRole('button')).toBeInTheDocument();
42
-
43
- rerender(<DefaultPageDot active={false} onClick={mockOnClick} index={1} />);
44
-
45
- expect(screen.getByRole('button')).toBeInTheDocument();
46
- });
47
-
48
- it('handles active state changes', () => {
49
- const { rerender } = render(
50
- <DefaultPageDot active={false} onClick={mockOnClick} index={0} />
51
- );
52
-
53
- const button = screen.getByRole('button');
54
- expect(button).toBeInTheDocument();
55
-
56
- rerender(<DefaultPageDot active={true} onClick={mockOnClick} index={0} />);
57
-
58
- expect(button).toBeInTheDocument();
59
- });
60
-
61
- it('applies different styling for active vs inactive state', () => {
62
- const { container, rerender } = render(
63
- <DefaultPageDot active={false} onClick={mockOnClick} index={0} />
64
- );
65
-
66
- const inactiveButton = container.querySelector('button');
67
- expect(inactiveButton).toBeInTheDocument();
68
-
69
- rerender(<DefaultPageDot active={true} onClick={mockOnClick} index={0} />);
70
-
71
- const activeButton = container.querySelector('button');
72
- expect(activeButton).toBeInTheDocument();
73
- });
74
-
75
- it('renders as a button element', () => {
76
- render(<DefaultPageDot active={true} onClick={mockOnClick} index={0} />);
77
-
78
- const button = screen.getByRole('button');
79
- expect(button.tagName).toBe('BUTTON');
80
- });
81
-
82
- it('passes correct index to onClick handler', () => {
83
- const { rerender } = render(
84
- <DefaultPageDot active={false} onClick={mockOnClick} index={2} />
85
- );
86
-
87
- const button = screen.getByRole('button');
88
- fireEvent.click(button);
89
-
90
- expect(mockOnClick).toHaveBeenCalledTimes(1);
91
-
92
- rerender(<DefaultPageDot active={false} onClick={mockOnClick} index={5} />);
93
-
94
- fireEvent.click(button);
95
- expect(mockOnClick).toHaveBeenCalledTimes(2);
96
- });
97
-
98
- it('is focusable for keyboard navigation', () => {
99
- render(<DefaultPageDot active={false} onClick={mockOnClick} index={0} />);
100
-
101
- const button = screen.getByRole('button');
102
- button.focus();
103
- expect(document.activeElement).toBe(button);
104
- });
105
- });
@@ -1,438 +0,0 @@
1
- import React from 'react';
2
- import { renderHook, act } from '@testing-library/react-hooks';
3
- import { useCarousel } from '../useCarousel';
4
-
5
- describe('useCarousel', () => {
6
- beforeEach(() => {
7
- jest.useFakeTimers();
8
- });
9
-
10
- afterEach(() => {
11
- jest.runOnlyPendingTimers();
12
- jest.useRealTimers();
13
- });
14
-
15
- it('initializes with correct default values', () => {
16
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
17
-
18
- expect(result.current.currentPage).toBe(0);
19
- expect(result.current.totalPages).toBe(5);
20
- expect(result.current.isScrolling).toBe(false);
21
- });
22
-
23
- it('calculates correct totalPages', () => {
24
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 3 }));
25
-
26
- expect(result.current.totalPages).toBe(4);
27
- });
28
-
29
- it('provides navigation functions', () => {
30
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
31
-
32
- expect(typeof result.current.handleNext).toBe('function');
33
- expect(typeof result.current.handlePrevious).toBe('function');
34
- expect(typeof result.current.scrollToPage).toBe('function');
35
- });
36
-
37
- it('provides mouse event handlers for drag functionality', () => {
38
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
39
-
40
- expect(typeof result.current.handleMouseDown).toBe('function');
41
- expect(typeof result.current.handleMouseMove).toBe('function');
42
- expect(typeof result.current.handleMouseUp).toBe('function');
43
- expect(typeof result.current.handleMouseLeave).toBe('function');
44
- });
45
-
46
- it('handles single page correctly', () => {
47
- const { result } = renderHook(() => useCarousel(2, { itemsPerPage: 2 }));
48
-
49
- expect(result.current.totalPages).toBe(1);
50
-
51
- act(() => {
52
- result.current.handleNext();
53
- });
54
-
55
- expect(result.current.currentPage).toBe(0);
56
- });
57
-
58
- it('handles empty items', () => {
59
- const { result } = renderHook(() => useCarousel(0, { itemsPerPage: 2 }));
60
-
61
- expect(result.current.totalPages).toBe(0);
62
- expect(result.current.currentPage).toBe(0);
63
- });
64
-
65
- it('updates totalPages when totalItems changes', () => {
66
- const { result, rerender } = renderHook(
67
- ({ total }) => useCarousel(total, { itemsPerPage: 2 }),
68
- { initialProps: { total: 10 } }
69
- );
70
-
71
- expect(result.current.totalPages).toBe(5);
72
-
73
- rerender({ total: 6 });
74
-
75
- expect(result.current.totalPages).toBe(3);
76
- });
77
-
78
- it('cleans up timeout on unmount', () => {
79
- const { unmount } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
80
-
81
- unmount();
82
-
83
- expect(jest.getTimerCount()).toBe(0);
84
- });
85
-
86
- it('defaults to itemsPerPage of 2 when not provided', () => {
87
- const { result } = renderHook(() => useCarousel(10, {}));
88
-
89
- expect(result.current.totalPages).toBe(5);
90
- });
91
-
92
- it('handles itemsPerPage of 1', () => {
93
- const { result } = renderHook(() => useCarousel(5, { itemsPerPage: 1 }));
94
-
95
- expect(result.current.totalPages).toBe(5);
96
- });
97
-
98
- it('handles large number of items', () => {
99
- const { result } = renderHook(() =>
100
- useCarousel(1000, { itemsPerPage: 10 })
101
- );
102
-
103
- expect(result.current.totalPages).toBe(100);
104
- });
105
-
106
- it('handles odd number of items with even itemsPerPage', () => {
107
- const { result } = renderHook(() => useCarousel(5, { itemsPerPage: 2 }));
108
-
109
- expect(result.current.totalPages).toBe(3);
110
- });
111
-
112
- it('provides carouselRef', () => {
113
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
114
-
115
- expect(result.current.carouselRef).toBeDefined();
116
- expect(typeof result.current.carouselRef).toBe('object');
117
- });
118
-
119
- it('updates when itemsPerPage option changes', () => {
120
- const { result, rerender } = renderHook(
121
- ({ itemsPerPage }) => useCarousel(10, { itemsPerPage }),
122
- { initialProps: { itemsPerPage: 2 } }
123
- );
124
-
125
- expect(result.current.totalPages).toBe(5);
126
-
127
- rerender({ itemsPerPage: 5 });
128
-
129
- expect(result.current.totalPages).toBe(2);
130
- });
131
-
132
- it('handles itemsPerPage greater than total items', () => {
133
- const { result } = renderHook(() => useCarousel(3, { itemsPerPage: 10 }));
134
-
135
- expect(result.current.totalPages).toBe(1);
136
- });
137
-
138
- it('calls onPageChange when provided in options', () => {
139
- const onPageChange = jest.fn();
140
- const { result } = renderHook(() =>
141
- useCarousel(10, { itemsPerPage: 2, onPageChange })
142
- );
143
-
144
- expect(result.current.currentPage).toBe(0);
145
- expect(onPageChange).not.toHaveBeenCalled();
146
- });
147
-
148
- it('handles mouseDown without carouselRef', () => {
149
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
150
-
151
- const mockEvent = ({
152
- preventDefault: jest.fn(),
153
- pageX: 100
154
- } as unknown) as React.MouseEvent;
155
-
156
- expect(result.current.carouselRef.current).toBeNull();
157
- act(() => {
158
- result.current.handleMouseDown(mockEvent);
159
- });
160
-
161
- expect(mockEvent.preventDefault).not.toHaveBeenCalled();
162
- });
163
-
164
- it('calls onPageChange when scrolling to a page', () => {
165
- const onPageChange = jest.fn();
166
- const { result } = renderHook(() =>
167
- useCarousel(10, { itemsPerPage: 2, onPageChange })
168
- );
169
-
170
- const mockCard1: Partial<HTMLElement> = { offsetLeft: 0 };
171
- const mockCard2: Partial<HTMLElement> = { offsetLeft: 400 };
172
- const mockChildren = [
173
- mockCard1,
174
- mockCard2,
175
- mockCard1,
176
- mockCard2,
177
- mockCard1
178
- ];
179
-
180
- const mockCarousel = {
181
- scrollLeft: 0,
182
- children: mockChildren,
183
- scrollTo: jest.fn(),
184
- addEventListener: jest.fn(),
185
- removeEventListener: jest.fn()
186
- };
187
-
188
- (result.current.carouselRef as any).current = mockCarousel;
189
-
190
- act(() => {
191
- result.current.scrollToPage(1);
192
- jest.runAllTimers();
193
- });
194
- expect(onPageChange).toHaveBeenCalledWith(1);
195
- expect(mockCarousel.scrollTo).toHaveBeenCalled();
196
- });
197
-
198
- it('returns undefined cleanup when carousel is not mounted', () => {
199
- const { result, unmount } = renderHook(() =>
200
- useCarousel(10, { itemsPerPage: 2 })
201
- );
202
-
203
- expect(result.current.carouselRef.current).toBeNull();
204
-
205
- unmount();
206
- });
207
-
208
- it('handles handleMouseMove when not dragging', () => {
209
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
210
-
211
- const mockEvent = ({
212
- preventDefault: jest.fn(),
213
- pageX: 100
214
- } as unknown) as React.MouseEvent;
215
-
216
- act(() => {
217
- result.current.handleMouseMove(mockEvent);
218
- });
219
-
220
- expect(mockEvent.preventDefault).not.toHaveBeenCalled();
221
- });
222
-
223
- it('handles handleMouseUp when not dragging', () => {
224
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
225
-
226
- const mockEvent = ({
227
- pageX: 100
228
- } as unknown) as React.MouseEvent;
229
-
230
- act(() => {
231
- result.current.handleMouseUp(mockEvent);
232
- });
233
-
234
- expect(result.current.currentPage).toBe(0);
235
- });
236
-
237
- it('handles handleMouseLeave when not dragging', () => {
238
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
239
-
240
- act(() => {
241
- result.current.handleMouseLeave();
242
- });
243
-
244
- expect(result.current.currentPage).toBe(0);
245
- });
246
-
247
- it('handles complete mouse drag interaction', () => {
248
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
249
-
250
- const mockCarousel = {
251
- scrollLeft: 0,
252
- children: [],
253
- scrollTo: jest.fn(),
254
- style: { cursor: 'grab' },
255
- addEventListener: jest.fn(),
256
- removeEventListener: jest.fn()
257
- };
258
-
259
- (result.current.carouselRef as any).current = mockCarousel;
260
-
261
- const mouseDownEvent = ({
262
- preventDefault: jest.fn(),
263
- pageX: 200
264
- } as unknown) as React.MouseEvent;
265
-
266
- const mouseMoveEvent = ({
267
- preventDefault: jest.fn(),
268
- pageX: 150
269
- } as unknown) as React.MouseEvent;
270
-
271
- const mouseUpEvent = ({
272
- pageX: 100
273
- } as unknown) as React.MouseEvent;
274
-
275
- act(() => {
276
- result.current.handleMouseDown(mouseDownEvent);
277
- });
278
-
279
- expect(mouseDownEvent.preventDefault).toHaveBeenCalled();
280
- expect(mockCarousel.style.cursor).toBe('grabbing');
281
-
282
- act(() => {
283
- result.current.handleMouseMove(mouseMoveEvent);
284
- });
285
-
286
- expect(mouseMoveEvent.preventDefault).toHaveBeenCalled();
287
-
288
- act(() => {
289
- result.current.handleMouseUp(mouseUpEvent);
290
- });
291
-
292
- expect(mockCarousel.style.cursor).toBe('grab');
293
- });
294
-
295
- it('handles mouseUp with small drag distance', () => {
296
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
297
-
298
- const mockCarousel = {
299
- scrollLeft: 0,
300
- children: [],
301
- scrollTo: jest.fn(),
302
- style: { cursor: 'grab' },
303
- addEventListener: jest.fn(),
304
- removeEventListener: jest.fn()
305
- };
306
-
307
- (result.current.carouselRef as any).current = mockCarousel;
308
-
309
- act(() => {
310
- result.current.handleMouseDown(({
311
- preventDefault: jest.fn(),
312
- pageX: 100
313
- } as unknown) as React.MouseEvent);
314
- });
315
-
316
- act(() => {
317
- result.current.handleMouseUp(({
318
- pageX: 90
319
- } as unknown) as React.MouseEvent);
320
- });
321
-
322
- expect(result.current.currentPage).toBe(0);
323
- });
324
-
325
- it('handles mouseLeave during active drag', () => {
326
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
327
-
328
- const mockCarousel = {
329
- style: { cursor: 'grab' },
330
- addEventListener: jest.fn(),
331
- removeEventListener: jest.fn()
332
- };
333
-
334
- (result.current.carouselRef as any).current = mockCarousel;
335
-
336
- act(() => {
337
- result.current.handleMouseDown(({
338
- preventDefault: jest.fn(),
339
- pageX: 100
340
- } as unknown) as React.MouseEvent);
341
- });
342
-
343
- expect(mockCarousel.style.cursor).toBe('grabbing');
344
-
345
- act(() => {
346
- result.current.handleMouseLeave();
347
- });
348
-
349
- expect(mockCarousel.style.cursor).toBe('grab');
350
- });
351
-
352
- it('scrollToPage handles case with no children', () => {
353
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
354
-
355
- const mockCarousel = {
356
- children: [],
357
- scrollTo: jest.fn(),
358
- addEventListener: jest.fn(),
359
- removeEventListener: jest.fn()
360
- };
361
-
362
- (result.current.carouselRef as any).current = mockCarousel;
363
-
364
- act(() => {
365
- result.current.scrollToPage(1);
366
- });
367
-
368
- expect(mockCarousel.scrollTo).not.toHaveBeenCalled();
369
- });
370
-
371
- it('handlePrevious and handleNext navigate correctly', () => {
372
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
373
-
374
- const mockCards = Array.from({ length: 5 }, (_, i) => ({
375
- offsetLeft: i * 200
376
- })) as HTMLElement[];
377
-
378
- const mockCarousel = {
379
- children: mockCards,
380
- scrollTo: jest.fn(),
381
- addEventListener: jest.fn(),
382
- removeEventListener: jest.fn()
383
- };
384
-
385
- (result.current.carouselRef as any).current = mockCarousel;
386
-
387
- act(() => {
388
- result.current.handleNext();
389
- jest.runAllTimers();
390
- });
391
-
392
- expect(result.current.currentPage).toBe(1);
393
-
394
- act(() => {
395
- result.current.handlePrevious();
396
- jest.runAllTimers();
397
- });
398
-
399
- expect(result.current.currentPage).toBe(0);
400
- });
401
-
402
- it('drag triggers navigation', () => {
403
- const { result } = renderHook(() => useCarousel(10, { itemsPerPage: 2 }));
404
-
405
- const mockCards = Array.from({ length: 5 }, (_, i) => ({
406
- offsetLeft: i * 200
407
- })) as HTMLElement[];
408
-
409
- const mockCarousel = {
410
- children: mockCards,
411
- scrollTo: jest.fn(),
412
- style: { cursor: 'grab' },
413
- addEventListener: jest.fn(),
414
- removeEventListener: jest.fn()
415
- };
416
-
417
- (result.current.carouselRef as any).current = mockCarousel;
418
-
419
- act(() => {
420
- result.current.handleMouseDown(({
421
- preventDefault: jest.fn(),
422
- pageX: 200
423
- } as unknown) as React.MouseEvent);
424
- });
425
-
426
- act(() => {
427
- result.current.handleMouseUp(({
428
- pageX: 100
429
- } as unknown) as React.MouseEvent);
430
- });
431
-
432
- act(() => {
433
- jest.runAllTimers();
434
- });
435
-
436
- expect(result.current.currentPage).toBe(1);
437
- });
438
- });