Files
SnapOtter/tests/unit/web/feedback-visibility.test.ts
T

93 lines
2.3 KiB
TypeScript
Raw Normal View History

2026-06-29 18:16:33 +08:00
import { describe, expect, it } from "vitest";
import { shouldShowInstallFeedbackCard } from "@/lib/feedback";
const NOW = new Date("2026-01-15T00:00:00Z").getTime();
describe("shouldShowInstallFeedbackCard", () => {
it("shows only for admins after analytics config is loaded and enabled", () => {
expect(
shouldShowInstallFeedbackCard({
settings: {},
role: "admin",
analyticsConfigLoaded: true,
analyticsEnabled: true,
now: NOW,
}),
).toBe(true);
expect(
shouldShowInstallFeedbackCard({
settings: {},
role: "user",
analyticsConfigLoaded: true,
analyticsEnabled: true,
now: NOW,
}),
).toBe(false);
expect(
shouldShowInstallFeedbackCard({
settings: {},
role: "admin",
analyticsConfigLoaded: false,
analyticsEnabled: true,
now: NOW,
}),
).toBe(false);
expect(
shouldShowInstallFeedbackCard({
settings: {},
role: "admin",
analyticsConfigLoaded: true,
analyticsEnabled: false,
now: NOW,
}),
).toBe(false);
});
it("stays hidden after submit or permanent dismiss", () => {
expect(
shouldShowInstallFeedbackCard({
settings: { "feedback.install.submittedAt": "2026-01-14T00:00:00Z" },
role: "admin",
analyticsConfigLoaded: true,
analyticsEnabled: true,
now: NOW,
}),
).toBe(false);
expect(
shouldShowInstallFeedbackCard({
settings: { "feedback.install.dismissedAt": "2026-01-14T00:00:00Z" },
role: "admin",
analyticsConfigLoaded: true,
analyticsEnabled: true,
now: NOW,
}),
).toBe(false);
});
it("honors snooze until the stored timestamp expires", () => {
expect(
shouldShowInstallFeedbackCard({
settings: { "feedback.install.snoozedUntil": "2026-01-16T00:00:00Z" },
role: "admin",
analyticsConfigLoaded: true,
analyticsEnabled: true,
now: NOW,
}),
).toBe(false);
expect(
shouldShowInstallFeedbackCard({
settings: { "feedback.install.snoozedUntil": "2026-01-14T00:00:00Z" },
role: "admin",
analyticsConfigLoaded: true,
analyticsEnabled: true,
now: NOW,
}),
).toBe(true);
});
});