Create tests for data table filter
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Wed, 20 Jun 2018 11:28:28 +0000 (13:28 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Wed, 20 Jun 2018 11:28:28 +0000 (13:28 +0200)
Feature #13633

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

src/components/data-table-filters/data-table-filters.test.tsx [new file with mode: 0644]

diff --git a/src/components/data-table-filters/data-table-filters.test.tsx b/src/components/data-table-filters/data-table-filters.test.tsx
new file mode 100644 (file)
index 0000000..6756252
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import * as React from "react";
+import { mount, configure } from "enzyme";
+import DataTableFilter, { DataTableFilterItem } from "./data-table-filters";
+
+import * as Adapter from 'enzyme-adapter-react-16';
+import { Checkbox, ButtonBase, ListItem, Button, ListItemText } from "@material-ui/core";
+import dataTableFilters from "./data-table-filters";
+
+configure({ adapter: new Adapter() });
+
+describe("<DataTableFilter />", () => {
+    it("renders filters according to their state", () => {
+        const filters = [{
+            name: "Filter 1",
+            selected: true
+        }, {
+            name: "Filter 2",
+            selected: false
+        }];
+        const dataTableFilter = mount(<DataTableFilter name="" filters={filters} />);
+        dataTableFilter.find(ButtonBase).simulate("click");
+        expect(dataTableFilter.find(Checkbox).at(0).prop("checked")).toBeTruthy();
+        expect(dataTableFilter.find(Checkbox).at(1).prop("checked")).toBeFalsy();
+    });
+    
+    it("updates filters after filters prop change", () => {
+        const filters = [{
+            name: "Filter 1",
+            selected: true
+        }];
+        const updatedFilters = [, {
+            name: "Filter 2",
+            selected: true
+        }];
+        const dataTableFilter = mount(<DataTableFilter name="" filters={filters} />);
+        dataTableFilter.find(ButtonBase).simulate("click");
+        expect(dataTableFilter.find(Checkbox).prop("checked")).toBeTruthy();
+        dataTableFilter.find(ListItem).simulate("click");
+        expect(dataTableFilter.find(Checkbox).prop("checked")).toBeFalsy();
+        dataTableFilter.setProps({filters: updatedFilters});
+        expect(dataTableFilter.find(Checkbox).prop("checked")).toBeTruthy();
+        expect(dataTableFilter.find(ListItemText).text()).toBe("Filter 2");
+    });
+
+    it("calls onChange with modified list of filters", () => {
+        const filters = [{
+            name: "Filter 1",
+            selected: true
+        }, {
+            name: "Filter 2",
+            selected: false
+        }];
+        const onChange = jest.fn();
+        const dataTableFilter = mount(<DataTableFilter name="" filters={filters} onChange={onChange} />);
+        dataTableFilter.find(ButtonBase).simulate("click");
+        dataTableFilter.find(ListItem).at(1).simulate("click");
+        dataTableFilter.find(Button).at(0).simulate("click");
+        expect(onChange).toHaveBeenCalledWith([{
+            name: "Filter 1",
+            selected: true
+        }, {
+            name: "Filter 2",
+            selected: true
+        }]);
+    });
+});
\ No newline at end of file