import { getBankCardList, getCashList } from '@mocks/browser/handlers'; import { server } from '@mocks/jest/server'; import { createAppWrapper } from '@mocks/jest/wrappers'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { http, HttpResponse } from 'msw'; import type { AddExpenseItemBody, AddExpenseItemPath, AddExpenseItemSuccessResponse } from '@/entity/expenses/item'; import { AddExpenseItemButton } from '@/features/expenses/items/AddExpenseItemButton'; import { DataTestId } from '@/shared/constants'; const expenseItem = { amount: 12, count: 12, createdAt: '2025-08-29T07:57:40.503Z', currency: 'RUB', date: '2025-08-22T00:00:00.000Z', description: 'Mock description', expenseListId: '10cc093c-3875-4d33-a40a-df526266e262', id: '51a44dc0-597b-49b9-85bb-e0bcd42db3f6', payment: null, title: 'Mock item', updatedAt: '2025-08-29T07:57:40.503Z', }; const renderButton = () => { server.use(getBankCardList, getCashList); render( , { wrapper: createAppWrapper() }, ); const buttonElem = screen.getByTestId(DataTestId.ADD_EXPENSE_ITEM_BUTTON); return { buttonElem, }; }; const openModal = async () => { const { buttonElem } = renderButton(); await userEvent.click(buttonElem); const modalElem = screen.getByRole('presentation'); return { modalElem, }; }; const submitHandler = (requestSpy: jest.Mock, status = 200) => http.post< AddExpenseItemPath, AddExpenseItemBody, AddExpenseItemSuccessResponse >( '/expenses/list/123/items', async ({ request }) => { const body = await request.json(); requestSpy(body); return HttpResponse.json(expenseItem, { status }); }, ); export const AddExpenseItemButtonHelper = { openModal, renderButton, submitHandler, };