diff --git a/keep-ui/app/(keep)/maintenance/__tests__/maintenance.test.tsx b/keep-ui/app/(keep)/maintenance/__tests__/maintenance.test.tsx new file mode 100644 index 0000000000..9dc12654d4 --- /dev/null +++ b/keep-ui/app/(keep)/maintenance/__tests__/maintenance.test.tsx @@ -0,0 +1,49 @@ +import { render, act } from "@testing-library/react"; +import { useRouter } from "next/navigation"; +import Maintenance from "../maintenance"; +import { MaintenanceRule } from "../model"; + +jest.mock("next/navigation", () => ({ + useRouter: jest.fn(), +})); +jest.mock("@/utils/hooks/useMaintenanceRules", () => ({ + useMaintenanceRules: () => ({ + data: [{ id: 1 }], + isLoading: false, + }), +})); +jest.mock("@/app/(keep)/loading", () => ({ + __esModule: true, + default: () => null, +})); +jest.mock("@/shared/ui", () => ({ + EmptyStateCard: () => null, +})); +jest.mock("../create-or-update-maintenance-rule", () => ({ + __esModule: true, + default: () => null, +})); + +const mockTable: { editCallback?: (rule: MaintenanceRule) => void } = {}; +jest.mock("../maintenance-rules-table", () => ({ + __esModule: true, + default: (props: { editCallback: (rule: MaintenanceRule) => void }) => { + mockTable.editCallback = props.editCallback; + return null; + }, +})); + +describe("Maintenance", () => { + it("encodes the CEL query when a rule is opened for editing", () => { + const replaceMock = jest.fn(); + (useRouter as jest.Mock).mockReturnValue({ replace: replaceMock }); + render(); + + const cel = 'name == "Disk" && labels.database_id == "test:123"'; + act(() => mockTable.editCallback!({ cel_query: cel } as MaintenanceRule)); + + expect(replaceMock).toHaveBeenCalledWith( + `/maintenance?cel=${encodeURIComponent(cel)}` + ); + }); +}); diff --git a/keep-ui/app/(keep)/maintenance/maintenance.tsx b/keep-ui/app/(keep)/maintenance/maintenance.tsx index 4e5a3adee0..168022a238 100644 --- a/keep-ui/app/(keep)/maintenance/maintenance.tsx +++ b/keep-ui/app/(keep)/maintenance/maintenance.tsx @@ -33,7 +33,9 @@ export default function Maintenance() { { - router.replace(`/maintenance?cel=${rule.cel_query}`); + router.replace( + `/maintenance?cel=${encodeURIComponent(rule.cel_query)}` + ); setMaintenanceToEdit(rule); }} />