mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-08-10 14:24:11 +08:00
feat(account): polish reviews favorites and account UI
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import { fireEvent, render, screen } from "@testing-library/vue";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import ReviewUserProfileModal from "@/components/ReviewUserProfileModal.vue";
|
||||
import type { ReviewUserProfile } from "@/global/typedefinition";
|
||||
|
||||
const profile = (
|
||||
overrides: Partial<ReviewUserProfile> = {},
|
||||
): ReviewUserProfile => ({
|
||||
displayName: "Momen",
|
||||
...overrides,
|
||||
});
|
||||
|
||||
describe("ReviewUserProfileModal", () => {
|
||||
it("does not insert unsafe cover URLs into background image styles", () => {
|
||||
const { container } = render(ReviewUserProfileModal, {
|
||||
props: {
|
||||
show: true,
|
||||
profile: profile({ coverUrl: "javascript:alert(1)" }),
|
||||
},
|
||||
});
|
||||
|
||||
expect(container.innerHTML).not.toContain("javascript:alert(1)");
|
||||
const cover = container.querySelector("[data-testid='review-user-cover']");
|
||||
expect((cover as HTMLElement | null)?.style.backgroundImage).toBe("");
|
||||
});
|
||||
|
||||
it("emits close when Escape is pressed inside the dialog", async () => {
|
||||
const rendered = render(ReviewUserProfileModal, {
|
||||
props: {
|
||||
show: true,
|
||||
profile: profile(),
|
||||
},
|
||||
});
|
||||
|
||||
await fireEvent.keyDown(screen.getByRole("dialog", { name: "用户资料" }), {
|
||||
key: "Escape",
|
||||
});
|
||||
|
||||
expect(rendered.emitted("close")).toHaveLength(1);
|
||||
});
|
||||
|
||||
it("emits the forum profile URL when opening a username profile", async () => {
|
||||
const rendered = render(ReviewUserProfileModal, {
|
||||
props: {
|
||||
show: true,
|
||||
profile: profile({ username: "momen" }),
|
||||
},
|
||||
});
|
||||
|
||||
await fireEvent.click(screen.getByRole("button", { name: "查看论坛资料" }));
|
||||
|
||||
expect(rendered.emitted("open-forum-profile")?.[0]?.[0]).toMatch(
|
||||
/\/u\/momen$/,
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user