import { screen } from "@testing-library/react";
import { runInAction } from "mobx";
import Terria from "../../../../../lib/Models/Terria";
import ViewState from "../../../../../lib/ReactViewModels/ViewState";
import HelpPanel from "../../../../../lib/ReactViews/Map/Panels/HelpPanel/HelpPanel";
import { renderWithContexts } from "../../../withContext";
describe("HelpPanel", function () {
let terria: Terria;
let viewState: ViewState;
beforeEach(function () {
terria = new Terria({
baseUrl: "./"
});
viewState = new ViewState({
terria: terria,
catalogSearchProvider: undefined
});
});
describe("with no help content in config", function () {
it("renders title, description, tour item ", function () {
renderWithContexts(, viewState);
expect(screen.getByText("helpPanel.menuPaneTitle")).toBeVisible();
expect(screen.getByText("helpPanel.menuPaneBody")).toBeVisible();
// Only close button and tour button should exist (no help item buttons)
expect(
screen.getByRole("button", { name: "Close help panel" })
).toBeVisible();
expect(
screen.getByRole("button", { name: "helpPanel.takeTour" })
).toBeVisible();
});
});
describe("with no text, videos and images in helpContent", function () {
beforeEach(() => {
runInAction(() => {
terria.configParameters.helpContent = [
{
itemName: "test",
title: "test"
}
];
});
});
it("renders 1 help menu item", function () {
renderWithContexts(, viewState);
// Close button + tour button + 1 help menu item button = 3
expect(
screen.getByRole("button", { name: "Close help panel" })
).toBeVisible();
expect(
screen.getByRole("button", { name: "helpPanel.takeTour" })
).toBeVisible();
expect(screen.getByRole("button", { name: "test" })).toBeVisible();
});
it("does not render any text in video panel", function () {
const { container } = renderWithContexts(, viewState);
// HelpVideoPanel only renders when selected, which it isn't
// So no markdown content should appear from the video panel
expect(container.textContent).not.toContain("markdownContent");
});
it("does not render any images in video panel", function () {
const { container } = renderWithContexts(, viewState);
// No video link element should exist (panel not selected, no image)
expect(container.querySelector('[class*="videoLink"]')).toBeNull();
});
});
it("when help item with text, video and image in helpContent is selected", async function () {
const placeholderImage =
"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
runInAction(() => {
terria.configParameters.helpContent = [
{
itemName: "test",
markdownText:
"# Test\n\nHello, this is just a test\n\nThis is another paragraph",
videoUrl: "https://www.youtube-nocookie.com/embed/NTtSM70rIvI",
placeholderImage: placeholderImage
}
];
viewState.selectedHelpMenuItem = "test";
});
const { container } = renderWithContexts(, viewState);
// The markdown renders as 3 text blocks: h1 + 2 paragraphs
screen.getByText("Test");
screen.getByText("Hello, this is just a test");
screen.getByText("This is another paragraph");
const videoPlaceholder = container.querySelector('[class*="videoLink"]');
expect(videoPlaceholder).toBeVisible();
expect(
videoPlaceholder?.closest("[style]")?.attributes.getNamedItem("style")
?.value
).toMatch(
new RegExp(`.*background-image: .*url\\("${placeholderImage}"\\).*`)
);
});
});