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 { mockConfig } from "common/config";
8 import { createServices } from "services/services";
9 import { createBrowserHistory } from "history";
10 import { Provider } from "react-redux";
11 import { configureStore } from "store/store";
12 import { TreePicker } from "./tree-picker";
13 import { initUserProject, receiveTreePickerData, extractGroupContentsNodeData } from "store/tree-picker/tree-picker-actions";
14 import { authActions } from "store/auth/auth-action";
15 import { ResourceKind } from "models/resource";
16 import { updateResources } from "store/resources/resources-actions";
17 import { CustomTheme } from "common/custom-theme";
18 import { ThemeProvider } from "@mui/material";
20 describe('<TreePicker />', () => {
23 const axiosInst = Axios.create({ headers: {} });
26 progressFn: (id, working) => { },
27 errorFn: (id, message) => { }
29 const TEST_PICKER_ID = 'testPickerId';
31 email: "test@test.com",
34 uuid: "zzzzz-tpzed-xurymjxw79nv3jz",
35 ownerUuid: "ownerUuid",
43 const renderItem = (item) => (
44 <li data-id={item.id}>{item.data.name}</li>
48 services = createServices(mockConfig({}), actions, axiosInst);
49 store = configureStore(createBrowserHistory(), services, config);
50 store.dispatch(authActions.USER_DETAILS_SUCCESS(fakeUser));
51 store.dispatch(initUserProject(TEST_PICKER_ID));
54 it("renders tree picker with initial home project state", () => {
56 <Provider store={store}>
57 <ThemeProvider theme={CustomTheme}>
59 pickerId={TEST_PICKER_ID}
61 onContextMenu={() => {}}
62 toggleItemOpen={() => {}}
63 toggleItemActive={() => {}}
64 toggleItemSelection={() => {}}
69 cy.get(`li[data-id="${fakeUser.uuid}"]`).should('have.text', 'Home Projects');
72 it("displays item loaded into treePicker store", () => {
74 uuid: "zzzzz-j7d0g-111111111111111",
76 kind: ResourceKind.PROJECT,
79 store.dispatch(receiveTreePickerData({
81 pickerId: TEST_PICKER_ID,
83 extractNodeData: extractGroupContentsNodeData(false)
87 <Provider store={store}>
88 <ThemeProvider theme={CustomTheme}>
90 pickerId={TEST_PICKER_ID}
92 onContextMenu={() => {}}
93 toggleItemOpen={() => {}}
94 toggleItemActive={() => {}}
95 toggleItemSelection={() => {}}
100 cy.get(`li[data-id="${fakeUser.uuid}"]`).should('have.text', 'Home Projects');
101 cy.get(`[data-id="${fakeProject.uuid}"]`).should('have.text', 'FakeProject');
104 it("preserves treenode name when exists in resources", () => {
105 const treeProjectResource = {
106 uuid: "zzzzz-j7d0g-111111111111111",
108 kind: ResourceKind.PROJECT,
110 const treeProjectResource2 = {
111 uuid: "zzzzz-j7d0g-222222222222222",
113 kind: ResourceKind.PROJECT,
116 const storeProjectResource = {
117 ...treeProjectResource,
118 name: "StoreProjectName",
119 description: "Test description",
121 const storeProjectResource2 = {
122 ...treeProjectResource2,
123 name: "StoreProjectName2",
124 description: "Test description",
127 store.dispatch(updateResources([storeProjectResource, storeProjectResource2]));
128 store.dispatch(receiveTreePickerData({
130 pickerId: TEST_PICKER_ID,
131 data: [treeProjectResource, treeProjectResource2],
132 extractNodeData: extractGroupContentsNodeData(false)
136 <Provider store={store}>
137 <ThemeProvider theme={CustomTheme}>
139 pickerId={TEST_PICKER_ID}
141 onContextMenu={() => {}}
142 toggleItemOpen={() => {}}
143 toggleItemActive={() => {}}
144 toggleItemSelection={() => {}}
149 cy.get(`[data-id="${fakeUser.uuid}"]`).should('have.text', 'Home Projects');
150 cy.get(`[data-id="${treeProjectResource.uuid}"]`).should('have.text', 'FakeProject');
151 cy.get(`[data-id="${treeProjectResource2.uuid}"]`).should('have.text', '');