feat(FN-2482): add severity filtering for dashboard logs

- Add severity filter controls to the dashboard log viewer and apply filtering to rendered entries
- Extend dashboard-tui log streaming command to support severity filtering in output
- Update and stabilize dashboard and settings modal tests covering filter behavior and loading readiness
- Document the severity filter usage in CLI reference and add a changeset for @runfusion/fusion
This commit is contained in:
Fusion
2026-04-24 13:29:48 -07:00
committed by gsxdsm
parent 4335c462a6
commit 76961d41d3
8 changed files with 493 additions and 213 deletions

View File

@@ -97,6 +97,58 @@ describe("DevServerLogViewer", () => {
expect(screen.getByText("No logs yet. Start the dev server to see output.")).toBeInTheDocument();
});
it("provides an accessible label for search", () => {
renderViewer({
entries: [createEntry({ id: 1, text: "line" })],
total: 1,
});
expect(screen.getByLabelText("Search logs")).toBeInTheDocument();
});
it("filters entries by selected severity", () => {
renderViewer({
entries: [
createEntry({ id: 1, text: "server ready", stream: "stdout" }),
createEntry({ id: 2, text: "[warn] slow response", stream: "stdout" }),
createEntry({ id: 3, text: "fatal exception", stream: "stdout" }),
createEntry({ id: 4, text: "stderr output", stream: "stderr" }),
],
total: 4,
});
const severitySelect = screen.getByTestId("devserver-log-severity-filter");
fireEvent.change(severitySelect, { target: { value: "warn" } });
expect(screen.getByText("[warn] slow response")).toBeInTheDocument();
expect(screen.queryByText("server ready")).not.toBeInTheDocument();
expect(screen.queryByText("fatal exception")).not.toBeInTheDocument();
fireEvent.change(severitySelect, { target: { value: "error" } });
expect(screen.getByText("fatal exception")).toBeInTheDocument();
expect(screen.getByText("stderr output")).toBeInTheDocument();
expect(screen.queryByText("[warn] slow response")).not.toBeInTheDocument();
fireEvent.change(severitySelect, { target: { value: "all" } });
expect(screen.getByText("server ready")).toBeInTheDocument();
expect(screen.getByText("[warn] slow response")).toBeInTheDocument();
expect(screen.getByText("fatal exception")).toBeInTheDocument();
expect(screen.getByText("stderr output")).toBeInTheDocument();
});
it("shows severity-specific empty message when filter has no matches", () => {
renderViewer({
entries: [createEntry({ id: 1, text: "server ready", stream: "stdout" })],
total: 1,
});
fireEvent.change(screen.getByTestId("devserver-log-severity-filter"), {
target: { value: "warn" },
});
expect(screen.getByText("No log lines match the selected severity.")).toBeInTheDocument();
});
it("strips ANSI escape codes from display", () => {
renderViewer({
entries: [createEntry({ id: 1, text: "\u001b[32mSuccess\u001b[0m done" })],