Spaces:
Build error
Build error
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; | |
import posthog from "posthog-js"; | |
import { | |
trackError, | |
showErrorToast, | |
showChatError, | |
} from "#/utils/error-handler"; | |
import * as Actions from "#/services/actions"; | |
import * as CustomToast from "#/utils/custom-toast-handlers"; | |
vi.mock("posthog-js", () => ({ | |
default: { | |
captureException: vi.fn(), | |
}, | |
})); | |
vi.mock("#/services/actions", () => ({ | |
handleStatusMessage: vi.fn(), | |
})); | |
describe("Error Handler", () => { | |
beforeEach(() => { | |
vi.clearAllMocks(); | |
}); | |
afterEach(() => { | |
vi.clearAllMocks(); | |
}); | |
describe("trackError", () => { | |
it("should send error to PostHog with basic info", () => { | |
const error = { | |
message: "Test error", | |
source: "test", | |
}; | |
trackError(error); | |
expect(posthog.captureException).toHaveBeenCalledWith( | |
new Error("Test error"), | |
{ | |
error_source: "test", | |
}, | |
); | |
}); | |
it("should include additional metadata in PostHog event", () => { | |
const error = { | |
message: "Test error", | |
source: "test", | |
metadata: { | |
extra: "info", | |
details: { foo: "bar" }, | |
}, | |
}; | |
trackError(error); | |
expect(posthog.captureException).toHaveBeenCalledWith( | |
new Error("Test error"), | |
{ | |
error_source: "test", | |
extra: "info", | |
details: { foo: "bar" }, | |
}, | |
); | |
}); | |
}); | |
describe("showErrorToast", () => { | |
const errorToastSpy = vi.spyOn(CustomToast, "displayErrorToast"); | |
it("should log error and show toast", () => { | |
const error = { | |
message: "Toast error", | |
source: "toast-test", | |
}; | |
showErrorToast(error); | |
// Verify PostHog logging | |
expect(posthog.captureException).toHaveBeenCalledWith( | |
new Error("Toast error"), | |
{ | |
error_source: "toast-test", | |
}, | |
); | |
// Verify toast was shown | |
expect(errorToastSpy).toHaveBeenCalled(); | |
}); | |
it("should include metadata in PostHog event when showing toast", () => { | |
const error = { | |
message: "Toast error", | |
source: "toast-test", | |
metadata: { context: "testing" }, | |
}; | |
showErrorToast(error); | |
expect(posthog.captureException).toHaveBeenCalledWith( | |
new Error("Toast error"), | |
{ | |
error_source: "toast-test", | |
context: "testing", | |
}, | |
); | |
}); | |
it("should log errors from different sources with appropriate metadata", () => { | |
// Test agent status error | |
showErrorToast({ | |
message: "Agent error", | |
source: "agent-status", | |
metadata: { id: "error.agent" }, | |
}); | |
expect(posthog.captureException).toHaveBeenCalledWith( | |
new Error("Agent error"), | |
{ | |
error_source: "agent-status", | |
id: "error.agent", | |
}, | |
); | |
showErrorToast({ | |
message: "Server error", | |
source: "server", | |
metadata: { error_code: 500, details: "Internal error" }, | |
}); | |
expect(posthog.captureException).toHaveBeenCalledWith( | |
new Error("Server error"), | |
{ | |
error_source: "server", | |
error_code: 500, | |
details: "Internal error", | |
}, | |
); | |
}); | |
it("should log feedback submission errors with conversation context", () => { | |
const error = new Error("Feedback submission failed"); | |
showErrorToast({ | |
message: error.message, | |
source: "feedback", | |
metadata: { conversationId: "123", error }, | |
}); | |
expect(posthog.captureException).toHaveBeenCalledWith( | |
new Error("Feedback submission failed"), | |
{ | |
error_source: "feedback", | |
conversationId: "123", | |
error, | |
}, | |
); | |
}); | |
}); | |
describe("showChatError", () => { | |
it("should log error and show chat error message", () => { | |
const error = { | |
message: "Chat error", | |
source: "chat-test", | |
msgId: "123", | |
}; | |
showChatError(error); | |
// Verify PostHog logging | |
expect(posthog.captureException).toHaveBeenCalledWith( | |
new Error("Chat error"), | |
{ | |
error_source: "chat-test", | |
}, | |
); | |
// Verify error message was shown in chat | |
expect(Actions.handleStatusMessage).toHaveBeenCalledWith({ | |
type: "error", | |
message: "Chat error", | |
id: "123", | |
status_update: true, | |
}); | |
}); | |
}); | |
}); | |