From 975f9b6c2e0f6d5988c01d7dbe6e2a6214d54de6 Mon Sep 17 00:00:00 2001 From: Michal Klobukowski Date: Fri, 13 Jul 2018 09:41:13 +0200 Subject: [PATCH] Update Resource kind reference, update missing component props in tests Feature #13798 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- .../data-explorer/data-explorer.test.tsx | 11 +-- src/components/data-table/data-table.test.tsx | 49 +++++----- .../details-panel-factory.tsx | 2 +- src/components/tree/tree.test.tsx | 64 ++++++------- src/models/kinds.ts | 12 --- .../context-menu/context-menu-actions.ts | 15 +++ .../context-menu/context-menu-reducer.ts | 32 +++++++ .../details-panel/details-panel-action.ts | 4 +- src/store/navigation/navigation-action.ts | 3 +- src/store/project/project-reducer.test.ts | 3 - .../main-app-bar/main-app-bar.test.tsx | 5 + .../project-tree/project-tree.test.tsx | 96 +++++++------------ src/views/project-panel/project-panel-item.ts | 2 +- src/views/project-panel/project-panel.tsx | 2 +- src/views/workbench/workbench.tsx | 2 +- 15 files changed, 151 insertions(+), 151 deletions(-) delete mode 100644 src/models/kinds.ts create mode 100644 src/store/context-menu/context-menu-actions.ts create mode 100644 src/store/context-menu/context-menu-reducer.ts diff --git a/src/components/data-explorer/data-explorer.test.tsx b/src/components/data-explorer/data-explorer.test.tsx index c0430827..5d4877f2 100644 --- a/src/components/data-explorer/data-explorer.test.tsx +++ b/src/components/data-explorer/data-explorer.test.tsx @@ -7,12 +7,10 @@ import { configure, mount } from "enzyme"; import * as Adapter from 'enzyme-adapter-react-16'; import DataExplorer from "./data-explorer"; -import ContextMenu from "../context-menu/context-menu"; import ColumnSelector from "../column-selector/column-selector"; import DataTable from "../data-table/data-table"; import SearchInput from "../search-input/search-input"; import { TablePagination } from "@material-ui/core"; -import { MockItem } from "../data-table/data-table.test"; configure({ adapter: new Adapter() }); @@ -22,7 +20,7 @@ describe("", () => { const onSearch = jest.fn(); const dataExplorer = mount(); expect(dataExplorer.find(SearchInput).prop("value")).toEqual("search value"); @@ -37,7 +35,7 @@ describe("", () => { {...mockDataExplorerProps()} columns={columns} onColumnToggle={onColumnToggle} - items={[{ key: "1", name: "item 1" }] as MockItem[]} />); + items={[{ name: "item 1" }]} />); expect(dataExplorer.find(ColumnSelector).prop("columns")).toBe(columns); dataExplorer.find(ColumnSelector).prop("onColumnToggle")("columns"); expect(onColumnToggle).toHaveBeenCalledWith("columns"); @@ -48,7 +46,7 @@ describe("", () => { const onSortToggle = jest.fn(); const onRowClick = jest.fn(); const columns = [{ name: "Column 1", render: jest.fn(), selected: true }]; - const items = [{ key: "1", name: "item 1" }] as MockItem[]; + const items = [{ name: "item 1" }]; const dataExplorer = mount(", () => { const onChangeRowsPerPage = jest.fn(); const dataExplorer = mount( ({ onFiltersChange: jest.fn(), onSortToggle: jest.fn(), onRowClick: jest.fn(), + onRowDoubleClick: jest.fn(), onColumnToggle: jest.fn(), onChangePage: jest.fn(), onChangeRowsPerPage: jest.fn(), diff --git a/src/components/data-table/data-table.test.tsx b/src/components/data-table/data-table.test.tsx index 2ee35072..ec84acac 100644 --- a/src/components/data-table/data-table.test.tsx +++ b/src/components/data-table/data-table.test.tsx @@ -6,19 +6,15 @@ import * as React from "react"; import { mount, configure } from "enzyme"; import { TableHead, TableCell, Typography, TableBody, Button, TableSortLabel } from "@material-ui/core"; import * as Adapter from "enzyme-adapter-react-16"; -import DataTable, { DataColumns, DataItem } from "./data-table"; +import DataTable, { DataColumns } from "./data-table"; import DataTableFilters from "../data-table-filters/data-table-filters"; import { SortDirection } from "./data-column"; configure({ adapter: new Adapter() }); -export interface MockItem extends DataItem { - name: string; -} - describe("", () => { it("shows only selected columns", () => { - const columns: DataColumns = [ + const columns: DataColumns = [ { name: "Column 1", render: () => , @@ -37,16 +33,17 @@ describe("", () => { ]; const dataTable = mount(); expect(dataTable.find(TableHead).find(TableCell)).toHaveLength(2); }); it("renders column name", () => { - const columns: DataColumns = [ + const columns: DataColumns = [ { name: "Column 1", render: () => , @@ -55,16 +52,17 @@ describe("", () => { ]; const dataTable = mount(); expect(dataTable.find(TableHead).find(TableCell).text()).toBe("Column 1"); }); it("uses renderHeader instead of name prop", () => { - const columns: DataColumns = [ + const columns: DataColumns = [ { name: "Column 1", renderHeader: () => Column Header, @@ -74,16 +72,17 @@ describe("", () => { ]; const dataTable = mount(); expect(dataTable.find(TableHead).find(TableCell).text()).toBe("Column Header"); }); it("passes column key prop to corresponding cells", () => { - const columns: DataColumns = [ + const columns: DataColumns = [ { name: "Column 1", key: "column-1-key", @@ -93,9 +92,10 @@ describe("", () => { ]; const dataTable = mount(); expect(dataTable.find(TableHead).find(TableCell).key()).toBe("column-1-key"); @@ -103,23 +103,24 @@ describe("", () => { }); it("renders items", () => { - const columns: DataColumns = [ + const columns: DataColumns = [ { name: "Column 1", - render: (item) => {item.name}, + render: (item) => {item}, selected: true }, { name: "Column 2", - render: (item) => , + render: (item) => , selected: true } ]; const dataTable = mount(); expect(dataTable.find(TableBody).find(Typography).text()).toBe("item 1"); @@ -127,18 +128,19 @@ describe("", () => { }); it("passes sorting props to ", () => { - const columns: DataColumns = [{ + const columns: DataColumns = [{ name: "Column 1", sortDirection: SortDirection.Asc, selected: true, - render: (item) => {item.name} + render: (item) => {item} }]; const onSortToggle = jest.fn(); const dataTable = mount(); expect(dataTable.find(TableSortLabel).prop("active")).toBeTruthy(); @@ -147,19 +149,20 @@ describe("", () => { }); it("passes filter props to ", () => { - const columns: DataColumns = [{ + const columns: DataColumns = [{ name: "Column 1", sortDirection: SortDirection.Asc, selected: true, filters: [{ name: "Filter 1", selected: true }], - render: (item) => {item.name} + render: (item) => {item} }]; const onFiltersChange = jest.fn(); const dataTable = mount(); expect(dataTable.find(DataTableFilters).prop("filters")).toBe(columns[0].filters); diff --git a/src/components/details-panel-factory/details-panel-factory.tsx b/src/components/details-panel-factory/details-panel-factory.tsx index 4383e79d..bb7d8556 100644 --- a/src/components/details-panel-factory/details-panel-factory.tsx +++ b/src/components/details-panel-factory/details-panel-factory.tsx @@ -2,7 +2,6 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { ResourceKind } from '../../models/kinds'; import ProjectItem from './items/project-item'; import CollectionItem from './items/collection-item'; import ProcessItem from './items/process-item'; @@ -10,6 +9,7 @@ import AbstractItem from './items/abstract-item'; import EmptyItem from './items/empty-item'; import { DetailsPanelResource } from '../../views-components/details-panel/details-panel'; import { EmptyResource } from '../../models/empty'; +import { ResourceKind } from '../../models/resource'; export default class DetailsPanelFactory { static createItem(res: DetailsPanelResource): AbstractItem { diff --git a/src/components/tree/tree.test.tsx b/src/components/tree/tree.test.tsx index bb0499f8..9ac05113 100644 --- a/src/components/tree/tree.test.tsx +++ b/src/components/tree/tree.test.tsx @@ -5,51 +5,47 @@ import * as React from 'react'; import { mount } from 'enzyme'; import * as Enzyme from 'enzyme'; import * as Adapter from 'enzyme-adapter-react-16'; -import { Collapse } from '@material-ui/core'; -import CircularProgress from '@material-ui/core/CircularProgress'; import ListItem from "@material-ui/core/ListItem/ListItem"; -import Tree, {TreeItem} from './tree'; -import { Project } from '../../models/project'; +import Tree, { TreeItem } from './tree'; +import { ProjectResource } from '../../models/project'; +import { mockProjectResource } from '../../models/test-utils'; + Enzyme.configure({ adapter: new Adapter() }); describe("Tree component", () => { - it("should render ListItem", () => { - const project: TreeItem = { - data: { - name: "sample name", - createdAt: "2018-06-12", - modifiedAt: "2018-06-13", - uuid: "uuid", - ownerUuid: "ownerUuid", - href: "href", - }, + it("should render ListItem", () => { + const project: TreeItem = { + data: mockProjectResource(), id: "3", open: true, - active: true, - status: 1, + active: true, + status: 1, }; - const wrapper = mount(
} toggleItem={() => { }} items={[project]}/>) - expect(wrapper.find(ListItem)).toHaveLength(1); - }); - + const wrapper = mount(
} + toggleItemOpen={jest.fn()} + toggleItemActive={jest.fn()} + onContextMenu={jest.fn()} + items={[project]} />); + expect(wrapper.find(ListItem)).toHaveLength(1); + }); + it("should render arrow", () => { - const project: TreeItem = { - data: { - name: "sample name", - createdAt: "2018-06-12", - modifiedAt: "2018-06-13", - uuid: "uuid", - ownerUuid: "ownerUuid", - href: "href", - }, + const project: TreeItem = { + data: mockProjectResource(), id: "3", open: true, - active: true, - status: 1, + active: true, + status: 1, }; - const wrapper = mount(
} toggleItem={() => { }} items={[project]}/>) - expect(wrapper.find('i')).toHaveLength(1); - }); + const wrapper = mount(
} + toggleItemOpen={jest.fn()} + toggleItemActive={jest.fn()} + onContextMenu={jest.fn()} + items={[project]} />); + expect(wrapper.find('i')).toHaveLength(1); + }); }); diff --git a/src/models/kinds.ts b/src/models/kinds.ts deleted file mode 100644 index 15bd6220..00000000 --- a/src/models/kinds.ts +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (C) The Arvados Authors. All rights reserved. -// -// SPDX-License-Identifier: AGPL-3.0 - -export enum ResourceKind { - Collection = "arvados#collection", - ContainerRequest = "arvados#containerRequest", - Group = "arvados#group", - Process = "arvados#containerRequest", - Project = "arvados#group", - Workflow = "arvados#workflow" -} \ No newline at end of file diff --git a/src/store/context-menu/context-menu-actions.ts b/src/store/context-menu/context-menu-actions.ts new file mode 100644 index 00000000..89d65244 --- /dev/null +++ b/src/store/context-menu/context-menu-actions.ts @@ -0,0 +1,15 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +// import { default as unionize, ofType, UnionOf } from "unionize"; + +// const actions = unionize({ +// OPEN_CONTEXT_MENU: ofType<{position: {x: number, y: number}}>() +// }, { +// tag: 'type', +// value: 'payload' +// }); + +// export type ContextMenuAction = UnionOf; +// export default actions; \ No newline at end of file diff --git a/src/store/context-menu/context-menu-reducer.ts b/src/store/context-menu/context-menu-reducer.ts new file mode 100644 index 00000000..9a825a5f --- /dev/null +++ b/src/store/context-menu/context-menu-reducer.ts @@ -0,0 +1,32 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +// import actions, { DetailsPanelAction } from "./details-panel-action"; +// import { Resource, ResourceKind } from "../../models/resource"; + +// export interface ContextMenuState { +// position: { +// x: number; +// y: number; +// }, +// resource: { +// uuid: string; +// kind: ResourceKind. +// } +// } + +// const initialState = { +// item: null, +// isOpened: false +// }; + +// const reducer = (state: DetailsPanelState = initialState, action: DetailsPanelAction) => +// actions.match(action, { +// default: () => state, +// LOAD_DETAILS: () => state, +// LOAD_DETAILS_SUCCESS: ({ item }) => ({ ...state, item }), +// TOGGLE_DETAILS_PANEL: () => ({ ...state, isOpened: !state.isOpened }) +// }); + +// export default reducer; diff --git a/src/store/details-panel/details-panel-action.ts b/src/store/details-panel/details-panel-action.ts index 647e24f8..630428cf 100644 --- a/src/store/details-panel/details-panel-action.ts +++ b/src/store/details-panel/details-panel-action.ts @@ -4,11 +4,9 @@ import { unionize, ofType, UnionOf } from "unionize"; import CommonResourceService from "../../common/api/common-resource-service"; -import { ResourceKind } from "../../models/kinds"; import { Dispatch } from "redux"; -import { groupsService } from "../../services/services"; import { serverApi } from "../../common/api/server-api"; -import { Resource } from "../../models/resource"; +import { Resource, ResourceKind } from "../../models/resource"; const actions = unionize({ TOGGLE_DETAILS_PANEL: ofType<{}>(), diff --git a/src/store/navigation/navigation-action.ts b/src/store/navigation/navigation-action.ts index 89ae7279..d7630d7a 100644 --- a/src/store/navigation/navigation-action.ts +++ b/src/store/navigation/navigation-action.ts @@ -10,8 +10,7 @@ import { findTreeItem } from "../project/project-reducer"; import dataExplorerActions from "../data-explorer/data-explorer-action"; import { PROJECT_PANEL_ID } from "../../views/project-panel/project-panel"; import { RootState } from "../store"; -import { ResourceKind } from "../../models/kinds"; -import { Resource } from "../../models/resource"; +import { Resource, ResourceKind } from "../../models/resource"; export const getResourceUrl = (resource: T): string => { switch (resource.kind) { diff --git a/src/store/project/project-reducer.test.ts b/src/store/project/project-reducer.test.ts index 970af6ca..dbac4e92 100644 --- a/src/store/project/project-reducer.test.ts +++ b/src/store/project/project-reducer.test.ts @@ -5,10 +5,7 @@ import projectsReducer, { getTreePath } from "./project-reducer"; import actions from "./project-action"; import { TreeItem, TreeItemStatus } from "../../components/tree/tree"; -import { ResourceKind } from "../../models/kinds"; import { mockProjectResource } from "../../models/test-utils"; -import { ProjectResource } from "../../models/project"; -import { GroupClass } from "../../models/group"; describe('project-reducer', () => { diff --git a/src/views-components/main-app-bar/main-app-bar.test.tsx b/src/views-components/main-app-bar/main-app-bar.test.tsx index 7bdb63b3..f58b26a0 100644 --- a/src/views-components/main-app-bar/main-app-bar.test.tsx +++ b/src/views-components/main-app-bar/main-app-bar.test.tsx @@ -29,6 +29,7 @@ describe("", () => { ); @@ -43,6 +44,7 @@ describe("", () => { ); @@ -59,6 +61,7 @@ describe("", () => { searchText="search text" searchDebounce={2000} onSearch={onSearch} + onContextMenu={jest.fn()} onDetailsPanelToggle={jest.fn()} {...{ user, breadcrumbs: [], menuItems: { accountMenu: [], helpMenu: [], anonymousMenu: [] }, onBreadcrumbClick: jest.fn(), onMenuItemClick: jest.fn() }} /> @@ -77,6 +80,7 @@ describe("", () => { @@ -94,6 +98,7 @@ describe("", () => { diff --git a/src/views-components/project-tree/project-tree.test.tsx b/src/views-components/project-tree/project-tree.test.tsx index 7725da54..d53f8a9e 100644 --- a/src/views-components/project-tree/project-tree.test.tsx +++ b/src/views-components/project-tree/project-tree.test.tsx @@ -12,99 +12,67 @@ import CircularProgress from '@material-ui/core/CircularProgress'; import ProjectTree from './project-tree'; import { TreeItem } from '../../components/tree/tree'; -import { Project } from '../../models/project'; -import { ResourceKind } from "../../models/resource"; +import { ProjectResource } from '../../models/project'; +import { mockProjectResource } from '../../models/test-utils'; Enzyme.configure({ adapter: new Adapter() }); describe("ProjectTree component", () => { it("should render ListItemIcon", () => { - const project: TreeItem = { - data: { - name: "sample name", - createdAt: "2018-06-12", - modifiedAt: "2018-06-13", - uuid: "uuid", - ownerUuid: "ownerUuid", - href: "href", - kind: ResourceKind.PROJECT - }, + const project: TreeItem = { + data: mockProjectResource(), id: "3", open: true, active: true, status: 1 }; - const wrapper = mount(); + const wrapper = mount(); expect(wrapper.find(ListItemIcon)).toHaveLength(1); }); it("should render 2 ListItemIcons", () => { - const project: Array> = [ + const project: Array> = [ { - data: { - name: "sample name", - createdAt: "2018-06-12", - modifiedAt: "2018-06-13", - uuid: "uuid", - ownerUuid: "ownerUuid", - href: "href", - kind: ResourceKind.PROJECT - }, + data: mockProjectResource(), id: "3", open: false, active: true, status: 1 }, { - data: { - name: "sample name", - createdAt: "2018-06-12", - modifiedAt: "2018-06-13", - uuid: "uuid", - ownerUuid: "ownerUuid", - href: "href", - kind: ResourceKind.PROJECT - }, + data: mockProjectResource(), id: "3", open: false, active: true, status: 1 } ]; - const wrapper = mount(); + const wrapper = mount(); expect(wrapper.find(ListItemIcon)).toHaveLength(2); }); it("should render Collapse", () => { - const project: Array> = [ + const project: Array> = [ { - data: { - name: "sample name", - createdAt: "2018-06-12", - modifiedAt: "2018-06-13", - uuid: "uuid", - ownerUuid: "ownerUuid", - href: "href", - kind: ResourceKind.PROJECT - }, + data: mockProjectResource(), id: "3", open: true, active: true, status: 2, items: [ { - data: { - name: "sample name", - createdAt: "2018-06-12", - modifiedAt: "2018-06-13", - uuid: "uuid", - ownerUuid: "ownerUuid", - href: "href", - kind: ResourceKind.PROJECT - }, + data: mockProjectResource(), id: "3", open: true, active: true, @@ -113,28 +81,28 @@ describe("ProjectTree component", () => { ] } ]; - const wrapper = mount(); + const wrapper = mount(); expect(wrapper.find(Collapse)).toHaveLength(1); }); it("should render CircularProgress", () => { - const project: TreeItem = { - data: { - name: "sample name", - createdAt: "2018-06-12", - modifiedAt: "2018-06-13", - uuid: "uuid", - ownerUuid: "ownerUuid", - href: "href", - kind: ResourceKind.PROJECT - }, + const project: TreeItem = { + data: mockProjectResource(), id: "3", open: false, active: true, status: 1 }; - const wrapper = mount(); + const wrapper = mount(); expect(wrapper.find(CircularProgress)).toHaveLength(1); }); diff --git a/src/views/project-panel/project-panel-item.ts b/src/views/project-panel/project-panel-item.ts index 4135fceb..1d665a66 100644 --- a/src/views/project-panel/project-panel-item.ts +++ b/src/views/project-panel/project-panel-item.ts @@ -2,8 +2,8 @@ // // SPDX-License-Identifier: AGPL-3.0 -import { ResourceKind } from "../../models/kinds"; import { GroupContentsResource } from "../../services/groups-service/groups-service"; +import { ResourceKind } from "../../models/resource"; export interface ProjectPanelItem { uuid: string; diff --git a/src/views/project-panel/project-panel.tsx b/src/views/project-panel/project-panel.tsx index 01e39edc..b902cd2f 100644 --- a/src/views/project-panel/project-panel.tsx +++ b/src/views/project-panel/project-panel.tsx @@ -11,10 +11,10 @@ import { DispatchProp, connect } from 'react-redux'; import { DataColumns } from '../../components/data-table/data-table'; import { RouteComponentProps } from 'react-router'; import { RootState } from '../../store/store'; -import { ResourceKind } from '../../models/kinds'; import { DataTableFilterItem } from '../../components/data-table-filters/data-table-filters'; import { ContainerRequestState } from '../../models/container-request'; import { SortDirection } from '../../components/data-table/data-column'; +import { ResourceKind } from '../../models/resource'; export const PROJECT_PANEL_ID = "projectPanel"; diff --git a/src/views/workbench/workbench.tsx b/src/views/workbench/workbench.tsx index 75cc3363..6972b2f8 100644 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@ -32,9 +32,9 @@ import CreateProjectDialog from "../../views-components/create-project-dialog/cr import { authService } from '../../services/services'; import detailsPanelActions, { loadDetails } from "../../store/details-panel/details-panel-action"; -import { ResourceKind } from '../../models/kinds'; import { SidePanelIdentifiers } from '../../store/side-panel/side-panel-reducer'; import { ProjectResource } from '../../models/project'; +import { ResourceKind } from '../../models/resource'; const drawerWidth = 240; const appBarHeight = 100; -- 2.30.2