import { render, screen } from "@testing-library/react";
import CsvCatalogItem from "../../../../lib/Models/Catalog/CatalogItems/CsvCatalogItem";
import WebMapServiceCatalogItem from "../../../../lib/Models/Catalog/Ows/WebMapServiceCatalogItem";
import Terria from "../../../../lib/Models/Terria";
import Legend from "../../../../lib/ReactViews/Workbench/Controls/Legend";
describe("Legend", function () {
let terria: Terria;
beforeEach(function () {
terria = new Terria({
baseUrl: "./"
});
terria.configParameters.regionMappingDefinitionsUrl =
"./data/regionMapping.json";
});
describe(" - with image", function () {
let wmsItem: WebMapServiceCatalogItem;
beforeEach(function () {
wmsItem = new WebMapServiceCatalogItem("mywms", terria);
wmsItem.setTrait(
"definition",
"url",
"/test/WMS/single_style_legend_url.xml"
);
});
it("A legend image can be rendered", async function () {
await wmsItem.loadMapItems();
const { container } = render();
const legends = container.querySelectorAll("img");
expect(legends.length).toEqual(1);
});
it("A legend image can be hidden", async function () {
wmsItem.setTrait("definition", "hideLegendInWorkbench", true);
await wmsItem.loadMapItems();
const { container } = render();
expect(container.innerHTML).toBe("");
});
});
describe(" - from Table", function () {
let csvItem: CsvCatalogItem;
beforeEach(async function () {
csvItem = new CsvCatalogItem("mycsv", terria, undefined);
csvItem.defaultStyle.color.setTrait("definition", "numberOfBins", 2);
csvItem.setTrait(
"definition",
"csvString",
"Value,lat,lon\n1000,0,0\n2000,0,0"
);
await csvItem.loadMapItems();
});
it(" - can be generated", function () {
render();
expect(screen.getByText("1,500 to 2,000")).toBeTruthy();
});
it(" - can be formatted using toLocaleString", function () {
csvItem.defaultColumn.setTrait("definition", "format", {
style: "currency",
currency: "AUD",
minimumFractionDigits: 0
});
render();
// toLocaleString can return $1,500 when using locale en-AU and A$1,500 when using en
const match =
screen.queryByText("$1,500 to $2,000") ??
screen.queryByText("A$1,500 to A$2,000");
expect(match).toBeTruthy();
});
});
});