[CST-9636] Added state transformer to file model, added tests for bulk access control service

This commit is contained in:
Enea Jahollari
2023-05-10 17:12:53 +02:00
parent 628732b932
commit 7b5b795954
5 changed files with 149 additions and 30 deletions

View File

@@ -2,15 +2,16 @@ import { Injectable } from '@angular/core';
import { ScriptDataService } from '../../core/data/processes/script-data.service';
import { ProcessParameter } from '../../process-page/processes/process-parameter.model';
import { AccessControlFormState } from './access-control-form-container.component';
@Injectable({ providedIn: 'root' })
export class BulkAccessControlService {
constructor(private scriptService: ScriptDataService) {}
createPayloadFile(payload: any) {
console.log('execute', payload);
createPayloadFile(payload: { state: AccessControlFormState, bitstreamAccess, itemAccess }) {
const content = convertToBulkAccessControlFileModel(payload);
const blob = new Blob([JSON.stringify(payload, null, 2)], {
const blob = new Blob([JSON.stringify(content, null, 2)], {
type: 'application/json',
});
@@ -34,3 +35,43 @@ export class BulkAccessControlService {
return this.scriptService.invoke('bulk-access-control', params, [file]);
}
}
export const convertToBulkAccessControlFileModel = (payload: { state: AccessControlFormState, bitstreamAccess: AccessCondition[], itemAccess: AccessCondition[] }): BulkAccessControlFileModel => {
const constraints = { uuid: [] };
if (payload.state.bitstream.changesLimit === 'selected') {
// @ts-ignore
constraints.uuid = payload.state.bitstream.selectedBitstreams.map((x) => x.id);
}
return {
item: {
mode: payload.state.item.accessMode,
accessConditions: payload.itemAccess
},
bitstream: {
constraints,
mode: payload.state.bitstream.accessMode,
accessConditions: payload.bitstreamAccess
}
};
};
export interface BulkAccessControlFileModel {
item: {
mode: string;
accessConditions: AccessCondition[];
},
bitstream: {
constraints: { uuid: string[] };
mode: string;
accessConditions: AccessCondition[];
}
}
interface AccessCondition {
name: string;
startDate?: string;
endDate?: string;
}