1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import React from "react";
6 import Axios from "axios";
7 import Adapter from "enzyme-adapter-react-16";
8 import { configure, mount } from "enzyme";
9 import { mockConfig } from "common/config";
10 import { ServiceRepository, createServices } from "services/services";
11 import { createBrowserHistory } from "history";
12 import { ApiActions } from "services/api/api-actions";
13 import { Provider } from "react-redux";
14 import { configureStore } from "store/store";
15 import { TreePicker } from "./tree-picker";
16 import { initUserProject, receiveTreePickerData, extractGroupContentsNodeData } from "store/tree-picker/tree-picker-actions";
17 import { authActions } from "store/auth/auth-action";
18 import { ResourceKind } from "models/resource";
19 import { updateResources } from "store/resources/resources-actions";
21 configure({ adapter: new Adapter() });
23 describe('<TreePicker />', () => {
25 let services: ServiceRepository;
26 const axiosInst = Axios.create({ headers: {} });
27 const config: any = {};
28 const actions: ApiActions = {
29 progressFn: (id: string, working: boolean) => { },
30 errorFn: (id: string, message: string) => { }
32 const TEST_PICKER_ID = 'testPickerId';
34 email: "test@test.com",
37 uuid: "zzzzz-tpzed-xurymjxw79nv3jz",
38 ownerUuid: "ownerUuid",
46 const renderItem = (item) => (
47 <li data-id={item.id}>{item.data.name}</li>
51 services = createServices(mockConfig({}), actions, axiosInst);
52 store = configureStore(createBrowserHistory(), services, config);
53 store.dispatch(authActions.USER_DETAILS_SUCCESS(fakeUser));
54 store.dispatch(initUserProject(TEST_PICKER_ID));
57 it("renders tree picker with initial home project state", () => {
58 let treePicker = mount(
59 <Provider store={store}>
61 pickerId={TEST_PICKER_ID}
63 onContextMenu={() => {}}
64 toggleItemOpen={() => {}}
65 toggleItemActive={() => {}}
66 toggleItemSelection={() => {}}
70 expect(treePicker.find(`li[data-id="${fakeUser.uuid}"]`).text()).toBe('Home Projects');
73 it("displays item loaded into treePicker store", () => {
75 uuid: "zzzzz-j7d0g-111111111111111",
77 kind: ResourceKind.PROJECT,
80 store.dispatch(receiveTreePickerData({
82 pickerId: TEST_PICKER_ID,
84 extractNodeData: extractGroupContentsNodeData(false)
87 let treePicker = mount(
88 <Provider store={store}>
90 pickerId={TEST_PICKER_ID}
92 onContextMenu={() => {}}
93 toggleItemOpen={() => {}}
94 toggleItemActive={() => {}}
95 toggleItemSelection={() => {}}
99 expect(treePicker.find(`[data-id="${fakeUser.uuid}"]`).text()).toBe('Home Projects');
100 expect(treePicker.find(`[data-id="${fakeProject.uuid}"]`).text()).toBe('FakeProject');
103 it("preserves treenode name when exists in resources", () => {
104 const treeProjectResource = {
105 uuid: "zzzzz-j7d0g-111111111111111",
107 kind: ResourceKind.PROJECT,
109 const treeProjectResource2 = {
110 uuid: "zzzzz-j7d0g-222222222222222",
112 kind: ResourceKind.PROJECT,
115 const storeProjectResource = {
116 ...treeProjectResource,
117 name: "StoreProjectName",
118 description: "Test description",
120 const storeProjectResource2 = {
121 ...treeProjectResource2,
122 name: "StoreProjectName2",
123 description: "Test description",
126 store.dispatch(updateResources([storeProjectResource, storeProjectResource2]));
127 store.dispatch(receiveTreePickerData({
129 pickerId: TEST_PICKER_ID,
130 data: [treeProjectResource, treeProjectResource2],
131 extractNodeData: extractGroupContentsNodeData(false)
134 let treePicker = mount(
135 <Provider store={store}>
137 pickerId={TEST_PICKER_ID}
139 onContextMenu={() => {}}
140 toggleItemOpen={() => {}}
141 toggleItemActive={() => {}}
142 toggleItemSelection={() => {}}
146 expect(treePicker.find(`[data-id="${fakeUser.uuid}"]`).text()).toBe('Home Projects');
147 expect(treePicker.find(`[data-id="${treeProjectResource.uuid}"]`).text()).toBe('FakeProject');
148 expect(treePicker.find(`[data-id="${treeProjectResource2.uuid}"]`).text()).toBe('');