mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2026-09-09 18:02:54 +00:00
[ACS-9765]: adds rma related rules for create/copy/move folders
This commit is contained in:
@@ -987,7 +987,8 @@
|
||||
"!app.navigation.isTrashcan",
|
||||
"!app.navigation.isLibraries",
|
||||
"app.selection.notEmpty",
|
||||
"app.selection.canDelete"
|
||||
"app.selection.canDelete",
|
||||
"!app.selection.isRmaSystemContainer"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -1003,7 +1004,8 @@
|
||||
"visible": [
|
||||
"app.selection.notEmpty",
|
||||
"!app.navigation.isTrashcan",
|
||||
"!app.navigation.isLibraries"
|
||||
"!app.navigation.isLibraries",
|
||||
"!app.selection.isRmaSystemContainer"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -153,6 +153,7 @@ import { IsFeatureSupportedInCurrentAcsPipe } from './pipes/is-feature-supported
|
||||
'app.selection.folder': rules.hasFolderSelected,
|
||||
'app.selection.folder.canUpdate': rules.canUpdateSelectedFolder,
|
||||
'app.selection.displayedKnowledgeRetrievalButton': rules.canDisplayKnowledgeRetrievalButton,
|
||||
'app.selection.isRmaSystemContainer': rules.isRmaSystemContainer,
|
||||
|
||||
'app.navigation.folder.canCreate': rules.canCreateFolder,
|
||||
'app.navigation.isTrashcan': rules.isTrashcan,
|
||||
|
||||
@@ -23,7 +23,14 @@
|
||||
*/
|
||||
|
||||
import * as app from './app.rules';
|
||||
import { createVersionRule, getFileExtension, isPreferencesApiAvailable, isNodeInfoAvailable, isBulkActionsAvailable } from './app.rules';
|
||||
import {
|
||||
createVersionRule,
|
||||
getFileExtension,
|
||||
isPreferencesApiAvailable,
|
||||
isNodeInfoAvailable,
|
||||
isBulkActionsAvailable,
|
||||
isRmaSystemContainer
|
||||
} from './app.rules';
|
||||
import { TestRuleContext } from './test-rule-context';
|
||||
import { NodeEntry, RepositoryInfo, StatusInfo } from '@alfresco/js-api';
|
||||
import { ProfileState, RuleContext } from '@alfresco/adf-extensions';
|
||||
@@ -858,42 +865,39 @@ describe('app.evaluators', () => {
|
||||
});
|
||||
|
||||
describe('canCreateFolder', () => {
|
||||
it('should return false when content service is disabled', () => {
|
||||
context.appConfig = { get: () => false } as any;
|
||||
expect(app.canCreateFolder(context)).toBeFalse();
|
||||
});
|
||||
|
||||
it('should return false when user is outside personal files or libraries', () => {
|
||||
context.appConfig = { get: () => true } as any;
|
||||
context.navigation.url = '/favorite/test';
|
||||
expect(app.canCreateFolder(context)).toBeFalse();
|
||||
});
|
||||
|
||||
it('should return false when current folder does not exist', () => {
|
||||
context.appConfig = { get: () => true } as any;
|
||||
context.navigation.url = '/personal-files/test';
|
||||
context.navigation.currentFolder = null;
|
||||
expect(app.canCreateFolder(context)).toBeFalse();
|
||||
});
|
||||
|
||||
it('should return false when permission check fails', () => {
|
||||
context.appConfig = { get: () => true } as any;
|
||||
context.navigation.url = '/personal-files/test';
|
||||
context.navigation.currentFolder = {} as any;
|
||||
context.permissions = { check: () => false };
|
||||
expect(app.canCreateFolder(context)).toBeFalse();
|
||||
});
|
||||
|
||||
it('should return true when permission requirements are met', () => {
|
||||
context.appConfig = { get: () => true } as any;
|
||||
it('should return true when permission requirements are met and current folder is not rma restricted one', () => {
|
||||
context.navigation.url = '/personal-files/test';
|
||||
context.navigation.currentFolder = {} as any;
|
||||
context.navigation.currentFolder = { nodeType: 'rma:filePlan' } as any;
|
||||
context.permissions = { check: () => true };
|
||||
expect(app.canCreateFolder(context)).toBeTrue();
|
||||
});
|
||||
|
||||
it('should return false when permission requirements are met BUT current folder is rma restricted one', () => {
|
||||
context.navigation.url = '/personal-files/test';
|
||||
context.navigation.currentFolder = { nodeType: 'rma:hold' } as any;
|
||||
context.permissions = { check: () => true };
|
||||
expect(app.canCreateFolder(context)).toBeFalse();
|
||||
});
|
||||
|
||||
it('should verify is user has create permission on current folder', () => {
|
||||
context.appConfig = { get: () => true } as any;
|
||||
context.navigation.url = '/personal-files/test';
|
||||
context.navigation.currentFolder = { allowableOperations: ['create'] } as any;
|
||||
spyOn(context.permissions, 'check');
|
||||
@@ -1315,6 +1319,31 @@ describe('Versions compatibility', () => {
|
||||
expect(rule(makeContext('25.0.1.1-rc'))).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isRmaSystemContainer', () => {
|
||||
const prepareRuleContext = (nodeType: string | string[]): RuleContext => {
|
||||
const nodes = Array.isArray(nodeType) ? nodeType.map((type) => ({ entry: { nodeType: type } })) : [{ entry: { nodeType } }];
|
||||
return {
|
||||
selection: {
|
||||
nodes
|
||||
}
|
||||
} as RuleContext;
|
||||
};
|
||||
|
||||
it('should return false when node is not rma system container', () => {
|
||||
expect(isRmaSystemContainer(prepareRuleContext('rma:filePlan'))).toBeFalse();
|
||||
});
|
||||
|
||||
it('should return true when node is rma system container', () => {
|
||||
expect(isRmaSystemContainer(prepareRuleContext('rma:holdContainer'))).toBeTrue();
|
||||
expect(isRmaSystemContainer(prepareRuleContext('rma:transferContainer'))).toBeTrue();
|
||||
expect(isRmaSystemContainer(prepareRuleContext('rma:unfiledRecordContainer'))).toBeTrue();
|
||||
});
|
||||
|
||||
it('should return true when at least one selected node is an rma system container', () => {
|
||||
expect(isRmaSystemContainer(prepareRuleContext(['cm:folder', 'rma:transferContainer']))).toBeTrue();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function createTestContext(): TestRuleContext {
|
||||
|
||||
@@ -27,6 +27,7 @@ import { RuleContext } from '@alfresco/adf-extensions';
|
||||
import * as navigation from './navigation.rules';
|
||||
import * as repository from './repository.rules';
|
||||
import { isAdmin } from './user.rules';
|
||||
import { isRmaRestrictedCreateFolder, isRmaSystemFolder } from '@alfresco/aca-shared';
|
||||
|
||||
/* cspell:disable */
|
||||
export const supportedExtensions = {
|
||||
@@ -197,7 +198,7 @@ export function canCreateFolder(context: AcaRuleContext): boolean {
|
||||
const { currentFolder } = context.navigation;
|
||||
|
||||
if (currentFolder) {
|
||||
return context.permissions.check(currentFolder, ['create']);
|
||||
return context.permissions.check(currentFolder, ['create']) && !isRmaRestrictedCreateFolder(currentFolder);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@@ -364,7 +365,7 @@ export function canUploadVersion(context: RuleContext): boolean {
|
||||
export const canPrintFile = (context: RuleContext): boolean => {
|
||||
const nodeEntry = context.selection.file.entry;
|
||||
const mediaMimeTypes = ['video/mp4', 'video/webm', 'video/ogg', 'audio/mpeg', 'audio/mp3', 'audio/ogg', 'audio/wav'];
|
||||
return !mediaMimeTypes.includes(nodeEntry.content.mimeType);
|
||||
return !mediaMimeTypes.includes(nodeEntry.content?.mimeType);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -512,6 +513,14 @@ export function createVersionRule(minimalVersion: string): (context: RuleContext
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the folder is a Records Management site's system folder
|
||||
* JSON ref: `app.selection.isRmaSystemContainer`
|
||||
*/
|
||||
export const isRmaSystemContainer = (context: RuleContext): boolean => {
|
||||
return context.selection.nodes.some((node) => isRmaSystemFolder(node.entry));
|
||||
};
|
||||
|
||||
function isVersionCompatible(currentVersion: string, minimalVersion: string): boolean {
|
||||
if (!currentVersion || !minimalVersion) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user