22083: Store "failedToLoadOutputCollection" state
[arvados.git] / services / workbench2 / src / views-components / tree-picker / tree-picker.cy.js
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
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";
19
20 describe('<TreePicker />', () => {
21     let store;
22     let services;
23     const axiosInst = Axios.create({ headers: {} });
24     const config = {};
25     const actions = {
26         progressFn: (id, working) => { },
27         errorFn: (id, message) => { }
28     };
29     const TEST_PICKER_ID = 'testPickerId';
30     const fakeUser = {
31         email: "test@test.com",
32         firstName: "John",
33         lastName: "Doe",
34         uuid: "zzzzz-tpzed-xurymjxw79nv3jz",
35         ownerUuid: "ownerUuid",
36         username: "username",
37         prefs: {},
38         isAdmin: false,
39         isActive: true,
40         canWrite: false,
41         canManage: false,
42     };
43     const renderItem = (item) => (
44         <li data-id={item.id}>{item.data.name}</li>
45     );
46
47     beforeEach(() => {
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));
52     });
53
54     it("renders tree picker with initial home project state", () => {
55         cy.mount(
56             <Provider store={store}>
57               <ThemeProvider theme={CustomTheme}>
58                 <TreePicker
59                     pickerId={TEST_PICKER_ID}
60                     render={renderItem}
61                     onContextMenu={() => {}}
62                     toggleItemOpen={() => {}}
63                     toggleItemActive={() => {}}
64                     toggleItemSelection={() => {}}
65                 />
66                 </ThemeProvider>
67             </Provider>);
68
69         cy.get(`li[data-id="${fakeUser.uuid}"]`).should('have.text', 'Home Projects');
70     });
71
72     it("displays item loaded into treePicker store", () => {
73         const fakeProject = {
74             uuid: "zzzzz-j7d0g-111111111111111",
75             name: "FakeProject",
76             kind: ResourceKind.PROJECT,
77         };
78
79         store.dispatch(receiveTreePickerData({
80             id: fakeUser.uuid,
81             pickerId: TEST_PICKER_ID,
82             data: [fakeProject],
83             extractNodeData: extractGroupContentsNodeData(false)
84         }));
85
86         cy.mount(
87             <Provider store={store}>
88               <ThemeProvider theme={CustomTheme}>
89                 <TreePicker
90                     pickerId={TEST_PICKER_ID}
91                     render={renderItem}
92                     onContextMenu={() => {}}
93                     toggleItemOpen={() => {}}
94                     toggleItemActive={() => {}}
95                     toggleItemSelection={() => {}}
96                 />
97                 </ThemeProvider>
98             </Provider>);
99
100         cy.get(`li[data-id="${fakeUser.uuid}"]`).should('have.text', 'Home Projects');
101         cy.get(`[data-id="${fakeProject.uuid}"]`).should('have.text', 'FakeProject');
102     });
103
104     it("preserves treenode name when exists in resources", () => {
105         const treeProjectResource = {
106             uuid: "zzzzz-j7d0g-111111111111111",
107             name: "FakeProject",
108             kind: ResourceKind.PROJECT,
109         };
110         const treeProjectResource2 = {
111             uuid: "zzzzz-j7d0g-222222222222222",
112             name: "",
113             kind: ResourceKind.PROJECT,
114         };
115
116         const storeProjectResource = {
117             ...treeProjectResource,
118             name: "StoreProjectName",
119             description: "Test description",
120         };
121         const storeProjectResource2 = {
122             ...treeProjectResource2,
123             name: "StoreProjectName2",
124             description: "Test description",
125         };
126
127         store.dispatch(updateResources([storeProjectResource, storeProjectResource2]));
128         store.dispatch(receiveTreePickerData({
129             id: fakeUser.uuid,
130             pickerId: TEST_PICKER_ID,
131             data: [treeProjectResource, treeProjectResource2],
132             extractNodeData: extractGroupContentsNodeData(false)
133         }));
134
135         cy.mount(
136             <Provider store={store}>
137               <ThemeProvider theme={CustomTheme}>
138                 <TreePicker
139                     pickerId={TEST_PICKER_ID}
140                     render={renderItem}
141                     onContextMenu={() => {}}
142                     toggleItemOpen={() => {}}
143                     toggleItemActive={() => {}}
144                     toggleItemSelection={() => {}}
145                 />
146                 </ThemeProvider>
147             </Provider>);
148
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', '');
152     });
153
154 });