import type { DesktopUpdateState } from "@t3tools/contracts";import { describe, expect, it, vi } from "vite-plus/test"; import { handleSidebarUpdateReleaseNotesPopoverOpenChange, openSidebarUpdateReleaseNotesPopoverOnForwardTab, shouldUseSidebarUpdateReleaseNotesPopover,} from "./SidebarUpdatePill"; const nightlyState: DesktopUpdateState = { enabled: true, status: "available", channel: "nightly", currentVersion: "0.0.35", hostArch: "arm64", appArch: "arm64", runningUnderArm64Translation: false, availableVersion: "0.0.36-nightly.3", downloadedVersion: null, releaseNotes: [{ version: "0.0.36-nightly.3", items: ["Newest change"], totalItems: 1 }], omittedReleaseCount: 0, downloadPercent: null, checkedAt: null, message: null, errorContext: null, canRetry: false,}; describe("sidebar update release notes popover", () => { it("uses the popover only for visible nightly release notes", () => { expect(shouldUseSidebarUpdateReleaseNotesPopover(true, nightlyState)).toBe(true); expect(shouldUseSidebarUpdateReleaseNotesPopover(false, nightlyState)).toBe(false); expect( shouldUseSidebarUpdateReleaseNotesPopover(true, { ...nightlyState, channel: "latest", }), ).toBe(false); expect( shouldUseSidebarUpdateReleaseNotesPopover(true, { ...nightlyState, releaseNotes: [], }), ).toBe(false); }); it("cancels trigger presses without canceling other open reasons", () => { const cancelTriggerPress = vi.fn(); const cancelHover = vi.fn(); handleSidebarUpdateReleaseNotesPopoverOpenChange(true, { reason: "trigger-press", cancel: cancelTriggerPress, }); handleSidebarUpdateReleaseNotesPopoverOpenChange(true, { reason: "trigger-hover", cancel: cancelHover, }); expect(cancelTriggerPress).toHaveBeenCalledOnce(); expect(cancelHover).not.toHaveBeenCalled(); }); it("promotes forward Tab without preventing native navigation", () => { const open = vi.fn(); const preventDefault = vi.fn(); const event = { key: "Tab", shiftKey: false, preventDefault }; openSidebarUpdateReleaseNotesPopoverOnForwardTab(event, { open }, "nightly-release-notes"); expect(open).toHaveBeenCalledWith("nightly-release-notes"); expect(preventDefault).not.toHaveBeenCalled(); }); it("does not promote backward Tab", () => { const open = vi.fn(); openSidebarUpdateReleaseNotesPopoverOnForwardTab( { key: "Tab", shiftKey: true }, { open }, "nightly-release-notes", ); expect(open).not.toHaveBeenCalled(); });});
import type { DesktopUpdateState } from "@t3tools/contracts";
import { describe, expect, it, vi } from "vite-plus/test";
import {
handleSidebarUpdateReleaseNotesPopoverOpenChange,
openSidebarUpdateReleaseNotesPopoverOnForwardTab,
shouldUseSidebarUpdateReleaseNotesPopover,
} from "./SidebarUpdatePill";
const nightlyState: DesktopUpdateState = {
enabled: true,
status: "available",
channel: "nightly",
currentVersion: "0.0.35",
hostArch: "arm64",
appArch: "arm64",
runningUnderArm64Translation: false,
availableVersion: "0.0.36-nightly.3",
downloadedVersion: null,
releaseNotes: [{ version: "0.0.36-nightly.3", items: ["Newest change"], totalItems: 1 }],
omittedReleaseCount: 0,
downloadPercent: null,
checkedAt: null,
message: null,
errorContext: null,
canRetry: false,
};
describe("sidebar update release notes popover", () => {
it("uses the popover only for visible nightly release notes", () => {
expect(shouldUseSidebarUpdateReleaseNotesPopover(true, nightlyState)).toBe(true);
expect(shouldUseSidebarUpdateReleaseNotesPopover(false, nightlyState)).toBe(false);
expect(
shouldUseSidebarUpdateReleaseNotesPopover(true, {
...nightlyState,
channel: "latest",
}),
).toBe(false);
expect(
shouldUseSidebarUpdateReleaseNotesPopover(true, {
...nightlyState,
releaseNotes: [],
}),
).toBe(false);
});
it("cancels trigger presses without canceling other open reasons", () => {
const cancelTriggerPress = vi.fn();
const cancelHover = vi.fn();
handleSidebarUpdateReleaseNotesPopoverOpenChange(true, {
reason: "trigger-press",
cancel: cancelTriggerPress,
});
handleSidebarUpdateReleaseNotesPopoverOpenChange(true, {
reason: "trigger-hover",
cancel: cancelHover,
});
expect(cancelTriggerPress).toHaveBeenCalledOnce();
expect(cancelHover).not.toHaveBeenCalled();
});
it("promotes forward Tab without preventing native navigation", () => {
const open = vi.fn();
const preventDefault = vi.fn();
const event = { key: "Tab", shiftKey: false, preventDefault };
openSidebarUpdateReleaseNotesPopoverOnForwardTab(event, { open }, "nightly-release-notes");
expect(open).toHaveBeenCalledWith("nightly-release-notes");
expect(preventDefault).not.toHaveBeenCalled();
});
it("does not promote backward Tab", () => {
const open = vi.fn();
openSidebarUpdateReleaseNotesPopoverOnForwardTab(
{ key: "Tab", shiftKey: true },
{ open },
"nightly-release-notes",
);
expect(open).not.toHaveBeenCalled();
});
});