chore: finish frontend ESLint migration #18

Enable every plugin recommended preset and replace Biome with ESLint formatting.

Preserve API contracts and JSX whitespace; verify source, tests, builds and tooling.
This commit is contained in:
2026-09-28 16:36:40 +03:00
committed by ksv741
parent 57630102e4
commit 72d7835227
253 changed files with 10059 additions and 8864 deletions
+51 -41
View File
@@ -7,37 +7,41 @@ import {
waitFor,
within,
} from "@testing-library/react";
import { HttpResponse, http } from "msw";
import { http, HttpResponse } from "msw";
import { MemoryRouter } from "react-router";
import { describe, expect, it } from "vitest";
import { configureAuthClient } from "@/shared/api";
import { createTestQueryClient } from "@/test/query";
import { server } from "@/test/server";
import { CardsPage } from "./CardsPage";
const money = (value: string) => ({ currency: "RUB", value });
function renderCards(fail = false, categoryFail = false) {
function renderCards(isFail = false, hasCategoryFailure = false) {
configureAuthClient({
accessToken: () => "test",
refresh: async () => false,
clear: () => {},
refresh: () => Promise.resolve(false),
});
server.use(
http.get("*/api/v1/bank-cards/categories", () =>
categoryFail ? HttpResponse.error() : HttpResponse.json([]),
hasCategoryFailure ? HttpResponse.error() : HttpResponse.json([]),
),
http.get("*/api/v1/bank-cards", () =>
fail ? HttpResponse.error() : HttpResponse.json([]),
isFail ? HttpResponse.error() : HttpResponse.json([]),
),
http.get("*/api/v1/bank-cards/summary", () =>
HttpResponse.json({
month: "2026-09",
cardId: null,
expenses: money("0"),
refunds: money("0"),
net: money("0"),
categories: [],
}),
HttpResponse.json((/* eslint-disable unicorn/no-null -- Fixture preserves the production contract’s explicit null values. */
{
cardId: null,
categories: [],
expenses: money("0"),
month: "2026-09",
net: money("0"),
refunds: money("0"),
}
/* eslint-enable unicorn/no-null */)),
),
);
return render(
@@ -64,9 +68,9 @@ describe("CardsPage", () => {
http.post("*/api/v1/bank-cards", async ({ request }) => {
submitted.push((await request.json()) as Record<string, unknown>);
if (submitted.length === 1) {
await new Promise<void>((r) => {
resolve = r;
});
const deferred = Promise.withResolvers<void>();
resolve = deferred.resolve;
await deferred.promise;
return HttpResponse.error();
}
return HttpResponse.json({ id: submitted[0].id }, { status: 201 });
@@ -107,12 +111,14 @@ describe("CardsPage", () => {
expect(screen.queryByRole("dialog")).not.toBeInTheDocument(),
);
expect(submitted[0]).toEqual(submitted[1]);
expect(submitted[0]).toMatchObject({
name: "Повседневная",
bankName: null,
lastFour: null,
openingBalance: money("-92233720368547758.08"),
});
expect(submitted[0]).toMatchObject((/* eslint-disable unicorn/no-null -- Fixture preserves the production contract’s explicit null values. */
{
bankName: null,
lastFour: null,
name: "Повседневная",
openingBalance: money("-92233720368547758.08"),
}
/* eslint-enable unicorn/no-null */));
});
it("uses archive only for card list and keeps all-card summary including negative net", async () => {
renderCards();
@@ -121,17 +127,19 @@ describe("CardsPage", () => {
http.get("*/api/v1/bank-cards", ({ request }) => {
requests.push(new URL(request.url).search);
return HttpResponse.json([
{
id: "demo",
name: "Запасная",
bankName: null,
lastFour: null,
balance: money("0"),
archivedAt: "2026-09-01",
version: 1,
openingBalance: money("0"),
openingDate: "2026-01-01",
},
(/* eslint-disable unicorn/no-null -- Fixture preserves the production contract’s explicit null values. */
{
archivedAt: "2026-09-01",
balance: money("0"),
bankName: null,
id: "demo",
lastFour: null,
name: "Запасная",
openingBalance: money("0"),
openingDate: "2026-01-01",
version: 1,
}
/* eslint-enable unicorn/no-null */),
]);
}),
);
@@ -154,13 +162,15 @@ describe("CardsPage", () => {
server.use(
http.get("*/api/v1/bank-cards/summary", ({ request }) => {
requests.push(new URL(request.url).search);
return HttpResponse.json({
cardId: null,
expenses: money("0"),
refunds: money("0"),
net: money("0"),
categories: [],
});
return HttpResponse.json((/* eslint-disable unicorn/no-null -- Fixture preserves the production contract’s explicit null values. */
{
cardId: null,
categories: [],
expenses: money("0"),
net: money("0"),
refunds: money("0"),
}
/* eslint-enable unicorn/no-null */));
}),
);
fireEvent.click(screen.getByLabelText("Период"));
@@ -202,7 +212,7 @@ describe("CardsPage", () => {
server.use(
http.get("*/api/v1/bank-cards/categories", () =>
HttpResponse.json([
{ id: "default", name: "Другое", version: 1, isDefault: true },
{ id: "default", isDefault: true, name: "Другое", version: 1 },
]),
),
);