import {HttpClient, HttpHandler} from "@angular/common/http";
import {FeatureFlagsService} from "../../../../../shared/services/featureFlag/feature-flags.service";
import {VfModuleUpgradePopupService} from "../../../../../shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popuop.service";
+import {instance, mock, when} from "ts-mockito";
+import each from "jest-each";
class MockAppStore<T> {
getState() {
let _vfModuleUpgradePopupService : VfModuleUpgradePopupService;
let _iframeService : IframeService;
let _componentInfoService : ComponentInfoService;
- let _featureFlagsService : FeatureFlagsService;
+ let mockFeatureFlagsService: FeatureFlagsService = mock(FeatureFlagsService);
+ let mockFeatureFlagsServiceInstance: FeatureFlagsService = instance(mockFeatureFlagsService);
beforeAll(done => (async () => {
AaiService,
HttpClient,
HttpHandler,
- {provide: FeatureFlagsService, useClass: MockFeatureFlagsService},
+ {provide: FeatureFlagsService, useValue: mockFeatureFlagsServiceInstance},
ComponentInfoService
]
});
injector = getTestBed();
_sharedTreeService = injector.get(SharedTreeService);
- _componentInfoService = injector.get(ComponentInfoService)
- _featureFlagsService = injector.get(FeatureFlagsService);
- vfModuleModel = new VFModuleModelInfo(_dynamicInputsService, _sharedTreeService, _dialogService, _vfModulePopupService, _vfModuleUpgradePopupService, _iframeService,_featureFlagsService, MockNgRedux.getInstance(),_componentInfoService);
+ _componentInfoService = injector.get(ComponentInfoService);
+ vfModuleModel = new VFModuleModelInfo(_dynamicInputsService, _sharedTreeService, _dialogService, _vfModulePopupService, _vfModuleUpgradePopupService,
+ _iframeService, mockFeatureFlagsServiceInstance, MockNgRedux.getInstance(),_componentInfoService);
})().then(done).catch(done.fail));
expect(actualVNFInfo).toEqual(expectedVNFInfo);
});
+ each([
+ ["maxCountInstances 3, currentNodeCount 1, flag on",{maxCountInstances:3}, 1, {FLAG_2002_UNLIMITED_MAX: true}, false],
+ ["maxCountInstances 3, currentNodeCount 3, flag on",{maxCountInstances:3}, 3, {FLAG_2002_UNLIMITED_MAX: true}, true],
+ ["no maxCountInstances, currentNodeCount 0, flag off",{}, 0, {FLAG_2002_UNLIMITED_MAX: false}, false],
+ ["no maxCountInstances, currentNodeCount 1, flag off",{}, 1, {FLAG_2002_UNLIMITED_MAX: false}, true],
+ ["no maxCountInstances, currentNodeCount 1, no flags",{}, 1, null, true],
+ ["no maxCountInstances, currentNodeCount 0, flag on",{}, 0, {FLAG_2002_UNLIMITED_MAX: true}, false],
+ ["no maxCountInstances, currentNodeCount 1, flag on",{}, 1, {FLAG_2002_UNLIMITED_MAX: true}, false],
+ ["no maxCountInstances, currentNodeCount 1000, flag on",{}, 1000, {FLAG_2002_UNLIMITED_MAX: true}, false],
+ ]).test('isVFModuleReachedLimit: %s', (desc, properties, currentNodeCount, flags, expected) => {
+
+ const node = { data: {
+ name : 'vfModuleName'
+ }};
+
+ const serviceHierarchy = {
+ servicedId :{
+ vfModules : {
+ vfModuleName : {
+ properties
+ }}}};
+
+ when(mockFeatureFlagsService.getAllFlags()).thenReturn(flags);
+
+ expect(vfModuleModel.isVFModuleReachedLimit(node, serviceHierarchy, 'servicedId', currentNodeCount)).toEqual(expected);
+ });
+
function getVFModule(){
return {
"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830",
import {VfModule} from "../../../../../shared/models/vfModule";
import {NgRedux} from "@angular-redux/store";
import {ITreeNode} from "angular-tree-component/dist/defs/api";
-import {
- GenericFormPopupComponent,
- PopupType
-} from "../../../../../shared/components/genericFormPopup/generic-form-popup.component";
+import {GenericFormPopupComponent, PopupType} from "../../../../../shared/components/genericFormPopup/generic-form-popup.component";
import {DialogService} from "ng2-bootstrap-modal";
import {VfModulePopuopService} from "../../../../../shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service";
import {AppState} from "../../../../../shared/store/reducers";
import {MessageBoxService} from "../../../../../shared/components/messageBox/messageBox.service";
import {AvailableNodeIcons} from "../../../available-models-tree/available-models-tree.service";
import {IframeService} from "../../../../../shared/utils/iframe.service";
-import {
- deleteActionVfModuleInstance, deleteVFModuleField,
- removeVfModuleInstance,
- undoDeleteVfModuleInstance,
- undoUgradeVFModule, updateVFModuleField,
- updateVFModulePosition,
- upgradeVFModule
-} from "../../../../../shared/storeUtil/utils/vfModule/vfModule.actions";
+import {deleteActionVfModuleInstance, deleteVFModuleField, removeVfModuleInstance, undoDeleteVfModuleInstance, undoUgradeVFModule, updateVFModulePosition, upgradeVFModule} from "../../../../../shared/storeUtil/utils/vfModule/vfModule.actions";
import {ComponentInfoService} from "../../../component-info/component-info.service";
import {ComponentInfoType} from "../../../component-info/component-info-model";
import {ModelInformationItem} from "../../../../../shared/components/model-information/model-information.component";
import {VfModuleUpgradePopupService} from "../../../../../shared/components/genericFormPopup/genericFormServices/vfModuleUpgrade/vfModule.upgrade.popuop.service";
import {FeatureFlagsService, Features} from "../../../../../shared/services/featureFlag/feature-flags.service";
+import {Utils} from "../../../../../shared/utils/utils";
export class VFModuleModelInfo implements ILevelNodeInfo {
constructor(private _dynamicInputsService: DynamicInputsService,
}
isVFModuleReachedLimit(node: any, serviceHierarchy: any, serviceModelId: string, currentNodeCount: number): boolean {
- let maxNodes: number = 1;
+ const flags = this._featureFlagsService.getAllFlags();
let vnfModules = serviceHierarchy[serviceModelId].vfModules;
- if (vnfModules[node.data.name]) {
- maxNodes = vnfModules[node.data.name].properties.maxCountInstances || 1;
+ const maxInstances = vnfModules[node.data.name]
+ ? Utils.getMaxVfModule(vnfModules[node.data.name].properties, flags)
+ : null;
+ if (_.isNil(maxInstances)) {
+ return false;
}
- return !(maxNodes > currentNodeCount);
+
+ return !(maxInstances > currentNodeCount);
}
getMenuAction(node: ITreeNode, serviceModelId: string): { [methodName: string]: { method: Function, visible: Function, enable: Function } } {