Loading panel/src/i18n/resources/en-US/servers.json +1 −1 Changes for panel/src/i18n/resources/en-US/servers.json: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -201,7 +201,7 @@ "luckperms_revert_unknown": "Can't revert: value unknown", "luckperms_remove_group": "Remove group {{group}}", "luckperms_remove_perm": "Remove permission {{node}}", "luckperms_reverting": "Reverting...", "luckperms_revert_failed": "Couldn't revert: {{reason}}", "luckperms_revert_success": "Action reverted successfully!", "luckperms_presets": "Presets", "luckperms_no_parent_groups": "No parent groups assigned", Loading panel/src/i18n/resources/zh-CN/servers.json +1 −1 Changes for panel/src/i18n/resources/zh-CN/servers.json: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -201,7 +201,7 @@ "luckperms_revert_unknown": "无法撤销:原值未知", "luckperms_remove_group": "移除权限组 {{group}}", "luckperms_remove_perm": "移除权限 {{node}}", "luckperms_reverting": "正在撤销...", "luckperms_revert_failed": "撤销失败:{{reason}}", "luckperms_revert_success": "已成功撤销该操作!", "luckperms_presets": "预设", "luckperms_no_parent_groups": "未分配任何父组", Loading panel/src/pages/ServerLuckPerms.test.tsx +18 −0 Changes for panel/src/pages/ServerLuckPerms.test.tsx: 18 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import { MemoryRouter, Route, Routes } from "react-router-dom"; import i18next from "i18next"; import { ServerLuckPerms } from "./ServerLuckPerms"; import { STATUS_POLL_FAST_MS } from "@/lib/hooks"; import { humanizeError } from "@/lib/api"; const calls = vi.hoisted(() => ({ status: vi.fn(), Loading Loading @@ -245,6 +246,23 @@ describe("ServerLuckPerms reverting a permission change", () => { expect(calls.accessPermission).toHaveBeenLastCalledWith("lobby", "unset", "Alex", "essentials.fly", undefined, undefined); }); it("says a revert failed, and why, and leaves the change unreverted", async () => { await lookUpAlex(); await userEvent.click(await screen.findByRole("button", { name: "Remove permission essentials.fly" })); await screen.findByText("- essentials.fly (FALSE) [world_nether]"); calls.accessPermission.mockRejectedValue({ status: 502, code: "rcon_unavailable", message: "console down" }); await userEvent.click(screen.getByRole("button", { name: "Revert" })); const alert = await screen.findByRole("alert"); expect(alert.textContent).toBe( i18next.t("servers:luckperms_revert_failed", { reason: humanizeError({ status: 502, code: "rcon_unavailable", message: "console down" }), }), ); expect(alert.textContent?.startsWith("Couldn't revert: ")).toBe(true); expect(screen.getByRole("button", { name: "Revert" })).toBeTruthy(); }); it("offers no revert for a removal whose value was never read", async () => { calls.accessLuckPermsInfo.mockResolvedValue({ player: "Alex", groups: [], permissions: [], output: "" }); await lookUpAlex(); Loading panel/src/pages/ServerLuckPerms.tsx +1 −1 Changes for panel/src/pages/ServerLuckPerms.tsx: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -329,7 +329,7 @@ export function ServerLuckPerms() { reloadLp(); } } catch (err) { setFormFeedback({ kind: "err", msg: `${t("luckperms_reverting")} ${humanizeError(err)}` }); setFormFeedback({ kind: "err", msg: t("luckperms_revert_failed", { reason: humanizeError(err) }) }); } finally { setSubmitting(false); } Loading Loading
panel/src/i18n/resources/en-US/servers.json +1 −1 Changes for panel/src/i18n/resources/en-US/servers.json: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -201,7 +201,7 @@ "luckperms_revert_unknown": "Can't revert: value unknown", "luckperms_remove_group": "Remove group {{group}}", "luckperms_remove_perm": "Remove permission {{node}}", "luckperms_reverting": "Reverting...", "luckperms_revert_failed": "Couldn't revert: {{reason}}", "luckperms_revert_success": "Action reverted successfully!", "luckperms_presets": "Presets", "luckperms_no_parent_groups": "No parent groups assigned", Loading
panel/src/i18n/resources/zh-CN/servers.json +1 −1 Changes for panel/src/i18n/resources/zh-CN/servers.json: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -201,7 +201,7 @@ "luckperms_revert_unknown": "无法撤销:原值未知", "luckperms_remove_group": "移除权限组 {{group}}", "luckperms_remove_perm": "移除权限 {{node}}", "luckperms_reverting": "正在撤销...", "luckperms_revert_failed": "撤销失败:{{reason}}", "luckperms_revert_success": "已成功撤销该操作!", "luckperms_presets": "预设", "luckperms_no_parent_groups": "未分配任何父组", Loading
panel/src/pages/ServerLuckPerms.test.tsx +18 −0 Changes for panel/src/pages/ServerLuckPerms.test.tsx: 18 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ import { MemoryRouter, Route, Routes } from "react-router-dom"; import i18next from "i18next"; import { ServerLuckPerms } from "./ServerLuckPerms"; import { STATUS_POLL_FAST_MS } from "@/lib/hooks"; import { humanizeError } from "@/lib/api"; const calls = vi.hoisted(() => ({ status: vi.fn(), Loading Loading @@ -245,6 +246,23 @@ describe("ServerLuckPerms reverting a permission change", () => { expect(calls.accessPermission).toHaveBeenLastCalledWith("lobby", "unset", "Alex", "essentials.fly", undefined, undefined); }); it("says a revert failed, and why, and leaves the change unreverted", async () => { await lookUpAlex(); await userEvent.click(await screen.findByRole("button", { name: "Remove permission essentials.fly" })); await screen.findByText("- essentials.fly (FALSE) [world_nether]"); calls.accessPermission.mockRejectedValue({ status: 502, code: "rcon_unavailable", message: "console down" }); await userEvent.click(screen.getByRole("button", { name: "Revert" })); const alert = await screen.findByRole("alert"); expect(alert.textContent).toBe( i18next.t("servers:luckperms_revert_failed", { reason: humanizeError({ status: 502, code: "rcon_unavailable", message: "console down" }), }), ); expect(alert.textContent?.startsWith("Couldn't revert: ")).toBe(true); expect(screen.getByRole("button", { name: "Revert" })).toBeTruthy(); }); it("offers no revert for a removal whose value was never read", async () => { calls.accessLuckPermsInfo.mockResolvedValue({ player: "Alex", groups: [], permissions: [], output: "" }); await lookUpAlex(); Loading
panel/src/pages/ServerLuckPerms.tsx +1 −1 Changes for panel/src/pages/ServerLuckPerms.tsx: 1 added line, 1 removed line. Original line number Diff line number Diff line Loading @@ -329,7 +329,7 @@ export function ServerLuckPerms() { reloadLp(); } } catch (err) { setFormFeedback({ kind: "err", msg: `${t("luckperms_reverting")} ${humanizeError(err)}` }); setFormFeedback({ kind: "err", msg: t("luckperms_revert_failed", { reason: humanizeError(err) }) }); } finally { setSubmitting(false); } Loading