Merge branch '17426-plug-ins' refs #17426
[arvados-workbench2.git] / src / store / context-menu / context-menu-actions.test.ts
index 2778568e7681d1073a7f627e70bf9444b8aaee21..36976336a8f7d1409f18db7ea3a228fbbaa8920e 100644 (file)
@@ -6,6 +6,8 @@ import { ContextMenuKind } from '~/views-components/context-menu/context-menu';
 import { resourceUuidToContextMenuKind } from './context-menu-actions';
 import configureStore from 'redux-mock-store';
 import thunk from 'redux-thunk';
+import { PROJECT_PANEL_CURRENT_UUID } from '../project-panel/project-panel-action';
+import { GroupClass } from '~/models/group';
 
 describe('context-menu-actions', () => {
     describe('resourceUuidToContextMenuKind', () => {
@@ -16,70 +18,80 @@ describe('context-menu-actions', () => {
         const headCollectionUuid = 'zzzzz-4zz18-aaaaaaaaaaaaaaa';
         const oldCollectionUuid = 'zzzzz-4zz18-aaaaaaaaaaaaaab';
         const projectUuid = 'zzzzz-j7d0g-ccccccccccccccc';
+        const filterGroupUuid = 'zzzzz-j7d0g-ccccccccccccccd';
         const linkUuid = 'zzzzz-o0j2j-0123456789abcde';
         const containerRequestUuid = 'zzzzz-xvhdp-0123456789abcde';
 
         it('should return the correct menu kind', () => {
             const cases = [
-                // resourceUuid, isAdminUser, isEditable, isTrashed, expected
-                [headCollectionUuid, false, true, true, ContextMenuKind.TRASHED_COLLECTION],
-                [headCollectionUuid, false, true, false, ContextMenuKind.COLLECTION],
-                [headCollectionUuid, false, false, true, ContextMenuKind.READONLY_COLLECTION],
-                [headCollectionUuid, false, false, false, ContextMenuKind.READONLY_COLLECTION],
-                [headCollectionUuid, true, true, true, ContextMenuKind.TRASHED_COLLECTION],
-                [headCollectionUuid, true, true, false, ContextMenuKind.COLLECTION_ADMIN],
-                [headCollectionUuid, true, false, true, ContextMenuKind.TRASHED_COLLECTION],
-                [headCollectionUuid, true, false, false, ContextMenuKind.COLLECTION_ADMIN],
+                // resourceUuid, isAdminUser, isEditable, isTrashed, forceReadonly, expected
+                [headCollectionUuid, false, true, true, false, ContextMenuKind.TRASHED_COLLECTION],
+                [headCollectionUuid, false, true, false, false, ContextMenuKind.COLLECTION],
+                [headCollectionUuid, false, true, false, true, ContextMenuKind.READONLY_COLLECTION],
+                [headCollectionUuid, false, false, true, false, ContextMenuKind.READONLY_COLLECTION],
+                [headCollectionUuid, false, false, false, false, ContextMenuKind.READONLY_COLLECTION],
+                [headCollectionUuid, true, true, true, false, ContextMenuKind.TRASHED_COLLECTION],
+                [headCollectionUuid, true, true, false, false, ContextMenuKind.COLLECTION_ADMIN],
+                [headCollectionUuid, true, false, true, false, ContextMenuKind.TRASHED_COLLECTION],
+                [headCollectionUuid, true, false, false, false, ContextMenuKind.COLLECTION_ADMIN],
+                [headCollectionUuid, true, false, false, true, ContextMenuKind.READONLY_COLLECTION],
 
-                [oldCollectionUuid, false, true, true, ContextMenuKind.OLD_VERSION_COLLECTION],
-                [oldCollectionUuid, false, true, false, ContextMenuKind.OLD_VERSION_COLLECTION],
-                [oldCollectionUuid, false, false, true, ContextMenuKind.OLD_VERSION_COLLECTION],
-                [oldCollectionUuid, false, false, false, ContextMenuKind.OLD_VERSION_COLLECTION],
-                [oldCollectionUuid, true, true, true, ContextMenuKind.OLD_VERSION_COLLECTION],
-                [oldCollectionUuid, true, true, false, ContextMenuKind.OLD_VERSION_COLLECTION],
-                [oldCollectionUuid, true, false, true, ContextMenuKind.OLD_VERSION_COLLECTION],
-                [oldCollectionUuid, true, false, false, ContextMenuKind.OLD_VERSION_COLLECTION],
+                [oldCollectionUuid, false, true, true, false, ContextMenuKind.OLD_VERSION_COLLECTION],
+                [oldCollectionUuid, false, true, false, false, ContextMenuKind.OLD_VERSION_COLLECTION],
+                [oldCollectionUuid, false, false, true, false, ContextMenuKind.OLD_VERSION_COLLECTION],
+                [oldCollectionUuid, false, false, false, false, ContextMenuKind.OLD_VERSION_COLLECTION],
+                [oldCollectionUuid, true, true, true, false, ContextMenuKind.OLD_VERSION_COLLECTION],
+                [oldCollectionUuid, true, true, false, false, ContextMenuKind.OLD_VERSION_COLLECTION],
+                [oldCollectionUuid, true, false, true, false, ContextMenuKind.OLD_VERSION_COLLECTION],
+                [oldCollectionUuid, true, false, false, false, ContextMenuKind.OLD_VERSION_COLLECTION],
 
                 // FIXME: WB2 doesn't currently have context menu for trashed projects
-                // [projectUuid, false, true, true, ContextMenuKind.TRASHED_PROJECT],
-                [projectUuid, false, true, false, ContextMenuKind.PROJECT],
-                [projectUuid, false, false, true, ContextMenuKind.READONLY_PROJECT],
-                [projectUuid, false, false, false, ContextMenuKind.READONLY_PROJECT],
-                // [projectUuid, true, true, true, ContextMenuKind.TRASHED_PROJECT],
-                [projectUuid, true, true, false, ContextMenuKind.PROJECT_ADMIN],
-                // [projectUuid, true, false, true, ContextMenuKind.TRASHED_PROJECT],
-                [projectUuid, true, false, false, ContextMenuKind.PROJECT_ADMIN],
+                // [projectUuid, false, true, true, false, ContextMenuKind.TRASHED_PROJECT],
+                [projectUuid, false, true, false, false, ContextMenuKind.PROJECT],
+                [projectUuid, false, true, false, true, ContextMenuKind.READONLY_PROJECT],
+                [projectUuid, false, false, true, false, ContextMenuKind.READONLY_PROJECT],
+                [projectUuid, false, false, false, false, ContextMenuKind.READONLY_PROJECT],
+                // [projectUuid, true, true, true, false, ContextMenuKind.TRASHED_PROJECT],
+                [projectUuid, true, true, false, false, ContextMenuKind.PROJECT_ADMIN],
+                // [projectUuid, true, false, true, false, ContextMenuKind.TRASHED_PROJECT],
+                [projectUuid, true, false, false, false, ContextMenuKind.PROJECT_ADMIN],
+                [projectUuid, true, false, false, true, ContextMenuKind.READONLY_PROJECT],
 
-                [linkUuid, false, true, true, ContextMenuKind.LINK],
-                [linkUuid, false, true, false, ContextMenuKind.LINK],
-                [linkUuid, false, false, true, ContextMenuKind.LINK],
-                [linkUuid, false, false, false, ContextMenuKind.LINK],
-                [linkUuid, true, true, true, ContextMenuKind.LINK],
-                [linkUuid, true, true, false, ContextMenuKind.LINK],
-                [linkUuid, true, false, true, ContextMenuKind.LINK],
-                [linkUuid, true, false, false, ContextMenuKind.LINK],
+                [linkUuid, false, true, true, false, ContextMenuKind.LINK],
+                [linkUuid, false, true, false, false, ContextMenuKind.LINK],
+                [linkUuid, false, false, true, false, ContextMenuKind.LINK],
+                [linkUuid, false, false, false, false, ContextMenuKind.LINK],
+                [linkUuid, true, true, true, false, ContextMenuKind.LINK],
+                [linkUuid, true, true, false, false, ContextMenuKind.LINK],
+                [linkUuid, true, false, true, false, ContextMenuKind.LINK],
+                [linkUuid, true, false, false, false, ContextMenuKind.LINK],
 
-                [userUuid, false, true, true, ContextMenuKind.ROOT_PROJECT],
-                [userUuid, false, true, false, ContextMenuKind.ROOT_PROJECT],
-                [userUuid, false, false, true, ContextMenuKind.ROOT_PROJECT],
-                [userUuid, false, false, false, ContextMenuKind.ROOT_PROJECT],
-                [userUuid, true, true, true, ContextMenuKind.ROOT_PROJECT],
-                [userUuid, true, true, false, ContextMenuKind.ROOT_PROJECT],
-                [userUuid, true, false, true, ContextMenuKind.ROOT_PROJECT],
-                [userUuid, true, false, false, ContextMenuKind.ROOT_PROJECT],
+                [userUuid, false, true, true, false, ContextMenuKind.ROOT_PROJECT],
+                [userUuid, false, true, false, false, ContextMenuKind.ROOT_PROJECT],
+                [userUuid, false, false, true, false, ContextMenuKind.ROOT_PROJECT],
+                [userUuid, false, false, false, false, ContextMenuKind.ROOT_PROJECT],
+                [userUuid, true, true, true, false, ContextMenuKind.ROOT_PROJECT],
+                [userUuid, true, true, false, false, ContextMenuKind.ROOT_PROJECT],
+                [userUuid, true, false, true, false, ContextMenuKind.ROOT_PROJECT],
+                [userUuid, true, false, false, false, ContextMenuKind.ROOT_PROJECT],
 
-                [containerRequestUuid, false, true, true, ContextMenuKind.PROCESS_RESOURCE],
-                [containerRequestUuid, false, true, false, ContextMenuKind.PROCESS_RESOURCE],
-                [containerRequestUuid, false, false, true, ContextMenuKind.PROCESS_RESOURCE],
-                [containerRequestUuid, false, false, false, ContextMenuKind.PROCESS_RESOURCE],
-                [containerRequestUuid, true, true, true, ContextMenuKind.PROCESS_ADMIN],
-                [containerRequestUuid, true, true, false, ContextMenuKind.PROCESS_ADMIN],
-                [containerRequestUuid, true, false, true, ContextMenuKind.PROCESS_ADMIN],
-                [containerRequestUuid, true, false, false, ContextMenuKind.PROCESS_ADMIN],
+                [containerRequestUuid, false, true, true, false, ContextMenuKind.PROCESS_RESOURCE],
+                [containerRequestUuid, false, true, false, false, ContextMenuKind.PROCESS_RESOURCE],
+                [containerRequestUuid, false, false, true, false, ContextMenuKind.PROCESS_RESOURCE],
+                [containerRequestUuid, false, false, false, false, ContextMenuKind.PROCESS_RESOURCE],
+                [containerRequestUuid, false, false, false, true, ContextMenuKind.READONLY_PROCESS_RESOURCE],
+                [containerRequestUuid, true, true, true, false, ContextMenuKind.PROCESS_ADMIN],
+                [containerRequestUuid, true, true, false, false, ContextMenuKind.PROCESS_ADMIN],
+                [containerRequestUuid, true, false, true, false, ContextMenuKind.PROCESS_ADMIN],
+                [containerRequestUuid, true, false, false, false, ContextMenuKind.PROCESS_ADMIN],
+                [containerRequestUuid, true, false, false, true, ContextMenuKind.READONLY_PROCESS_RESOURCE],
             ]
 
-            cases.forEach(([resourceUuid, isAdminUser, isEditable, isTrashed, expected]) => {
+            cases.forEach(([resourceUuid, isAdminUser, isEditable, isTrashed, forceReadonly, expected]) => {
                 const initialState = {
+                    properties: {
+                        [PROJECT_PANEL_CURRENT_UUID]: projectUuid,
+                    },
                     resources: {
                         [headCollectionUuid]: {
                             uuid: headCollectionUuid,
@@ -91,12 +103,18 @@ describe('context-menu-actions', () => {
                             uuid: oldCollectionUuid,
                             currentVersionUuid: headCollectionUuid,
                             isTrashed: isTrashed,
-
                         },
                         [projectUuid]: {
                             uuid: projectUuid,
                             ownerUuid: isEditable ? userUuid : otherUserUuid,
                             writableBy: isEditable ? [userUuid] : [otherUserUuid],
+                            groupClass: GroupClass.PROJECT,
+                        },
+                        [filterGroupUuid]: {
+                            uuid: filterGroupUuid,
+                            ownerUuid: isEditable ? userUuid : otherUserUuid,
+                            writableBy: isEditable ? [userUuid] : [otherUserUuid],
+                            groupClass: GroupClass.FILTER,
                         },
                         [linkUuid]: {
                             uuid: linkUuid,
@@ -118,13 +136,14 @@ describe('context-menu-actions', () => {
                 };
                 const store = mockStore(initialState);
 
-                const menuKind = store.dispatch<any>(resourceUuidToContextMenuKind(resourceUuid as string))
+                let menuKind: any;
                 try {
+                    menuKind = store.dispatch<any>(resourceUuidToContextMenuKind(resourceUuid as string, forceReadonly as boolean))
                     expect(menuKind).toBe(expected);
                 } catch (err) {
-                    throw new Error(`menuKind for resource ${JSON.stringify(initialState.resources[resourceUuid as string])} expected to be ${expected} but got ${menuKind}.`);
+                    throw new Error(`menuKind for resource ${JSON.stringify(initialState.resources[resourceUuid as string])} forceReadonly: ${forceReadonly} expected to be ${expected} but got ${menuKind}.`);
                 }
             });
         });
     });
-});
\ No newline at end of file
+});