@@ -5,11 +5,11 @@ import {
5
5
import { createRuleTester } from '../test-utils' ;
6
6
import { LIBRARY_MODULES } from '../../../lib/utils' ;
7
7
import rule , {
8
- RULE_NAME ,
8
+ MAPPING_TO_USER_EVENT ,
9
9
MessageIds ,
10
10
Options ,
11
+ RULE_NAME ,
11
12
UserEventMethods ,
12
- MappingToUserEvent ,
13
13
} from '../../../lib/rules/prefer-user-event' ;
14
14
15
15
function createScenarioWithImport <
@@ -18,7 +18,7 @@ function createScenarioWithImport<
18
18
return LIBRARY_MODULES . reduce (
19
19
( acc : Array < T > , libraryModule ) =>
20
20
acc . concat (
21
- Object . keys ( MappingToUserEvent ) . map ( ( fireEventMethod ) =>
21
+ Object . keys ( MAPPING_TO_USER_EVENT ) . map ( ( fireEventMethod ) =>
22
22
callback ( libraryModule , fireEventMethod )
23
23
)
24
24
) ,
@@ -28,6 +28,26 @@ function createScenarioWithImport<
28
28
29
29
const ruleTester = createRuleTester ( ) ;
30
30
31
+ function formatUserEventMethodsMessage ( fireEventMethod : string ) : string {
32
+ const userEventMethods = MAPPING_TO_USER_EVENT [ fireEventMethod ] . map (
33
+ ( methodName ) => `userEvent.${ methodName } `
34
+ ) ;
35
+ let joinedList = '' ;
36
+
37
+ for ( let i = 0 ; i < userEventMethods . length ; i ++ ) {
38
+ const item = userEventMethods [ i ] ;
39
+ if ( i === 0 ) {
40
+ joinedList += item ;
41
+ } else if ( i + 1 === userEventMethods . length ) {
42
+ joinedList += `, or ${ item } ` ;
43
+ } else {
44
+ joinedList += `, ${ item } ` ;
45
+ }
46
+ }
47
+
48
+ return joinedList ;
49
+ }
50
+
31
51
ruleTester . run ( RULE_NAME , rule , {
32
52
valid : [
33
53
{
@@ -132,7 +152,7 @@ ruleTester.run(RULE_NAME, rule, {
132
152
userEvent.${ userEventMethod } (foo)
133
153
` ,
134
154
} ) ) ,
135
- ...Object . keys ( MappingToUserEvent ) . map ( ( fireEventMethod : string ) => ( {
155
+ ...Object . keys ( MAPPING_TO_USER_EVENT ) . map ( ( fireEventMethod : string ) => ( {
136
156
settings : {
137
157
'testing-library/utils-module' : 'test-utils' ,
138
158
} ,
@@ -143,7 +163,7 @@ ruleTester.run(RULE_NAME, rule, {
143
163
fireEvent.${ fireEventMethod } (foo)
144
164
` ,
145
165
} ) ) ,
146
- ...Object . keys ( MappingToUserEvent ) . map ( ( fireEventMethod : string ) => ( {
166
+ ...Object . keys ( MAPPING_TO_USER_EVENT ) . map ( ( fireEventMethod : string ) => ( {
147
167
settings : {
148
168
'testing-library/utils-module' : 'test-utils' ,
149
169
} ,
@@ -154,7 +174,7 @@ ruleTester.run(RULE_NAME, rule, {
154
174
` ,
155
175
options : [ { allowedMethods : [ fireEventMethod ] } ] ,
156
176
} ) ) ,
157
- ...Object . keys ( MappingToUserEvent ) . map ( ( fireEventMethod : string ) => ( {
177
+ ...Object . keys ( MAPPING_TO_USER_EVENT ) . map ( ( fireEventMethod : string ) => ( {
158
178
settings : {
159
179
'testing-library/utils-module' : 'test-utils' ,
160
180
} ,
@@ -165,7 +185,7 @@ ruleTester.run(RULE_NAME, rule, {
165
185
` ,
166
186
options : [ { allowedMethods : [ fireEventMethod ] } ] ,
167
187
} ) ) ,
168
- ...Object . keys ( MappingToUserEvent ) . map ( ( fireEventMethod : string ) => ( {
188
+ ...Object . keys ( MAPPING_TO_USER_EVENT ) . map ( ( fireEventMethod : string ) => ( {
169
189
settings : {
170
190
'testing-library/utils-module' : 'test-utils' ,
171
191
} ,
@@ -198,6 +218,10 @@ ruleTester.run(RULE_NAME, rule, {
198
218
messageId : 'preferUserEvent' ,
199
219
line : 4 ,
200
220
column : 9 ,
221
+ data : {
222
+ userEventMethods : formatUserEventMethodsMessage ( fireEventMethod ) ,
223
+ fireEventMethod : fireEventMethod ,
224
+ } ,
201
225
} ,
202
226
] ,
203
227
} )
@@ -208,7 +232,17 @@ ruleTester.run(RULE_NAME, rule, {
208
232
import * as dom from '${ libraryModule } '
209
233
dom.fireEvent.${ fireEventMethod } (foo)
210
234
` ,
211
- errors : [ { messageId : 'preferUserEvent' , line : 3 , column : 9 } ] ,
235
+ errors : [
236
+ {
237
+ messageId : 'preferUserEvent' ,
238
+ line : 3 ,
239
+ column : 9 ,
240
+ data : {
241
+ userEventMethods : formatUserEventMethodsMessage ( fireEventMethod ) ,
242
+ fireEventMethod : fireEventMethod ,
243
+ } ,
244
+ } ,
245
+ ] ,
212
246
} )
213
247
) ,
214
248
...createScenarioWithImport < InvalidTestCase < MessageIds , Options > > (
@@ -217,7 +251,17 @@ ruleTester.run(RULE_NAME, rule, {
217
251
const { fireEvent } = require('${ libraryModule } ')
218
252
fireEvent.${ fireEventMethod } (foo)
219
253
` ,
220
- errors : [ { messageId : 'preferUserEvent' , line : 3 , column : 9 } ] ,
254
+ errors : [
255
+ {
256
+ messageId : 'preferUserEvent' ,
257
+ line : 3 ,
258
+ column : 9 ,
259
+ data : {
260
+ userEventMethods : formatUserEventMethodsMessage ( fireEventMethod ) ,
261
+ fireEventMethod : fireEventMethod ,
262
+ } ,
263
+ } ,
264
+ ] ,
221
265
} )
222
266
) ,
223
267
...createScenarioWithImport < InvalidTestCase < MessageIds , Options > > (
@@ -226,10 +270,20 @@ ruleTester.run(RULE_NAME, rule, {
226
270
const rtl = require('${ libraryModule } ')
227
271
rtl.fireEvent.${ fireEventMethod } (foo)
228
272
` ,
229
- errors : [ { messageId : 'preferUserEvent' , line : 3 , column : 9 } ] ,
273
+ errors : [
274
+ {
275
+ messageId : 'preferUserEvent' ,
276
+ line : 3 ,
277
+ column : 9 ,
278
+ data : {
279
+ userEventMethods : formatUserEventMethodsMessage ( fireEventMethod ) ,
280
+ fireEventMethod : fireEventMethod ,
281
+ } ,
282
+ } ,
283
+ ] ,
230
284
} )
231
285
) ,
232
- ...Object . keys ( MappingToUserEvent ) . map (
286
+ ...Object . keys ( MAPPING_TO_USER_EVENT ) . map (
233
287
( fireEventMethod : string ) =>
234
288
( {
235
289
settings : {
@@ -239,10 +293,22 @@ ruleTester.run(RULE_NAME, rule, {
239
293
import * as dom from 'test-utils'
240
294
dom.fireEvent.${ fireEventMethod } (foo)
241
295
` ,
242
- errors : [ { messageId : 'preferUserEvent' , line : 3 , column : 9 } ] ,
296
+ errors : [
297
+ {
298
+ messageId : 'preferUserEvent' ,
299
+ line : 3 ,
300
+ column : 9 ,
301
+ data : {
302
+ userEventMethods : formatUserEventMethodsMessage (
303
+ fireEventMethod
304
+ ) ,
305
+ fireEventMethod : fireEventMethod ,
306
+ } ,
307
+ } ,
308
+ ] ,
243
309
} as const )
244
310
) ,
245
- ...Object . keys ( MappingToUserEvent ) . map (
311
+ ...Object . keys ( MAPPING_TO_USER_EVENT ) . map (
246
312
( fireEventMethod : string ) =>
247
313
( {
248
314
settings : {
@@ -252,10 +318,22 @@ ruleTester.run(RULE_NAME, rule, {
252
318
import { fireEvent } from 'test-utils'
253
319
fireEvent.${ fireEventMethod } (foo)
254
320
` ,
255
- errors : [ { messageId : 'preferUserEvent' , line : 3 , column : 9 } ] ,
321
+ errors : [
322
+ {
323
+ messageId : 'preferUserEvent' ,
324
+ line : 3 ,
325
+ column : 9 ,
326
+ data : {
327
+ userEventMethods : formatUserEventMethodsMessage (
328
+ fireEventMethod
329
+ ) ,
330
+ fireEventMethod : fireEventMethod ,
331
+ } ,
332
+ } ,
333
+ ] ,
256
334
} as const )
257
335
) ,
258
- ...Object . keys ( MappingToUserEvent ) . map (
336
+ ...Object . keys ( MAPPING_TO_USER_EVENT ) . map (
259
337
( fireEventMethod : string ) =>
260
338
( {
261
339
code : `
@@ -264,10 +342,22 @@ ruleTester.run(RULE_NAME, rule, {
264
342
import { fireEvent } from 'test-utils'
265
343
fireEvent.${ fireEventMethod } (foo)
266
344
` ,
267
- errors : [ { messageId : 'preferUserEvent' , line : 5 , column : 9 } ] ,
345
+ errors : [
346
+ {
347
+ messageId : 'preferUserEvent' ,
348
+ line : 5 ,
349
+ column : 9 ,
350
+ data : {
351
+ userEventMethods : formatUserEventMethodsMessage (
352
+ fireEventMethod
353
+ ) ,
354
+ fireEventMethod : fireEventMethod ,
355
+ } ,
356
+ } ,
357
+ ] ,
268
358
} as const )
269
359
) ,
270
- ...Object . keys ( MappingToUserEvent ) . map (
360
+ ...Object . keys ( MAPPING_TO_USER_EVENT ) . map (
271
361
( fireEventMethod : string ) =>
272
362
( {
273
363
settings : {
@@ -277,14 +367,27 @@ ruleTester.run(RULE_NAME, rule, {
277
367
import { fireEvent as fireEventAliased } from 'test-utils'
278
368
fireEventAliased.${ fireEventMethod } (foo)
279
369
` ,
280
- errors : [ { messageId : 'preferUserEvent' , line : 3 , column : 9 } ] ,
370
+ errors : [
371
+ {
372
+ messageId : 'preferUserEvent' ,
373
+ line : 3 ,
374
+ column : 9 ,
375
+ data : {
376
+ userEventMethods : formatUserEventMethodsMessage (
377
+ fireEventMethod
378
+ ) ,
379
+ fireEventMethod : fireEventMethod ,
380
+ } ,
381
+ } ,
382
+ ] ,
281
383
} as const )
282
384
) ,
283
385
{
284
386
code : ` // simple test to check error in detail
285
387
import { fireEvent } from '@testing-library/react'
286
388
287
389
fireEvent.click(element)
390
+ fireEvent.mouseOut(element)
288
391
` ,
289
392
errors : [
290
393
{
@@ -295,10 +398,21 @@ ruleTester.run(RULE_NAME, rule, {
295
398
endColumn : 22 ,
296
399
data : {
297
400
userEventMethods :
298
- 'userEvent.click() , userEvent.type() or userEvent.deselectOptions() ' ,
401
+ 'userEvent.click, userEvent.type, userEvent.selectOptions, or userEvent.deselectOptions' ,
299
402
fireEventMethod : 'click' ,
300
403
} ,
301
404
} ,
405
+ {
406
+ messageId : 'preferUserEvent' ,
407
+ line : 5 ,
408
+ endLine : 5 ,
409
+ column : 7 ,
410
+ endColumn : 25 ,
411
+ data : {
412
+ userEventMethods : 'userEvent.unhover' ,
413
+ fireEventMethod : 'mouseOut' ,
414
+ } ,
415
+ } ,
302
416
] ,
303
417
} ,
304
418
] ,
0 commit comments