fix(lint): unblock CI — add scoped eslint-disable for APIContext mocks

The 6 API/CORS test files mock the Astro APIContext by spreading
`{} as any` to satisfy fields not under test (cookies, redirect,
clientAddress, etc.). Replacing each cast individually would require
either full typed contexts (obscures tests) or 70+ inline disables.

Add one file-level `eslint-disable @typescript-eslint/no-explicit-any`
with a comment explaining the rationale to each affected file.

Production code remains lint-clean. Verified: tsc 0, lint 0,
vitest 339/339.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
emil
2026-05-15 23:39:50 +03:00
co-authored by Claude Opus 4.7
parent 2f7453e571
commit f2afaf60a3
6 changed files with 12 additions and 6 deletions
+2 -1
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-explicit-any -- API handlers expect a full Astro APIContext; tests provide only the fields under test and spread `{} as any` for the rest. Typing the remainder would obscure the test intent. */
import { describe, it, expect, vi, beforeEach } from "vitest";
const mockUser = {
@@ -426,4 +427,4 @@ describe("AI Generate NPC API", () => {
expect(response.status).toBe(204);
expect(response.headers.get("Access-Control-Allow-Origin")).toBe("https://randify.pro");
});
});
});
+2 -1
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-explicit-any -- API handlers expect a full Astro APIContext; tests provide only the fields under test and spread `{} as any` for the rest. Typing the remainder would obscure the test intent. */
import { describe, it, expect } from "vitest";
import {
getCorsHeaders,
@@ -114,4 +115,4 @@ describe("DM API health route", () => {
expect(response.status).toBe(204);
expect(response.headers.get("Access-Control-Allow-Origin")).toBe("https://dm.randify.pro");
});
});
});
+2 -1
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-explicit-any -- API handlers expect a full Astro APIContext; tests provide only the fields under test and spread `{} as any` for the rest. Typing the remainder would obscure the test intent. */
import { describe, it, expect, vi, beforeEach } from "vitest";
const mockUser = {
@@ -352,4 +353,4 @@ describe("AI History API", () => {
expect(body.items).toHaveLength(1);
expect(body.items[0].name).toBe("NPC 1");
});
});
});
+2 -1
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-explicit-any -- API handlers expect a full Astro APIContext; tests provide only the fields under test and spread `{} as any` for the rest. Typing the remainder would obscure the test intent. */
import { describe, it, expect, vi, beforeEach } from "vitest";
const mockUser = {
@@ -347,4 +348,4 @@ describe("Initiative API", () => {
expect(body.name).toBe("Empty Session");
expect(body.participants).toEqual([]);
});
});
});
+2 -1
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-explicit-any -- API handlers expect a full Astro APIContext; tests provide only the fields under test and spread `{} as any` for the rest. Typing the remainder would obscure the test intent. */
import { describe, it, expect, vi, beforeEach } from "vitest";
const mockUser = {
@@ -328,4 +329,4 @@ describe("Notes API", () => {
expect(body.title).toBe("Title Only");
expect(body.content).toBeNull();
});
});
});
+2 -1
View File
@@ -1,3 +1,4 @@
/* eslint-disable @typescript-eslint/no-explicit-any -- API handlers expect a full Astro APIContext; tests provide only the fields under test and spread `{} as any` for the rest. Typing the remainder would obscure the test intent. */
import { describe, it, expect, vi, beforeEach } from "vitest";
function mockRequest(url: string, origin: string, method = "GET"): Request {
@@ -272,4 +273,4 @@ describe("Translate API", () => {
const response = await GET!({ request, locals: { user: null }, url: new URL(request.url), ...({} as any) });
expect(response.status).toBe(200);
});
});
});