Skip to content

Commit bf45566

Browse files
committed
test: add tests for resolveToTestingLibraryFn
1 parent bb7df93 commit bf45566

File tree

1 file changed

+241
-0
lines changed

1 file changed

+241
-0
lines changed
Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
import { InvalidTestCase } from '@typescript-eslint/rule-tester';
2+
3+
import { createTestingLibraryRule } from '../../../lib/create-testing-library-rule';
4+
import { LIBRARY_MODULES } from '../../../lib/utils';
5+
import { resolveToTestingLibraryFn } from '../../../lib/utils/resolve-to-testing-library-fn';
6+
import { createRuleTester } from '../test-utils';
7+
8+
type MessageIds = 'details';
9+
10+
const rule = createTestingLibraryRule<[], MessageIds>({
11+
name: __filename,
12+
meta: {
13+
docs: {
14+
recommendedConfig: {
15+
dom: 'error',
16+
angular: 'error',
17+
react: 'error',
18+
vue: 'error',
19+
svelte: 'error',
20+
marko: 'error',
21+
},
22+
description: 'Fake rule for testing parseUserEventFnCall',
23+
},
24+
messages: {
25+
details: '{{ data }}',
26+
},
27+
schema: [],
28+
type: 'problem',
29+
},
30+
defaultOptions: [],
31+
create: (context) => ({
32+
CallExpression(node) {
33+
const testingLibraryFn = resolveToTestingLibraryFn(node, context);
34+
35+
if (testingLibraryFn) {
36+
context.report({
37+
messageId: 'details',
38+
node,
39+
data: {
40+
data: testingLibraryFn,
41+
},
42+
});
43+
}
44+
},
45+
}),
46+
});
47+
48+
const ruleTester = createRuleTester();
49+
50+
ruleTester.run('esm', rule, {
51+
valid: [
52+
{
53+
code: `
54+
import { userEvent } from './test-utils';
55+
56+
(userEvent => userEvent.setup)();
57+
`,
58+
},
59+
{
60+
code: `
61+
import { userEvent } from './test-utils';
62+
63+
function userClick() {
64+
userEvent.click(document.body);
65+
}
66+
[].forEach(userClick);
67+
`,
68+
},
69+
{
70+
code: `
71+
import { userEvent } from './test-utils';
72+
73+
userEvent.setup()
74+
`,
75+
},
76+
...LIBRARY_MODULES.map((module) => ({
77+
code: `
78+
import * as testingLibrary from '${module}';
79+
80+
const { fireEvent } = testingLibrary
81+
fireEvent.click(document.body)
82+
`,
83+
})),
84+
],
85+
invalid: [
86+
{
87+
code: `
88+
import userEvent from '@testing-library/user-event';
89+
90+
userEvent.setup()
91+
`,
92+
errors: [
93+
{
94+
messageId: 'details',
95+
data: {
96+
data: {
97+
original: null,
98+
local: 'userEvent',
99+
},
100+
},
101+
},
102+
],
103+
},
104+
...LIBRARY_MODULES.flatMap<InvalidTestCase<MessageIds, []>>((module) => [
105+
{
106+
code: `
107+
import { fireEvent } from '${module}';
108+
109+
fireEvent.click(document.body)
110+
`,
111+
errors: [
112+
{
113+
messageId: 'details',
114+
data: {
115+
data: {
116+
original: 'fireEvent',
117+
local: 'fireEvent',
118+
},
119+
},
120+
},
121+
],
122+
},
123+
{
124+
code: `
125+
import { fireEvent as fe } from '${module}';
126+
127+
fe.click(document.body)
128+
`,
129+
errors: [
130+
{
131+
messageId: 'details',
132+
data: {
133+
data: {
134+
original: 'fireEvent',
135+
local: 'fe',
136+
},
137+
},
138+
},
139+
],
140+
},
141+
]),
142+
],
143+
});
144+
145+
ruleTester.run('cjs', rule, {
146+
valid: [
147+
{
148+
code: `
149+
const { userEvent } = require('./test-utils');
150+
151+
userEvent.setup()
152+
`,
153+
},
154+
...LIBRARY_MODULES.map((module) => ({
155+
code: `
156+
const testingLibrary = require('${module}');
157+
158+
const { fireEvent } = testingLibrary
159+
fireEvent.click(document.body)
160+
`,
161+
})),
162+
],
163+
invalid: [
164+
{
165+
code: `
166+
const { default: userEvent } = require('@testing-library/user-event');
167+
168+
userEvent.setup()
169+
`,
170+
errors: [
171+
{
172+
messageId: 'details',
173+
data: {
174+
data: {
175+
original: null,
176+
local: 'userEvent',
177+
},
178+
},
179+
},
180+
],
181+
},
182+
...LIBRARY_MODULES.flatMap<InvalidTestCase<MessageIds, []>>((module) => [
183+
{
184+
code: `
185+
const { fireEvent } = require('${module}');
186+
187+
fireEvent.click(document.body)
188+
`,
189+
errors: [
190+
{
191+
messageId: 'details',
192+
data: {
193+
data: {
194+
original: 'fireEvent',
195+
local: 'fireEvent',
196+
},
197+
},
198+
},
199+
],
200+
},
201+
{
202+
code: `
203+
const { fireEvent: fe } = require('${module}');
204+
205+
fe.click(document.body)
206+
`,
207+
errors: [
208+
{
209+
messageId: 'details',
210+
data: {
211+
data: {
212+
original: 'fireEvent',
213+
local: 'fe',
214+
},
215+
},
216+
},
217+
],
218+
},
219+
]),
220+
],
221+
});
222+
223+
ruleTester.run('typescript', rule, {
224+
valid: [
225+
{
226+
code: `
227+
import type userEvent from '@testing-library/user-event';
228+
229+
userEvent.setup()
230+
`,
231+
},
232+
{
233+
code: `
234+
import userEvent = require('@testing-library/user-event');
235+
236+
userEvent.setup()
237+
`,
238+
},
239+
],
240+
invalid: [],
241+
});

0 commit comments

Comments
 (0)