From a68e2d6fedd2a1223dc1f5a4b4f7043dbaaba66c Mon Sep 17 00:00:00 2001 From: Lawrence Owen Date: Thu, 6 Jun 2024 15:57:31 +1000 Subject: [PATCH] Fix FilterSection bug, add unit test --- CHANGES.md | 1 + .../Workbench/Controls/FilterSection.jsx | 2 +- .../Workbench/Controls/FilterSectionSpec.tsx | 63 +++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 test/ReactViews/Workbench/Controls/FilterSectionSpec.tsx diff --git a/CHANGES.md b/CHANGES.md index ef6ad18484d..391f2d9eed4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,7 @@ #### next release (8.7.4) - Fix position of draggable point after moving. +- Fix bug in FilterSection #### 8.7.3 - 2024-05-28 diff --git a/lib/ReactViews/Workbench/Controls/FilterSection.jsx b/lib/ReactViews/Workbench/Controls/FilterSection.jsx index 14cabf8452c..634a2acb4b2 100644 --- a/lib/ReactViews/Workbench/Controls/FilterSection.jsx +++ b/lib/ReactViews/Workbench/Controls/FilterSection.jsx @@ -27,7 +27,7 @@ class FilterSection extends React.Component { } return (
- {item.filters.map(this.renderFilter)} + {item.filters.map(this.renderFilter, this)}
); } diff --git a/test/ReactViews/Workbench/Controls/FilterSectionSpec.tsx b/test/ReactViews/Workbench/Controls/FilterSectionSpec.tsx new file mode 100644 index 00000000000..666ceb0cf45 --- /dev/null +++ b/test/ReactViews/Workbench/Controls/FilterSectionSpec.tsx @@ -0,0 +1,63 @@ +import React from "react"; +import { act } from "react-dom/test-utils"; +import TestRenderer, { ReactTestRenderer } from "react-test-renderer"; +import FilterSection from "../../../../lib/ReactViews/Workbench/Controls/FilterSection"; +import { Range } from "rc-slider"; +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 testRenderer: ReactTestRenderer; + let terria: Terria; + let item: TestModel; + + beforeAll(() => { + terria = new Terria({ + baseUrl: "./" + }); + item = new TestModel("test", terria); + }); + + it("Renders nothing if no filters", function () { + testRenderer = TestRenderer.create(); + expect(testRenderer.root.children.length).toBe(0); + }); + + 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); + }); + + act(() => { + testRenderer = TestRenderer.create(); + const rangeInputs = testRenderer.root.findAllByType(Range); + expect(rangeInputs.length).toBe(1); + }); + }); +});