import { act, assertEquals, cleanup, fireEvent, render } from "./setup.ts";
import { EditorMode } from "../../islands/Editor.tsx";
import TopBar from "../../islands/TopBar.tsx";
const baseProps = {
allowMode: EditorMode.Read,
isLogined: false,
shared: false,
title: "Test Post",
id: "abc123",
};
Deno.test({
name: "TopBar - renders download icon for non-logged-in user",
fn() {
const { container } = render();
const downloadIcons = container.querySelectorAll(".bi-download");
assertEquals(downloadIcons.length, 1);
assertEquals(downloadIcons[0].getAttribute("title"), "Download");
cleanup();
},
sanitizeResources: false,
sanitizeOps: false,
});
Deno.test({
name: "TopBar - renders download icon for logged-in user",
fn() {
const { container } = render();
const downloadIcons = container.querySelectorAll(".bi-download");
assertEquals(downloadIcons.length, 1);
assertEquals(downloadIcons[0].getAttribute("title"), "Download");
cleanup();
},
sanitizeResources: false,
sanitizeOps: false,
});
Deno.test({
name: "TopBar - click download dispatches DownloadRequest event with title",
fn() {
const dispatched: { type: string; detail: string }[] = [];
const originalDispatchEvent = globalThis.dispatchEvent;
// deno-lint-ignore no-explicit-any
(globalThis as any).dispatchEvent = (e: Event) => {
dispatched.push({
type: e.type,
detail: (e as CustomEvent).detail,
});
};
const { container } = render();
const icon = container.querySelector(".bi-download")!;
act(() => {
fireEvent.click(icon);
});
assertEquals(dispatched.length, 1);
assertEquals(dispatched[0].type, "DownloadRequest");
assertEquals(dispatched[0].detail, "Test Post");
// deno-lint-ignore no-explicit-any
(globalThis as any).dispatchEvent = originalDispatchEvent;
cleanup();
},
sanitizeResources: false,
sanitizeOps: false,
});
Deno.test({
name: "TopBar - click download dispatches empty string for empty title",
fn() {
const dispatched: { type: string; detail: string }[] = [];
const originalDispatchEvent = globalThis.dispatchEvent;
// deno-lint-ignore no-explicit-any
(globalThis as any).dispatchEvent = (e: Event) => {
dispatched.push({
type: e.type,
detail: (e as CustomEvent).detail,
});
};
const { container } = render();
const icon = container.querySelector(".bi-download")!;
act(() => {
fireEvent.click(icon);
});
assertEquals(dispatched.length, 1);
assertEquals(dispatched[0].type, "DownloadRequest");
assertEquals(dispatched[0].detail, "");
// deno-lint-ignore no-explicit-any
(globalThis as any).dispatchEvent = originalDispatchEvent;
cleanup();
},
sanitizeResources: false,
sanitizeOps: false,
});