diff --git a/frontend/configs/jest/setupTests.ts b/frontend/configs/jest/setupTests.ts index 3b1f956..9f6cbb6 100644 --- a/frontend/configs/jest/setupTests.ts +++ b/frontend/configs/jest/setupTests.ts @@ -1,6 +1,12 @@ import '@testing-library/jest-dom'; import { server } from '@mocks/jest/server'; -beforeAll(() => server.listen()); -afterEach(() => server.resetHandlers()); -afterAll(() => server.close()); +beforeAll(() => { + server.listen(); +}); +afterEach(() => { + server.resetHandlers(); +}); +afterAll(() => { + server.close(); +}); diff --git a/frontend/eslint.config.ts b/frontend/eslint.config.ts index 754c8ba..4da3d8a 100644 --- a/frontend/eslint.config.ts +++ b/frontend/eslint.config.ts @@ -2,6 +2,7 @@ import pluginQuery from '@tanstack/eslint-plugin-query'; // @ts-expect-error fix package import config from 'eslint-config-ksv741'; +// eslint-disable-next-line import/no-anonymous-default-export export default [ ...pluginQuery.configs['flat/recommended'], // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment @@ -9,14 +10,24 @@ export default [ { rules: { 'import/no-extraneous-dependencies': ['error', { - devDependencies: ['eslint.config.ts', 'rsbuild.config.ts', 'configs/**/*'], + devDependencies: [ + 'eslint.config.ts', + 'rsbuild.config.ts', + 'configs/**/*', + '**/*.test.js', + '**/*.test.jsx', + '**/*.test.ts', + '**/*.test.tsx', + '**/__tests__/**', + '**/tests/**', + '__mocks__/**', + ], }], - 'import/no-anonymous-default-export': 'off', 'import/order': [ 'error', { pathGroups: [ { - pattern: '__spec__/**', + pattern: '__mocks__/**', group: 'builtin', position: 'before', }, @@ -71,13 +82,7 @@ export default [ ], '@typescript-eslint/strict-boolean-expressions': 'off', '@typescript-eslint/no-floating-promises': 'off', - '@typescript-eslint/consistent-return': 'off', 'func-style': 'off', - '@typescript-eslint/no-confusing-void-expression': 'off', - '@typescript-eslint/await-thenable': 'off', - '@typescript-eslint/no-misused-promises': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/no-unnecessary-condition': 'off', 'jsx-a11y/click-events-have-key-events': 'off', 'jsx-a11y/no-static-element-interactions': 'off', 'jsx-a11y/no-noninteractive-element-interactions': 'off', @@ -86,23 +91,4 @@ export default [ { ignores: ['./src/shared/api/schema.ts'], }, - { - files: [ - '**/*.test.js', - '**/*.test.jsx', - '**/*.test.ts', - '**/*.test.tsx', - '**/__tests__/**', - '**/tests/**', - '__mocks__/**', - ], - rules: { - 'import/no-extraneous-dependencies': [ - 'error', - { devDependencies: true }, // в тестах можно - ], - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - }, - }, ]; diff --git a/frontend/src/entity/expenses/item/ui/AddExpenseItemForm/AddExpenseItemForm.test.tsx b/frontend/src/entity/expenses/item/ui/AddExpenseItemForm/AddExpenseItemForm.test.tsx index f984945..2d124ad 100644 --- a/frontend/src/entity/expenses/item/ui/AddExpenseItemForm/AddExpenseItemForm.test.tsx +++ b/frontend/src/entity/expenses/item/ui/AddExpenseItemForm/AddExpenseItemForm.test.tsx @@ -37,8 +37,12 @@ describe('Test AddExpenseItemForm', () => { }); test.each([ - ['enabled', {}, (el: HTMLElement) => expect(el).toBeEnabled()], - ['disabled', { disabled: true }, (el: HTMLElement) => expect(el).toBeDisabled()], + ['enabled', {}, (el: HTMLElement) => { + expect(el).toBeEnabled(); + }], + ['disabled', { disabled: true }, (el: HTMLElement) => { + expect(el).toBeDisabled(); + }], ])('should render fields %s', (_state, options, assertion) => { const { onSubmit, ...formElems } = renderForm(options); Object.values(formElems).forEach(assertion); diff --git a/frontend/src/entity/expenses/item/ui/EditExpenseItemForm/EditExpenseItemForm.test.tsx b/frontend/src/entity/expenses/item/ui/EditExpenseItemForm/EditExpenseItemForm.test.tsx index 1f2a749..987bda5 100644 --- a/frontend/src/entity/expenses/item/ui/EditExpenseItemForm/EditExpenseItemForm.test.tsx +++ b/frontend/src/entity/expenses/item/ui/EditExpenseItemForm/EditExpenseItemForm.test.tsx @@ -72,8 +72,12 @@ describe('Test EditExpenseItemForm', () => { }); test.each([ - ['enabled', {}, (el: HTMLElement) => expect(el).toBeEnabled()], - ['disabled', { disabled: true }, (el: HTMLElement) => expect(el).toBeDisabled()], + ['enabled', {}, (el: HTMLElement) => { + expect(el).toBeEnabled(); + }], + ['disabled', { disabled: true }, (el: HTMLElement) => { + expect(el).toBeDisabled(); + }], ])('should render fields %s', (_state, options, assertion) => { const { onSubmit, ...formElems } = renderForm(options); Object.values(formElems).forEach(assertion); diff --git a/frontend/src/entity/expenses/item/ui/EditExpenseItemForm/EditExpenseItemForm.ui.tsx b/frontend/src/entity/expenses/item/ui/EditExpenseItemForm/EditExpenseItemForm.ui.tsx index e2d9d7a..7971404 100644 --- a/frontend/src/entity/expenses/item/ui/EditExpenseItemForm/EditExpenseItemForm.ui.tsx +++ b/frontend/src/entity/expenses/item/ui/EditExpenseItemForm/EditExpenseItemForm.ui.tsx @@ -36,6 +36,7 @@ const EditExpenseItemForm: FC = (props) => { ...formProps } = props; + // eslint-disable-next-line @typescript-eslint/no-misused-promises const onFormSubmitHandler: FormEventHandler = async (event) => { event.preventDefault(); diff --git a/frontend/src/entity/expenses/list/ui/AddExpensesListForm/ui/AddExpensesListForm.test.tsx b/frontend/src/entity/expenses/list/ui/AddExpensesListForm/ui/AddExpensesListForm.test.tsx index d12400c..547969b 100644 --- a/frontend/src/entity/expenses/list/ui/AddExpensesListForm/ui/AddExpensesListForm.test.tsx +++ b/frontend/src/entity/expenses/list/ui/AddExpensesListForm/ui/AddExpensesListForm.test.tsx @@ -29,8 +29,12 @@ describe('Test AddExpensesListForm', () => { }); test.each([ - ['enabled', {}, (el: HTMLElement) => expect(el).toBeEnabled()], - ['disabled', { disabled: true }, (el: HTMLElement) => expect(el).toBeDisabled()], + ['enabled', {}, (el: HTMLElement) => { + expect(el).toBeEnabled(); + }], + ['disabled', { disabled: true }, (el: HTMLElement) => { + expect(el).toBeDisabled(); + }], ])('should render fields %s', (_state, options, assertion) => { const { onSubmit, ...formElems } = renderForm(options); Object.values(formElems).forEach(assertion); diff --git a/frontend/src/entity/expenses/list/ui/AddExpensesListForm/ui/AddExpensesListForm.ui.tsx b/frontend/src/entity/expenses/list/ui/AddExpensesListForm/ui/AddExpensesListForm.ui.tsx index c8098f1..6e105a3 100644 --- a/frontend/src/entity/expenses/list/ui/AddExpensesListForm/ui/AddExpensesListForm.ui.tsx +++ b/frontend/src/entity/expenses/list/ui/AddExpensesListForm/ui/AddExpensesListForm.ui.tsx @@ -37,7 +37,7 @@ const AddExpensesListForm: FC = (props) => { const title = formData.get('title'); if (typeof title === 'string') { - onSubmit?.({ + onSubmit({ title, }); } diff --git a/frontend/src/entity/expenses/list/ui/DeleteExpensesListForm/ui/DeleteExpensesListForm.ui.tsx b/frontend/src/entity/expenses/list/ui/DeleteExpensesListForm/ui/DeleteExpensesListForm.ui.tsx index 51d1bf8..f47e98c 100644 --- a/frontend/src/entity/expenses/list/ui/DeleteExpensesListForm/ui/DeleteExpensesListForm.ui.tsx +++ b/frontend/src/entity/expenses/list/ui/DeleteExpensesListForm/ui/DeleteExpensesListForm.ui.tsx @@ -46,14 +46,14 @@ const DeleteExpensesListForm: FC = (props) => {

{ - list?.items && list?.items?.length > 0 + list.items && list.items.length > 0 ? (

В нем содержится {' '} - {list.items?.length} + {list.items.length} {' '} diff --git a/frontend/src/entity/expenses/list/ui/EditExpensesListForm/ui/EditExpensesListForm.test.tsx b/frontend/src/entity/expenses/list/ui/EditExpensesListForm/ui/EditExpensesListForm.test.tsx index 59dfb50..5c87511 100644 --- a/frontend/src/entity/expenses/list/ui/EditExpensesListForm/ui/EditExpensesListForm.test.tsx +++ b/frontend/src/entity/expenses/list/ui/EditExpensesListForm/ui/EditExpensesListForm.test.tsx @@ -51,8 +51,12 @@ describe('Test EditExpensesListForm', () => { }); test.each([ - ['enabled', {}, (el: HTMLElement) => expect(el).toBeEnabled()], - ['disabled', { disabled: true }, (el: HTMLElement) => expect(el).toBeDisabled()], + ['enabled', {}, (el: HTMLElement) => { + expect(el).toBeEnabled(); + }], + ['disabled', { disabled: true }, (el: HTMLElement) => { + expect(el).toBeDisabled(); + }], ])('should render fields %s', (_state, options, assertion) => { const { onSubmit, ...formElems } = renderForm(options); Object.values(formElems).forEach(assertion); diff --git a/frontend/src/features/expenses/items/AddExpenseItemButton/hooks/useAddExpenseItemButton.ts b/frontend/src/features/expenses/items/AddExpenseItemButton/hooks/useAddExpenseItemButton.ts index f778ce9..15a5e84 100644 --- a/frontend/src/features/expenses/items/AddExpenseItemButton/hooks/useAddExpenseItemButton.ts +++ b/frontend/src/features/expenses/items/AddExpenseItemButton/hooks/useAddExpenseItemButton.ts @@ -15,7 +15,9 @@ export const useAddExpenseItemButton = (args: UseAddExpenseItemButtonArgs) => { const [isOpen, setIsOpen] = useState(false); const { mutateAsync: addExpenseItemMutation, isPending } = useAddExpenseItem({ id: listId }); - const onCloseModalHandler = () => setIsOpen(false); + const onCloseModalHandler = () => { + setIsOpen(false); + }; const onClickHandler: MouseEventHandler = (event) => { setIsOpen(true); diff --git a/frontend/src/features/expenses/items/DeleteExpenseItemButton/hooks/useDeleteExpenseItemButton.ts b/frontend/src/features/expenses/items/DeleteExpenseItemButton/hooks/useDeleteExpenseItemButton.ts index e2b07c3..1bcb78f 100644 --- a/frontend/src/features/expenses/items/DeleteExpenseItemButton/hooks/useDeleteExpenseItemButton.ts +++ b/frontend/src/features/expenses/items/DeleteExpenseItemButton/hooks/useDeleteExpenseItemButton.ts @@ -13,7 +13,9 @@ export const useDeleteExpenseItemButton = (args: UseDeleteExpenseItemButtonArgs) const { item, onClick } = args; const [isOpen, setIsOpen] = useState(false); - const onCloseModalHandler = () => setIsOpen(false); + const onCloseModalHandler = () => { + setIsOpen(false); + }; const onClickHandler: MouseEventHandler = (event) => { setIsOpen(true); onClick?.(event); diff --git a/frontend/src/features/expenses/items/EditExpenseItemButton/hooks/useEditExpenseItemButton.ts b/frontend/src/features/expenses/items/EditExpenseItemButton/hooks/useEditExpenseItemButton.ts index b97c2bd..bcc10a9 100644 --- a/frontend/src/features/expenses/items/EditExpenseItemButton/hooks/useEditExpenseItemButton.ts +++ b/frontend/src/features/expenses/items/EditExpenseItemButton/hooks/useEditExpenseItemButton.ts @@ -17,7 +17,9 @@ export const useEditExpenseItemButton = (args: UseAddExpenseItemButtonArgs) => { id: item.id, listId: item.expenseListId, }); - const onCloseModalHandler = () => setIsOpen(false); + const onCloseModalHandler = () => { + setIsOpen(false); + }; const onClickHandler: MouseEventHandler = (event) => { setIsOpen(true); diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index 1367bc4..2a7516c 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -7,7 +7,7 @@ const rootEl = document.getElementById('root'); async function enableMocking() { if (process.env.PUBLIC_ENABLE_MOCKING !== 'true') { - return; + return false; } const { worker } = await import('@mocks/browser/msw'); diff --git a/frontend/src/widgets/expenses/ExpensesTable/ui/ExpensesTable.ui.tsx b/frontend/src/widgets/expenses/ExpensesTable/ui/ExpensesTable.ui.tsx index 8dbe045..af5877a 100644 --- a/frontend/src/widgets/expenses/ExpensesTable/ui/ExpensesTable.ui.tsx +++ b/frontend/src/widgets/expenses/ExpensesTable/ui/ExpensesTable.ui.tsx @@ -9,7 +9,7 @@ import classes from './ExpensesTable.module.css'; const ExpensesTable = () => { const { data: expensesList, isPending, isLoading } = useExpensesList(); - if (isPending || isLoading) { + if (isLoading || isPending) { return ( Loading... ); @@ -49,7 +49,7 @@ const ExpensesTable = () => { - {expense.items?.length || 0} + {expense.items?.length ?? 0}