import { screen } from "@testing-library/react";
import Terria from "../../../lib/Models/Terria";
import ViewState from "../../../lib/ReactViewModels/ViewState";
import { renderWithContexts } from "../withContext";
import Notification from "../../../lib/ReactViews/Notification/Notification";
import { observable, runInAction } from "mobx";
import { act } from "@testing-library/react";
describe("Notification", function () {
let viewState: ViewState;
beforeEach(function () {
const terria = new Terria({
baseUrl: "./"
});
viewState = new ViewState({
terria: terria,
catalogSearchProvider: undefined
});
});
it("renders the current notification", function () {
viewState.terria.notificationState.addNotificationToQueue({
title: "Hello, world",
message: "this is a test message"
});
viewState.terria.notificationState.addNotificationToQueue({
title: "Hello, blue planet",
message: "this is another test message"
});
renderWithContexts(, viewState);
const title = screen.getByText("Hello, world");
expect(title).toBeVisible();
const message = screen.getByText("this is a test message");
expect(message).toBeVisible();
});
describe("when ignore is true", function () {
it("the message should not be shown", function () {
viewState.terria.notificationState.addNotificationToQueue({
title: "Hello, world",
message: "this is a test message",
ignore: true
});
renderWithContexts(, viewState);
const title = screen.queryByText("Hello, world");
expect(title).toBeNull();
});
it("accepts an ignore fn", function () {
viewState.terria.notificationState.addNotificationToQueue({
title: "Hello, world",
message: "this is a test message",
ignore: () => true
});
renderWithContexts(, viewState);
const title = screen.queryByText("Hello, world");
expect(title).toBeNull();
});
it("auto-dismisses an active notification if ignore becomes true", function () {
const ignore = observable.box(false);
viewState.terria.notificationState.addNotificationToQueue({
title: "Hello, world",
message: "this is a test message",
ignore: () => ignore.get()
});
renderWithContexts(, viewState);
let title = screen.queryByText("Hello, world");
expect(title).toBeVisible();
act(() => {
runInAction(() => {
ignore.set(true);
});
});
title = screen.queryByText("Hello, world");
expect(title).toBeNull("Message must be ignored when mobx value changes");
});
});
});