import { render, screen } from "@testing-library/react";
import FilterSection from "../../../../lib/ReactViews/Workbench/Controls/FilterSection";
import Terria from "../../../../lib/Models/Terria";
import CommonStrata from "../../../../lib/Models/Definition/CommonStrata";
import CreateModel from "../../../../lib/Models/Definition/CreateModel";
import { FilterTraits } from "../../../../lib/Traits/TraitsClasses/Cesium3dTilesTraits";
import objectArrayTrait from "../../../../lib/Traits/Decorators/objectArrayTrait";
import ModelTraits from "../../../../lib/Traits/ModelTraits";
import { runInAction } from "mobx";
class TestTraits extends ModelTraits {
@objectArrayTrait({
type: FilterTraits,
idProperty: "name",
name: "filters",
description: "The filters to apply to this catalog item."
})
filters?: FilterTraits[];
}
class TestModel extends CreateModel(TestTraits) {}
describe("FilterSectionSpec", function () {
let terria: Terria;
let item: TestModel;
beforeAll(() => {
terria = new Terria({
baseUrl: "./"
});
item = new TestModel("test", terria);
});
it("Renders nothing if no filters", function () {
const { container } = render();
expect(container).toBeEmptyDOMElement();
});
it("Renders a range input for each filter", function () {
runInAction(() => {
const filter = item.addObject(
CommonStrata.user,
"filters",
"level-filter"
);
filter?.setTrait(CommonStrata.user, "property", "level");
filter?.setTrait(CommonStrata.user, "minimumValue", 0);
filter?.setTrait(CommonStrata.user, "maximumValue", 42);
filter?.setTrait(CommonStrata.user, "minimumShown", 10);
filter?.setTrait(CommonStrata.user, "maximumShown", 20);
});
render();
expect(screen.getByText("Show level-filter: 10 to 20")).toBeVisible();
expect(screen.getAllByRole("slider")).toBeDefined();
expect(screen.getAllByRole("slider").length).toBe(2);
});
});