дзеркало
https://github.com/l0ng-ai/openidea.git
синхронізовано 2026-11-09 11:15:40 +02:00
fix(plugins): report Problems to plugins in remote projects (#2223)
Цей коміт міститься в:
1 джерело
fd8b4ff14c
коміт
3dac5b8bdc
8 files changed
+199
-7
No files matched your search
@@ -1,6 +1,11 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import type { Diagnostic, FileProblems } from "@/bindings";
|
||||
|
||||
const state = vi.hoisted(() => ({
|
||||
projectChanged: () => {},
|
||||
remoteChanged: () => {},
|
||||
report: vi.fn(),
|
||||
}));
|
||||
const reports = vi.hoisted(() => [] as [boolean, FileProblems[]][]);
|
||||
vi.mock("@/platform/ipc", async (importOriginal) => ({
|
||||
...(await importOriginal<typeof import("@/platform/ipc")>()),
|
||||
@@ -8,12 +13,29 @@ vi.mock("@/platform/ipc", async (importOriginal) => ({
|
||||
commands: {
|
||||
mcpReportProblems: async (reset: boolean, files: FileProblems[]) => {
|
||||
reports.push([reset, files]);
|
||||
await state.report();
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
vi.mock("@/platform/project", () => ({
|
||||
useProject: { getState: () => ({ project: { root: "/p" } }), subscribe: () => () => {} },
|
||||
useProject: {
|
||||
getState: () => ({ project: { root: "/p" } }),
|
||||
subscribe: (fn: (s: unknown, prev: unknown) => void) => {
|
||||
state.projectChanged = () => fn({ project: { root: "/p" } }, { project: null });
|
||||
return () => {};
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
vi.mock("@/platform/remote", () => ({
|
||||
isRemoteWindow: () => true,
|
||||
useRemote: {
|
||||
subscribe: (fn: (s: unknown, prev: unknown) => void) => {
|
||||
state.remoteChanged = () => fn({ session: {} }, { session: {} });
|
||||
return () => {};
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
const { applyDiagnosticsEvent, clearProblems } = await import("./problemsStore");
|
||||
@@ -35,6 +57,7 @@ describe("reportProblems", () => {
|
||||
vi.useFakeTimers();
|
||||
clearProblems();
|
||||
reports.length = 0;
|
||||
state.report.mockReset();
|
||||
applyDiagnosticsEvent("/p/a.rs", "ra", [d(1), d(2)]);
|
||||
stop = reportProblems();
|
||||
});
|
||||
@@ -43,6 +66,35 @@ describe("reportProblems", () => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
it.each(["projectChanged", "remoteChanged"] as const)("resends the full snapshot after %s", async (change) => {
|
||||
await vi.advanceTimersByTimeAsync(1000);
|
||||
state[change]();
|
||||
await vi.advanceTimersByTimeAsync(1000);
|
||||
expect(summary()).toEqual([
|
||||
[true, [["/p/a.rs", 2]]],
|
||||
[true, [["/p/a.rs", 2]]],
|
||||
]);
|
||||
});
|
||||
|
||||
it("retries a failed delta with the full snapshot", async () => {
|
||||
await vi.advanceTimersByTimeAsync(1000);
|
||||
state.report.mockRejectedValueOnce(new Error("disconnected"));
|
||||
applyDiagnosticsEvent("/p/b.rs", "ra", [d(0)]);
|
||||
await vi.advanceTimersByTimeAsync(1000);
|
||||
await vi.advanceTimersByTimeAsync(1000);
|
||||
expect(summary()).toEqual([
|
||||
[true, [["/p/a.rs", 2]]],
|
||||
[false, [["/p/b.rs", 1]]],
|
||||
[
|
||||
true,
|
||||
[
|
||||
["/p/a.rs", 2],
|
||||
["/p/b.rs", 1],
|
||||
],
|
||||
],
|
||||
]);
|
||||
});
|
||||
|
||||
it("sends everything first, then only the files that changed once diagnostics settle", async () => {
|
||||
await vi.advanceTimersByTimeAsync(1000);
|
||||
applyDiagnosticsEvent("/p/b.rs", "ra", [d(0)]);
|
||||
|
||||
Reference in new issue
Заблокувати користувача