Skip to content

Commit

Permalink
chore: tidy up (#500)
Browse files Browse the repository at this point in the history
* chore(utils): remove unneeded passing of generic values

* chore(utils): remove unused exports

* chore(prefer-todo): adjust `messageId`s & variable names

* chore(no-expect-resolves): use `isSupportedAccessor`

* chore(no-jasmine-globals): use `isSupportedAccessor`

* chore(no-standalone-expect): remove unneeded checks in `isEach`

* chore(no-test-callback): use `AST_NODE_TYPES` instead of string

* chore(no-test-return-statement): use `AST_NODE_TYPES` instead of string

* chore(no-truthy-falsy): rename messageId & data property

* chore(prefer-expect-assertions): use `hasOnlyOneArgument` guard

* chore(consistent-test-it): replace `switch` statement with `if`

* chore(consistent-test-it): use `buildFixer` function

* chore(lowercase-name): use `CallExpressionWithSingleArgument` interface

* chore(lowercase-name): use `StringNode` instead of `ArgumentLiteral`

* chore(lowercase-name): merge if conditions

* chore(lowercase-name): change report node

* chore(lowercase-name): add a few more tests

* chore(utils): add jsdoc about `ParsedExpectMatcher#arguments` property

* chore(lowercase-name): update tests
  • Loading branch information
G-Rath committed Jan 4, 2020
1 parent 9dadd3c commit 3f32225
Show file tree
Hide file tree
Showing 14 changed files with 152 additions and 187 deletions.
22 changes: 12 additions & 10 deletions src/rules/__tests__/lowercase-name.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ ruleTester.run('lowercase-name', rule, {
'foo.bar()',
'it()',
"it(' ', function () {})",
'it(true, function () {})',
'it(MY_CONSTANT, function () {})',
'it(" ", function () {})',
'it(` `, function () {})',
"it('foo', function () {})",
Expand Down Expand Up @@ -62,7 +64,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: TestCaseName.it },
column: 1,
column: 4,
line: 1,
},
],
Expand All @@ -74,7 +76,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: TestCaseName.it },
column: 1,
column: 4,
line: 1,
},
],
Expand All @@ -86,7 +88,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: TestCaseName.it },
column: 1,
column: 4,
line: 1,
},
],
Expand All @@ -98,7 +100,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: TestCaseName.test },
column: 1,
column: 6,
line: 1,
},
],
Expand All @@ -110,7 +112,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: TestCaseName.test },
column: 1,
column: 6,
line: 1,
},
],
Expand All @@ -122,7 +124,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: TestCaseName.test },
column: 1,
column: 6,
line: 1,
},
],
Expand All @@ -134,7 +136,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: DescribeAlias.describe },
column: 1,
column: 10,
line: 1,
},
],
Expand All @@ -146,7 +148,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: DescribeAlias.describe },
column: 1,
column: 10,
line: 1,
},
],
Expand All @@ -158,7 +160,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: DescribeAlias.describe },
column: 1,
column: 10,
line: 1,
},
],
Expand All @@ -170,7 +172,7 @@ ruleTester.run('lowercase-name', rule, {
{
messageId: 'unexpectedLowercase',
data: { method: DescribeAlias.describe },
column: 1,
column: 10,
line: 1,
},
],
Expand Down
36 changes: 18 additions & 18 deletions src/rules/__tests__/no-truthy-falsy.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ ruleTester.run('no-truthy-falsy', rule, {
code: 'expect(true).toBeTruthy();',
errors: [
{
messageId: 'avoidMessage',
data: { methodName: 'toBeTruthy' },
messageId: 'avoidMatcher',
data: { matcherName: 'toBeTruthy' },
column: 14,
line: 1,
},
Expand All @@ -32,8 +32,8 @@ ruleTester.run('no-truthy-falsy', rule, {
code: 'expect(true)["toBeTruthy"]();',
errors: [
{
messageId: 'avoidMessage',
data: { methodName: 'toBeTruthy' },
messageId: 'avoidMatcher',
data: { matcherName: 'toBeTruthy' },
column: 14,
line: 1,
},
Expand All @@ -43,8 +43,8 @@ ruleTester.run('no-truthy-falsy', rule, {
code: 'expect(false).not.toBeTruthy();',
errors: [
{
messageId: 'avoidMessage',
data: { methodName: 'toBeTruthy' },
messageId: 'avoidMatcher',
data: { matcherName: 'toBeTruthy' },
column: 19,
line: 1,
},
Expand All @@ -54,8 +54,8 @@ ruleTester.run('no-truthy-falsy', rule, {
code: 'expect(Promise.resolve({})).resolves.toBeTruthy()',
errors: [
{
messageId: 'avoidMessage',
data: { methodName: 'toBeTruthy' },
messageId: 'avoidMatcher',
data: { matcherName: 'toBeTruthy' },
column: 38,
line: 1,
},
Expand All @@ -65,8 +65,8 @@ ruleTester.run('no-truthy-falsy', rule, {
code: 'expect(Promise.resolve({})).rejects.toBeTruthy()',
errors: [
{
messageId: 'avoidMessage',
data: { methodName: 'toBeTruthy' },
messageId: 'avoidMatcher',
data: { matcherName: 'toBeTruthy' },
column: 37,
line: 1,
},
Expand All @@ -76,8 +76,8 @@ ruleTester.run('no-truthy-falsy', rule, {
code: 'expect(false).toBeFalsy();',
errors: [
{
messageId: 'avoidMessage',
data: { methodName: 'toBeFalsy' },
messageId: 'avoidMatcher',
data: { matcherName: 'toBeFalsy' },
column: 15,
line: 1,
},
Expand All @@ -87,8 +87,8 @@ ruleTester.run('no-truthy-falsy', rule, {
code: 'expect(true).not.toBeFalsy();',
errors: [
{
messageId: 'avoidMessage',
data: { methodName: 'toBeFalsy' },
messageId: 'avoidMatcher',
data: { matcherName: 'toBeFalsy' },
column: 18,
line: 1,
},
Expand All @@ -98,8 +98,8 @@ ruleTester.run('no-truthy-falsy', rule, {
code: 'expect(Promise.resolve({})).resolves.toBeFalsy()',
errors: [
{
messageId: 'avoidMessage',
data: { methodName: 'toBeFalsy' },
messageId: 'avoidMatcher',
data: { matcherName: 'toBeFalsy' },
column: 38,
line: 1,
},
Expand All @@ -109,8 +109,8 @@ ruleTester.run('no-truthy-falsy', rule, {
code: 'expect(Promise.resolve({})).rejects.toBeFalsy()',
errors: [
{
messageId: 'avoidMessage',
data: { methodName: 'toBeFalsy' },
messageId: 'avoidMatcher',
data: { matcherName: 'toBeFalsy' },
column: 37,
line: 1,
},
Expand Down
13 changes: 7 additions & 6 deletions src/rules/__tests__/prefer-todo.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ ruleTester.run('prefer-todo', rule, {
'fit("foo")',
'fit.concurrent("foo")',
'xit("foo")',
'test("foo", 1)',
'test("stub", () => expect(1).toBe(1));',
'test.concurrent("stub", () => expect(1).toBe(1));',
`
Expand All @@ -28,32 +29,32 @@ ruleTester.run('prefer-todo', rule, {
invalid: [
{
code: `test("i need to write this test");`,
errors: [{ messageId: 'todoOverUnimplemented' }],
errors: [{ messageId: 'unimplementedTest' }],
output: 'test.todo("i need to write this test");',
},
{
code: 'test(`i need to write this test`);',
errors: [{ messageId: 'todoOverUnimplemented' }],
errors: [{ messageId: 'unimplementedTest' }],
output: 'test.todo(`i need to write this test`);',
},
{
code: 'it("foo", function () {})',
errors: [{ messageId: 'todoOverEmpty' }],
errors: [{ messageId: 'emptyTest' }],
output: 'it.todo("foo")',
},
{
code: 'it("foo", () => {})',
errors: [{ messageId: 'todoOverEmpty' }],
errors: [{ messageId: 'emptyTest' }],
output: 'it.todo("foo")',
},
{
code: `test.skip("i need to write this test", () => {});`,
errors: [{ messageId: 'todoOverEmpty' }],
errors: [{ messageId: 'emptyTest' }],
output: 'test.todo("i need to write this test");',
},
{
code: `test.skip("i need to write this test", function() {});`,
errors: [{ messageId: 'todoOverEmpty' }],
errors: [{ messageId: 'emptyTest' }],
output: 'test.todo("i need to write this test");',
},
],
Expand Down
55 changes: 25 additions & 30 deletions src/rules/consistent-test-it.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils';
import {
AST_NODE_TYPES,
TSESLint,
TSESTree,
} from '@typescript-eslint/experimental-utils';
import {
TestCaseName,
createRule,
Expand All @@ -7,6 +11,17 @@ import {
isTestCase,
} from './utils';

const buildFixer = (
callee: TSESTree.LeftHandSideExpression,
nodeName: string,
preferredTestKeyword: TestCaseName.test | TestCaseName.it,
) => (fixer: TSESLint.RuleFixer) => [
fixer.replaceText(
callee.type === AST_NODE_TYPES.MemberExpression ? callee.object : callee,
getPreferredNodeName(nodeName, preferredTestKeyword),
),
];

export default createRule<
[
Partial<{
Expand Down Expand Up @@ -56,7 +71,7 @@ export default createRule<
let describeNestingLevel = 0;

return {
CallExpression(node) {
CallExpression(node: TSESTree.CallExpression) {
const nodeName = getNodeName(node.callee);

if (!nodeName) {
Expand All @@ -78,15 +93,7 @@ export default createRule<
messageId: 'consistentMethod',
node: node.callee,
data: { testKeyword, oppositeTestKeyword },
fix(fixer) {
const nodeToReplace =
node.callee.type === AST_NODE_TYPES.MemberExpression
? node.callee.object
: node.callee;

const fixedNodeName = getPreferredNodeName(nodeName, testKeyword);
return [fixer.replaceText(nodeToReplace, fixedNodeName)];
},
fix: buildFixer(node.callee, nodeName, testKeyword),
});
}

Expand All @@ -103,18 +110,7 @@ export default createRule<
messageId: 'consistentMethodWithinDescribe',
node: node.callee,
data: { testKeywordWithinDescribe, oppositeTestKeyword },
fix(fixer) {
const nodeToReplace =
node.callee.type === AST_NODE_TYPES.MemberExpression
? node.callee.object
: node.callee;

const fixedNodeName = getPreferredNodeName(
nodeName,
testKeywordWithinDescribe,
);
return [fixer.replaceText(nodeToReplace, fixedNodeName)];
},
fix: buildFixer(node.callee, nodeName, testKeywordWithinDescribe),
});
}
},
Expand All @@ -131,14 +127,13 @@ function getPreferredNodeName(
nodeName: string,
preferredTestKeyword: TestCaseName.test | TestCaseName.it,
) {
switch (nodeName) {
case TestCaseName.fit:
return 'test.only';
default:
return nodeName.startsWith('f') || nodeName.startsWith('x')
? nodeName.charAt(0) + preferredTestKeyword
: preferredTestKeyword;
if (nodeName === TestCaseName.fit) {
return 'test.only';
}

return nodeName.startsWith('f') || nodeName.startsWith('x')
? nodeName.charAt(0) + preferredTestKeyword
: preferredTestKeyword;
}

function getOppositeTestKeyword(test: TestCaseName.test | TestCaseName.it) {
Expand Down
Loading

0 comments on commit 3f32225

Please sign in to comment.