@@ -71,6 +71,97 @@ describe('Unit | coreHandlers | handleClick', () => {
71
71
expect ( mockAddBreadcrumbEvent ) . toHaveBeenCalledTimes ( 1 ) ;
72
72
} ) ;
73
73
74
+ test ( 'it captures multiple clicks' , async ( ) => {
75
+ const replay = {
76
+ getCurrentRoute : ( ) => 'test-route' ,
77
+ } as ReplayContainer ;
78
+
79
+ const mockAddBreadcrumbEvent = jest . fn ( ) ;
80
+
81
+ const detector = new ClickDetector (
82
+ replay ,
83
+ {
84
+ threshold : 1_000 ,
85
+ timeout : 3_000 ,
86
+ scrollTimeout : 200 ,
87
+ ignoreSelector : '' ,
88
+ } ,
89
+ mockAddBreadcrumbEvent ,
90
+ ) ;
91
+
92
+ const breadcrumb1 : Breadcrumb = {
93
+ timestamp : BASE_TIMESTAMP / 1000 ,
94
+ data : {
95
+ nodeId : 1 ,
96
+ } ,
97
+ } ;
98
+ const breadcrumb2 : Breadcrumb = {
99
+ timestamp : ( BASE_TIMESTAMP + 200 ) / 1000 ,
100
+ data : {
101
+ nodeId : 1 ,
102
+ } ,
103
+ } ;
104
+ const breadcrumb3 : Breadcrumb = {
105
+ timestamp : ( BASE_TIMESTAMP + 1200 ) / 1000 ,
106
+ data : {
107
+ nodeId : 1 ,
108
+ } ,
109
+ } ;
110
+ const node = document . createElement ( 'button' ) ;
111
+ detector . handleClick ( breadcrumb1 , node ) ;
112
+ detector . handleClick ( breadcrumb2 , node ) ;
113
+ detector . handleClick ( breadcrumb3 , node ) ;
114
+
115
+ expect ( mockAddBreadcrumbEvent ) . toHaveBeenCalledTimes ( 0 ) ;
116
+
117
+ jest . advanceTimersByTime ( 1_000 ) ;
118
+
119
+ expect ( mockAddBreadcrumbEvent ) . toHaveBeenCalledTimes ( 0 ) ;
120
+
121
+ jest . advanceTimersByTime ( 1_000 ) ;
122
+
123
+ expect ( mockAddBreadcrumbEvent ) . toHaveBeenCalledTimes ( 0 ) ;
124
+
125
+ jest . advanceTimersByTime ( 1_000 ) ;
126
+
127
+ expect ( mockAddBreadcrumbEvent ) . toHaveBeenCalledTimes ( 1 ) ;
128
+ expect ( mockAddBreadcrumbEvent ) . toHaveBeenCalledWith ( replay , {
129
+ category : 'ui.slowClickDetected' ,
130
+ type : 'default' ,
131
+ data : {
132
+ clickCount : 1 ,
133
+ endReason : 'timeout' ,
134
+ nodeId : 1 ,
135
+ route : 'test-route' ,
136
+ timeAfterClickMs : 3000 ,
137
+ url : 'http://localhost/' ,
138
+ } ,
139
+ message : undefined ,
140
+ timestamp : BASE_TIMESTAMP / 1000 ,
141
+ } ) ;
142
+
143
+ jest . advanceTimersByTime ( 2_000 ) ;
144
+
145
+ expect ( mockAddBreadcrumbEvent ) . toHaveBeenCalledTimes ( 2 ) ;
146
+ expect ( mockAddBreadcrumbEvent ) . toHaveBeenLastCalledWith ( replay , {
147
+ category : 'ui.slowClickDetected' ,
148
+ type : 'default' ,
149
+ data : {
150
+ clickCount : 1 ,
151
+ endReason : 'timeout' ,
152
+ nodeId : 1 ,
153
+ route : 'test-route' ,
154
+ timeAfterClickMs : 3000 ,
155
+ url : 'http://localhost/' ,
156
+ } ,
157
+ message : undefined ,
158
+ timestamp : ( BASE_TIMESTAMP + 1200 ) / 1000 ,
159
+ } ) ;
160
+
161
+ jest . advanceTimersByTime ( 5_000 ) ;
162
+ expect ( mockAddBreadcrumbEvent ) . toHaveBeenCalledTimes ( 2 ) ;
163
+ } ) ;
164
+
74
165
test ( 'it captures clicks on different elements' , async ( ) => {
75
166
const replay = {
76
167
getCurrentRoute : ( ) => 'test-route' ,
0 commit comments