feat(navigation): add external entry routing

This commit is contained in:
2026-07-09 14:43:28 +08:00
parent 0659e52d29
commit 9159f5346d
17 changed files with 398 additions and 152 deletions
@@ -0,0 +1,47 @@
import { describe, expect, it } from "vitest";
import { ROUTES } from "@/router/routes";
import { resolveExternalEntryTarget } from "../external_entry";
describe("external entry navigation", () => {
it("defaults to chat", () => {
expect(resolveExternalEntryTarget({})).toBe(ROUTES.chat);
});
it("resolves supported target aliases", () => {
expect(resolveExternalEntryTarget({ target: "chat" })).toBe(ROUTES.chat);
expect(resolveExternalEntryTarget({ target: "tip" })).toBe(ROUTES.tip);
expect(resolveExternalEntryTarget({ target: "coffee" })).toBe(ROUTES.tip);
expect(resolveExternalEntryTarget({ target: "private-room" })).toBe(
ROUTES.privateRoom,
);
expect(resolveExternalEntryTarget({ target: "private_room" })).toBe(
ROUTES.privateRoom,
);
});
it("prefers safe explicit redirect routes over target aliases", () => {
expect(
resolveExternalEntryTarget({
target: "chat",
redirect: ROUTES.tip,
}),
).toBe(ROUTES.tip);
});
it("rejects unsupported and external redirect routes", () => {
expect(
resolveExternalEntryTarget({
redirect: "https://example.com/chat",
target: "unknown",
}),
).toBe(ROUTES.chat);
expect(resolveExternalEntryTarget({ redirect: "//example.com" })).toBe(
ROUTES.chat,
);
expect(resolveExternalEntryTarget({ redirect: "/sidebar" })).toBe(
ROUTES.chat,
);
});
});