import { render, screen, waitFor } from "@testing-library/react";
import { http, HttpResponse } from "msw";
import { ThemeProvider } from "styled-components";
import CsvCatalogItem from "../../../../lib/Models/Catalog/CatalogItems/CsvCatalogItem";
import CommonStrata from "../../../../lib/Models/Definition/CommonStrata";
import TerriaFeature from "../../../../lib/Models/Feature/Feature";
import Terria from "../../../../lib/Models/Terria";
import ViewState from "../../../../lib/ReactViewModels/ViewState";
import { ChartAttributes } from "../../../../lib/ReactViews/Custom/ChartCustomComponent";
import CsvChartCustomComponent from "../../../../lib/ReactViews/Custom/CsvChartCustomComponent";
import CustomComponent, {
ProcessNodeContext
} from "../../../../lib/ReactViews/Custom/CustomComponent";
import parseCustomHtmlToReact from "../../../../lib/ReactViews/Custom/parseCustomHtmlToReact";
import { terriaTheme } from "../../../../lib/ReactViews/StandardUserInterface";
import { worker } from "../../../mocks/browser";
import regionMapping from "../../../../wwwroot/data/regionMapping.json";
import csv from "../../../../wwwroot/test/csv_nongeo/x_height.csv";
describe("FeatureInfoPanelChart", function () {
let context: ProcessNodeContext;
beforeEach(function () {
const terria = new Terria();
const catalogItem = new CsvCatalogItem("test", terria, undefined);
catalogItem.setTrait(
CommonStrata.user,
"url",
"test/csv/lat_lon_name_url_col.csv"
);
context = {
terria: new Terria(),
viewState: new ViewState({ terria, catalogSearchProvider: undefined }),
feature: new TerriaFeature({}),
catalogItem
};
CustomComponent.register(new CsvChartCustomComponent());
worker.use(
http.get("*/build/TerriaJS/data/regionMapping.json", () =>
HttpResponse.json(regionMapping)
),
http.get("*/test/csv_nongeo/x_height.csv", () => new HttpResponse(csv))
);
});
describe("yColumn prop", function () {
describe("when specified", function () {
it("renders the correct y-column", async function () {
renderChart(
``,
context
);
await waitFor(() =>
expect(screen.getByText("Plant Height x x")).toBeVisible()
);
});
it("renders nothing if the specified y-column does not exist", async function () {
renderChart(
``,
context
);
expect(screen.queryByText("chart.noData")).toBeVisible();
});
});
describe("otherwise", function () {
it("renders the first line type chart item", async function () {
renderChart(
``,
context
);
await waitFor(() => expect(screen.getByText("Z x x")).toBeVisible());
});
});
});
it("can show a custom X axis label", async function () {
renderChart(
``,
context
);
await waitFor(() =>
expect(screen.getAllByText("life-time")[1]).toBeVisible()
);
});
});
/**
* Render the given chart markup and return the test renderer.
*/
function renderChart(chartMarkup: string, context: ProcessNodeContext): void {
const chartElements = parseCustomHtmlToReact(chartMarkup, context, false, {
ADD_TAGS: ["chart"],
ADD_ATTR: ChartAttributes
});
render({chartElements});
}