diff options
18 files changed, 691 insertions, 553 deletions
diff --git a/vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt b/vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt index e26247281..b638a03e3 100644 --- a/vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt +++ b/vid-app-common/src/main/java/org/onap/vid/dal/AsyncInstantiationRepository.kt @@ -90,12 +90,16 @@ class AsyncInstantiationRepository @Autowired constructor(val dataAccessService: " and created >= '" + filterDate + "' " } - private fun filterInstantiatedServiceByServiceModelId(serviceModelUuid: UUID): String { + private fun filterByInstantiateActionStatus(): String{ return filterServicesByNotHiddenAndNotDeleted() + - " and SERVICE_MODEL_ID = '$serviceModelUuid'" + " and ACTION = 'INSTANTIATE'" } + private fun filterInstantiatedServiceByServiceModelId(serviceModelUuid: UUID): String { + return filterByInstantiateActionStatus() + + " and SERVICE_MODEL_ID = '$serviceModelUuid'" + } + private fun filterServicesByNotHiddenAndNotDeleted(): String { return " WHERE" + " hidden = false" + @@ -157,4 +161,13 @@ class AsyncInstantiationRepository @Autowired constructor(val dataAccessService: fun listInstantiatedServicesByServiceModelId(serviceModelId: UUID): List<ServiceInfo> = dataAccessService.getList(ServiceInfo::class.java, filterInstantiatedServiceByServiceModelId(serviceModelId), orderByCreatedDateAndStatus(), null) as List<ServiceInfo>; + + fun getAllTemplatesServiceModelIds(): Set<String> { + val allTemplatesInfo = + dataAccessService.getList(ServiceInfo::class.java, filterByInstantiateActionStatus(), null, null) as List<ServiceInfo> + + return allTemplatesInfo + .map { it.serviceModelId } + .toHashSet() + } } diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/controller/ServiceModelController.js b/vid-app-common/src/main/webapp/app/vid/scripts/controller/ServiceModelController.js index b29680f9d..1b6457308 100755 --- a/vid-app-common/src/main/webapp/app/vid/scripts/controller/ServiceModelController.js +++ b/vid-app-common/src/main/webapp/app/vid/scripts/controller/ServiceModelController.js @@ -1,360 +1,361 @@ -/*-
- * ============LICENSE_START=======================================================
- * VID
- * ================================================================================
- * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019 IBM.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-(function () {
- 'use strict';
-
- appDS2.controller("ServiceModelController",function ($uibModal, $scope, $http, $location, COMPONENT, VIDCONFIGURATION, FIELD, DataService, vidService,
- PropertyService, UtilityService, AsdcService, $timeout, featureFlags) {
-
- $scope.popup = {};
- var defaultViewPerPage = 10;
- // var baseEndpoint = "vid";
- var pathQuery = COMPONENT.SERVICES_DIST_STATUS_PATH + VIDCONFIGURATION.ASDC_MODEL_STATUS;
-
- if ( VIDCONFIGURATION.ASDC_MODEL_STATUS === FIELD.STATUS.ALL) {
- pathQuery = COMPONENT.SERVICES_PATH;
- }
- window.addEventListener("message", receiveMessage, false);
-
- function receiveMessage(event){
- if(event.data == 'navigateTo') {
- $location.path('/models/services').search({});
- $scope.$apply();
- $scope.rememberFilter = true;
- }
- if(event.data == 'navigateToInstantiationStatus') {
- $location.path('/instantiationStatus').search({});
- $scope.$apply();
- }
- }
-
- $scope.getServiceModels = function() {
- $scope.status = FIELD.STATUS.FETCHING_SERVICE_CATALOG_ASDC;
-
- $http.get(pathQuery)
- .then(function (response) {
- $scope.services = [];
- if (response.data && angular.isArray(response.data.services)) {
- wholeData = response.data.services;
- $scope.services = $scope.filterDataWithHigherVersion(wholeData);
- $scope.viewPerPage = defaultViewPerPage;
- $scope.totalPage=$scope.services.length/$scope.viewPerPage;
- $scope.sortBy=COMPONENT.NAME;
- $scope.scrollViewPerPage=2;
- $scope.currentPage=1;
- $scope.currentPageNum=1;
- $scope.isSpinnerVisible = false;
- $scope.isProgressVisible = false;
- var searchKey = sessionStorage.getItem("searchKey");
- if (searchKey != 'undefined' && searchKey!=null && ($scope.rememberFilter)) {
- var searchKey = JSON.parse(sessionStorage.getItem("searchKey"));
- $scope.searchString = searchKey.searchString || '';
- $scope.viewPerPage = searchKey.viewPerPage || defaultViewPerPage;
- $scope.totalPage = $scope.services.length / $scope.viewPerPage;
- $timeout(function () {
- // the table controller handles the current page once
- // data is loaded, therefore we're delying the paging
- // override
- $scope.currentPage = $scope.currentPageNum = searchKey.currentPage ? parseInt(searchKey.currentPage) : 1;
- }, 0);
- $scope.rememberFilter = false;
- }
- } else {
- $scope.status = FIELD.STATUS.FAILED_SERVICE_MODELS_ASDC;
- $scope.error = true;
- $scope.isSpinnerVisible = false;
- }
- $scope.deployButtonType = response.data.readOnly ? 'disabled' : 'primary';
- }, function (response) {
- console.log("Error: " + response);
- });
- };
-
- $scope.isShowOrchestrationType = function() {
- return featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_SHOW_ORCHESTRATION_TYPE);
- };
-
- var wholeData=[];
-
- $scope.filterDataWithHigherVersion = function(serviceData){
- var delimiter = '$$';
- var fiterDataServices = {};
- for(var i=0;i<serviceData.length;i++) {
- var index = serviceData[i].invariantUUID.trim() + delimiter + serviceData[i].name.trim();
- if(!fiterDataServices[index]) {
- var hasPreviousVersion = false;
- fiterDataServices[index] = {
- service: serviceData[i],
- hasPreviousVersion: false
- };
- }
- else {
- fiterDataServices[index].hasPreviousVersion = true;
- if(parseFloat(serviceData[i].version.trim())>parseFloat(fiterDataServices[index].service.version.trim())) {
- fiterDataServices[index].service = serviceData[i];
- }
- }
- }
- return Object.keys(fiterDataServices).map(function(key) {
- var service = fiterDataServices[key].service;
- service.hasPreviousVersion = fiterDataServices[key].hasPreviousVersion;
- return service;
- });
- };
-
- $scope.init = function() {
- var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec();
- PropertyService.setMsoMaxPollingIntervalMsec(msecs);
-
- var polls = PropertyService.retrieveMsoMaxPolls();
- PropertyService.setMsoMaxPolls(polls);
- };
-
- $scope.prevPage = function() {
- $scope.currentPage--;
- };
-
- $scope.nextPage = function() {
- $scope.currentPage++;
- };
-
- $scope.showReportWindow = function() {
-
- const modalWindow = $uibModal.open({
- templateUrl: 'app/vid/scripts/modals/report-modal/report-modal.html',
- controller: 'reportModalController',
- controllerAs: 'vm',
- resolve: {
- errorMsg: function () {
- return $scope.status;
- }
- }
- });
-
- };
-
- $scope.isShowErrorReport = function() {
- return featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_CREATE_ERROR_REPORTS);
- };
-
- $scope.createType = COMPONENT.A_LA_CARTE;
- $scope.deployService = function(service) {
- var searchKey = {
- searchString: $scope.searchString,
- viewPerPage: $scope.viewPerPage,
- currentPage: $scope.currentPage
- };
- sessionStorage.setItem("searchKey",JSON.stringify(searchKey));
-
- console.log("Instantiating SDC service " + service.uuid);
-
- $http.get(COMPONENT.SERVICES_PATH + service.uuid)
- .then(function (getServiceResponse) {
-
- var serviceModel = getServiceResponse.data;
-
- //VID-233 bug fix when models doesn't exists
- if(typeof(serviceModel)==="string"){ //not an object
- $scope.status = FIELD.STATUS.FAILED_SERVICE_MODELS_ASDC;
- $scope.error = true;
- $scope.isSpinnerVisible = false;
- $scope.isProgressVisible = true;
- return;
- } else{ //clean error message
- $scope.status = "";
- $scope.error = false;
- $scope.isSpinnerVisible = false;
- $scope.isProgressVisible = false;
- }
-
- DataService.setServiceName(serviceModel.service.name);
-
- //VOLTE services need input list generated and macro style
- DataService.setE2EService(false);
- if(serviceModel.service.category === 'E2E Service') {
- DataService.setE2EService(true);
- DataService.setHideServiceFields(false);
- VIDCONFIGURATION.MACRO_SERVICES.push(serviceModel.service.invariantUuid);
- }
-
- DataService.setModelInfo(COMPONENT.SERVICE, {
- "modelInvariantId": serviceModel.service.invariantUuid,
- "modelVersion": serviceModel.service.version,
- "serviceType" : serviceModel.service.serviceType,
- "serviceRole": serviceModel.service.serviceRole,
- "modelNameVersionId": serviceModel.service.uuid,
- "modelName": serviceModel.service.name,
- "description": serviceModel.service.description,
- "category":serviceModel.service.category
- });
-
- var shouldTakeTheAsyncInstantiationFlow = AsdcService.shouldTakeTheAsyncInstantiationFlow(serviceModel);
- DataService.setShouldIncludeInAsyncInstantiationFlow(shouldTakeTheAsyncInstantiationFlow);
-
- DataService.setALaCarte (true);
- DataService.setPnf(!angular.equals(serviceModel.pnfs, {}));
- $scope.createType = COMPONENT.A_LA_CARTE;
- var broadcastType = COMPONENT.CREATE_COMPONENT;
- if (AsdcService.isMacro(serviceModel) || DataService.getE2EService()) {
- DataService.setALaCarte(false);
- if(!shouldTakeTheAsyncInstantiationFlow){
- $scope.createType = COMPONENT.MACRO;
- var convertedAsdcModel = UtilityService.convertModel(serviceModel);
-
- DataService.setModelInfo(COMPONENT.SERVICE, {
- "modelInvariantId": serviceModel.service.invariantUuid,
- "modelVersion": serviceModel.service.version,
- "modelNameVersionId": serviceModel.service.uuid,
- "modelName": serviceModel.service.name,
- "description": serviceModel.service.description,
- "category": serviceModel.service.category,
- "serviceEcompNaming": serviceModel.service.serviceEcompNaming,
- "inputs": serviceModel.service.inputs,
- "serviceType": serviceModel.service.serviceType,
- "serviceRole": serviceModel.service.serviceRole,
- "displayInputs": convertedAsdcModel.completeDisplayInputs
- });
- }
- }
-
- $scope.$broadcast(broadcastType, {
- componentId : COMPONENT.SERVICE,
- modelNameVersionId: serviceModel.service.uuid,
- callbackFunction : function(response) {
- if (response.isSuccessful) {
- vidService.setModel(serviceModel);
-
- var subscriberId = FIELD.STATUS.NOT_FOUND;
- var serviceType = FIELD.STATUS.NOT_FOUND;
-
- var serviceInstanceId = response.instanceId;
-
- for (var i = 0; i < response.control.length; i++) {
- if (response.control[i].id == COMPONENT.SUBSCRIBER_NAME) {
- subscriberId = response.control[i].value;
- } else if (response.control[i].id == FIELD.ID.SERVICE_TYPE) {
- serviceType = response.control[i].value;
- }
- }
-
-
- $scope.refreshSubs(subscriberId,serviceType,serviceInstanceId);
-
- }
- }
- });
- }, function (response) {
- console.log("Error: " + response);
- });
- };
-
- $scope.tableData=[];
- var oldData=[];
- $scope.loadPreviousVersionData=function(invariantUUID , name, version){
- $scope.tableData =[];
- oldData=[];
- for(var i=0;i<wholeData.length;i++){
- if(wholeData[i].invariantUUID == invariantUUID && wholeData[i].name == name && version!=wholeData[i].version){
- oldData.push(wholeData[i]);
- }
- }
- $scope.tableData = oldData;
- $scope.createType = "Previous Version";
- var broadcastType = "createTableComponent";
- $scope.componentName = name;
- $scope.$broadcast(broadcastType, {
- componentId : COMPONENT.OLDVERSION,
- callbackFunction : function(response) {
- }
- });
- };
-
- $scope.refreshSubs = function(subscriberId, serviceType, serviceInstanceId) {
- $scope.status = FIELD.STATUS.FETCHING_SUBSCRIBER_LIST_AAI;
- $scope.init();
- $http.get( FIELD.ID.AAI_REFRESH_FULL_SUBSCRIBERS, {
-
- },{
- timeout: $scope.responseTimeoutMsec
- }).then(function(response){
-
- if (response.data.status < 200 || response.data.status > 202) {
- $scope.showError(FIELD.ERROR.MSO);
- return;
- }
-
- $scope.customer = response.data.customer; // get data from json
-
- $scope.customerList = [];
-
- $scope.serviceInstanceToCustomer = [];
-
- angular.forEach($scope.customer, function(subVal, subKey) {
- var cust = { "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID], "subscriberName": subVal[FIELD.ID.SUBNAME] };
- $scope.customerList.push(cust);
- if (subVal[FIELD.ID.SERVICE_SUBSCRIPTIONS] != null) {
- angular.forEach(subVal[FIELD.ID.SERVICE_SUBSCRIPTIONS][FIELD.ID.SERVICE_SUBSCRIPTION], function(serviceSubscription, key) {
- $scope.serviceInstanceId = [];
- if (serviceSubscription[FIELD.ID.SERVICETYPE] != null) {
- $scope.serviceType = serviceSubscription[FIELD.ID.SERVICETYPE];
- } else {
- $scope.serviceType = FIELD.STATUS.NO_SERVICE_SUBSCRIPTION_FOUND;
- }
- if (serviceSubscription[FIELD.ID.SERVICE_INSTANCES] != null) {
- angular.forEach(serviceSubscription[FIELD.ID.SERVICE_INSTANCES][FIELD.ID.SERVICE_INSTANCE], function(instValue, instKey) {
- var foo = { "serviceInstanceId": instValue[FIELD.ID.SERVICE_INSTANCE_ID],
- "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID],
- "subscriberName": subVal[FIELD.ID.SUBNAME] };
- $scope.serviceInstanceToCustomer.push(foo);
- });
- }
- });
- }
- });
- DataService.setServiceInstanceToCustomer($scope.serviceInstanceToCustomer);
- var serviceIdList = [];
- $http.get( FIELD.ID.AAI_GET_SERVICES, {
- },{
- timeout: $scope.responseTimeoutMsec
- }).then(function(response) {
- angular.forEach(response.data, function(value, key) {
- angular.forEach(value, function(subVal, key) {
- var newVal = { "id" : subVal[FIELD.ID.SERVICE_ID], "description" : subVal[FIELD.ID.SERVICE_DESCRIPTION] ,"isPermitted" : subVal[FIELD.ID.IS_PERMITTED] };
- serviceIdList.push(newVal);
- DataService.setServiceIdList(serviceIdList);
-
- $location.search({
- "subscriberId": subscriberId,
- "serviceType": serviceType,
- "serviceInstanceId": serviceInstanceId,
- "isPermitted": newVal.isPermitted.toString()
- });
-
- $location.path(COMPONENT.INSTANTIATE_PATH);
- });
- });
- });
- })
- ["catch"]($scope.handleServerError);
- };
- });
-})();
+/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2019 IBM. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +(function () { + 'use strict'; + + appDS2.controller("ServiceModelController",function ($uibModal, $scope, $http, $location, COMPONENT, VIDCONFIGURATION, FIELD, DataService, vidService, + PropertyService, UtilityService, AsdcService, $timeout, featureFlags) { + + $scope.popup = {}; + var defaultViewPerPage = 10; + // var baseEndpoint = "vid"; + var pathQuery = COMPONENT.SERVICES_DIST_STATUS_PATH + VIDCONFIGURATION.ASDC_MODEL_STATUS; + + if ( VIDCONFIGURATION.ASDC_MODEL_STATUS === FIELD.STATUS.ALL) { + pathQuery = COMPONENT.SERVICES_PATH; + } + window.addEventListener("message", receiveMessage, false); + + function receiveMessage(event){ + if(event.data == 'navigateTo') { + $location.path('/models/services').search({}); + $scope.$apply(); + $scope.rememberFilter = true; + } + if(event.data == 'navigateToInstantiationStatus') { + $location.path('/instantiationStatus').search({}); + $scope.$apply(); + } + } + + $scope.getServiceModels = function() { + $scope.status = FIELD.STATUS.FETCHING_SERVICE_CATALOG_ASDC; + + $http.get(pathQuery) + .then(function (response) { + $scope.services = []; + if (response.data && angular.isArray(response.data.services)) { + wholeData = response.data.services; + $scope.services = $scope.filterDataWithHigherVersion(wholeData); + $scope.viewPerPage = defaultViewPerPage; + $scope.totalPage=$scope.services.length/$scope.viewPerPage; + $scope.sortBy=COMPONENT.NAME; + $scope.scrollViewPerPage=2; + $scope.currentPage=1; + $scope.currentPageNum=1; + $scope.isSpinnerVisible = false; + $scope.isProgressVisible = false; + var searchKey = sessionStorage.getItem("searchKey"); + if (searchKey != 'undefined' && searchKey!=null && ($scope.rememberFilter)) { + var searchKey = JSON.parse(sessionStorage.getItem("searchKey")); + $scope.searchString = searchKey.searchString || ''; + $scope.viewPerPage = searchKey.viewPerPage || defaultViewPerPage; + $scope.totalPage = $scope.services.length / $scope.viewPerPage; + $timeout(function () { + // the table controller handles the current page once + // data is loaded, therefore we're delying the paging + // override + $scope.currentPage = $scope.currentPageNum = searchKey.currentPage ? parseInt(searchKey.currentPage) : 1; + }, 0); + $scope.rememberFilter = false; + } + } else { + $scope.status = FIELD.STATUS.FAILED_SERVICE_MODELS_ASDC; + $scope.error = true; + $scope.isSpinnerVisible = false; + } + $scope.deployButtonType = response.data.readOnly ? 'disabled' : 'primary'; + }, function (response) { + console.log("Error: " + response); + }); + }; + + $scope.isShowOrchestrationType = function() { + return featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_SHOW_ORCHESTRATION_TYPE); + }; + + var wholeData=[]; + + $scope.filterDataWithHigherVersion = function(serviceData){ + var delimiter = '$$'; + var fiterDataServices = {}; + for(var i=0;i<serviceData.length;i++) { + var index = serviceData[i].invariantUUID.trim() + delimiter + serviceData[i].name.trim(); + if(!fiterDataServices[index]) { + var hasPreviousVersion = false; + fiterDataServices[index] = { + service: serviceData[i], + hasPreviousVersion: false + }; + } + else { + fiterDataServices[index].hasPreviousVersion = true; + if(parseFloat(serviceData[i].version.trim())>parseFloat(fiterDataServices[index].service.version.trim())) { + fiterDataServices[index].service = serviceData[i]; + } + } + } + return Object.keys(fiterDataServices).map(function(key) { + var service = fiterDataServices[key].service; + service.hasPreviousVersion = fiterDataServices[key].hasPreviousVersion; + return service; + }); + }; + + $scope.init = function() { + var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec(); + PropertyService.setMsoMaxPollingIntervalMsec(msecs); + + var polls = PropertyService.retrieveMsoMaxPolls(); + PropertyService.setMsoMaxPolls(polls); + }; + + $scope.prevPage = function() { + $scope.currentPage--; + }; + + $scope.nextPage = function() { + $scope.currentPage++; + }; + + $scope.showReportWindow = function() { + + const modalWindow = $uibModal.open({ + templateUrl: 'app/vid/scripts/modals/report-modal/report-modal.html', + controller: 'reportModalController', + controllerAs: 'vm', + resolve: { + errorMsg: function () { + return $scope.status; + } + } + }); + + }; + + $scope.isShowErrorReport = function() { + return featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_CREATE_ERROR_REPORTS); + }; + + $scope.createType = COMPONENT.A_LA_CARTE; + $scope.deployService = function(service) { + var searchKey = { + searchString: $scope.searchString, + viewPerPage: $scope.viewPerPage, + currentPage: $scope.currentPage + }; + DataService.setHasTemplate(service.hasTemplate); + sessionStorage.setItem("searchKey",JSON.stringify(searchKey)); + + console.log("Instantiating SDC service " + service.uuid); + + $http.get(COMPONENT.SERVICES_PATH + service.uuid) + .then(function (getServiceResponse) { + + var serviceModel = getServiceResponse.data; + + //VID-233 bug fix when models doesn't exists + if(typeof(serviceModel)==="string"){ //not an object + $scope.status = FIELD.STATUS.FAILED_SERVICE_MODELS_ASDC; + $scope.error = true; + $scope.isSpinnerVisible = false; + $scope.isProgressVisible = true; + return; + } else{ //clean error message + $scope.status = ""; + $scope.error = false; + $scope.isSpinnerVisible = false; + $scope.isProgressVisible = false; + } + + DataService.setServiceName(serviceModel.service.name); + + //VOLTE services need input list generated and macro style + DataService.setE2EService(false); + if(serviceModel.service.category === 'E2E Service') { + DataService.setE2EService(true); + DataService.setHideServiceFields(false); + VIDCONFIGURATION.MACRO_SERVICES.push(serviceModel.service.invariantUuid); + } + + DataService.setModelInfo(COMPONENT.SERVICE, { + "modelInvariantId": serviceModel.service.invariantUuid, + "modelVersion": serviceModel.service.version, + "serviceType" : serviceModel.service.serviceType, + "serviceRole": serviceModel.service.serviceRole, + "modelNameVersionId": serviceModel.service.uuid, + "modelName": serviceModel.service.name, + "description": serviceModel.service.description, + "category":serviceModel.service.category + }); + + var shouldTakeTheAsyncInstantiationFlow = AsdcService.shouldTakeTheAsyncInstantiationFlow(serviceModel); + DataService.setShouldIncludeInAsyncInstantiationFlow(shouldTakeTheAsyncInstantiationFlow); + + DataService.setALaCarte (true); + DataService.setPnf(!angular.equals(serviceModel.pnfs, {})); + $scope.createType = COMPONENT.A_LA_CARTE; + var broadcastType = COMPONENT.CREATE_COMPONENT; + if (AsdcService.isMacro(serviceModel) || DataService.getE2EService()) { + DataService.setALaCarte(false); + if(!shouldTakeTheAsyncInstantiationFlow){ + $scope.createType = COMPONENT.MACRO; + var convertedAsdcModel = UtilityService.convertModel(serviceModel); + + DataService.setModelInfo(COMPONENT.SERVICE, { + "modelInvariantId": serviceModel.service.invariantUuid, + "modelVersion": serviceModel.service.version, + "modelNameVersionId": serviceModel.service.uuid, + "modelName": serviceModel.service.name, + "description": serviceModel.service.description, + "category": serviceModel.service.category, + "serviceEcompNaming": serviceModel.service.serviceEcompNaming, + "inputs": serviceModel.service.inputs, + "serviceType": serviceModel.service.serviceType, + "serviceRole": serviceModel.service.serviceRole, + "displayInputs": convertedAsdcModel.completeDisplayInputs + }); + } + } + + $scope.$broadcast(broadcastType, { + componentId : COMPONENT.SERVICE, + modelNameVersionId: serviceModel.service.uuid, + callbackFunction : function(response) { + if (response.isSuccessful) { + vidService.setModel(serviceModel); + + var subscriberId = FIELD.STATUS.NOT_FOUND; + var serviceType = FIELD.STATUS.NOT_FOUND; + + var serviceInstanceId = response.instanceId; + + for (var i = 0; i < response.control.length; i++) { + if (response.control[i].id == COMPONENT.SUBSCRIBER_NAME) { + subscriberId = response.control[i].value; + } else if (response.control[i].id == FIELD.ID.SERVICE_TYPE) { + serviceType = response.control[i].value; + } + } + + + $scope.refreshSubs(subscriberId,serviceType,serviceInstanceId); + + } + } + }); + }, function (response) { + console.log("Error: " + response); + }); + }; + + $scope.tableData=[]; + var oldData=[]; + $scope.loadPreviousVersionData=function(invariantUUID , name, version){ + $scope.tableData =[]; + oldData=[]; + for(var i=0;i<wholeData.length;i++){ + if(wholeData[i].invariantUUID == invariantUUID && wholeData[i].name == name && version!=wholeData[i].version){ + oldData.push(wholeData[i]); + } + } + $scope.tableData = oldData; + $scope.createType = "Previous Version"; + var broadcastType = "createTableComponent"; + $scope.componentName = name; + $scope.$broadcast(broadcastType, { + componentId : COMPONENT.OLDVERSION, + callbackFunction : function(response) { + } + }); + }; + + $scope.refreshSubs = function(subscriberId, serviceType, serviceInstanceId) { + $scope.status = FIELD.STATUS.FETCHING_SUBSCRIBER_LIST_AAI; + $scope.init(); + $http.get( FIELD.ID.AAI_REFRESH_FULL_SUBSCRIBERS, { + + },{ + timeout: $scope.responseTimeoutMsec + }).then(function(response){ + + if (response.data.status < 200 || response.data.status > 202) { + $scope.showError(FIELD.ERROR.MSO); + return; + } + + $scope.customer = response.data.customer; // get data from json + + $scope.customerList = []; + + $scope.serviceInstanceToCustomer = []; + + angular.forEach($scope.customer, function(subVal, subKey) { + var cust = { "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID], "subscriberName": subVal[FIELD.ID.SUBNAME] }; + $scope.customerList.push(cust); + if (subVal[FIELD.ID.SERVICE_SUBSCRIPTIONS] != null) { + angular.forEach(subVal[FIELD.ID.SERVICE_SUBSCRIPTIONS][FIELD.ID.SERVICE_SUBSCRIPTION], function(serviceSubscription, key) { + $scope.serviceInstanceId = []; + if (serviceSubscription[FIELD.ID.SERVICETYPE] != null) { + $scope.serviceType = serviceSubscription[FIELD.ID.SERVICETYPE]; + } else { + $scope.serviceType = FIELD.STATUS.NO_SERVICE_SUBSCRIPTION_FOUND; + } + if (serviceSubscription[FIELD.ID.SERVICE_INSTANCES] != null) { + angular.forEach(serviceSubscription[FIELD.ID.SERVICE_INSTANCES][FIELD.ID.SERVICE_INSTANCE], function(instValue, instKey) { + var foo = { "serviceInstanceId": instValue[FIELD.ID.SERVICE_INSTANCE_ID], + "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID], + "subscriberName": subVal[FIELD.ID.SUBNAME] }; + $scope.serviceInstanceToCustomer.push(foo); + }); + } + }); + } + }); + DataService.setServiceInstanceToCustomer($scope.serviceInstanceToCustomer); + var serviceIdList = []; + $http.get( FIELD.ID.AAI_GET_SERVICES, { + },{ + timeout: $scope.responseTimeoutMsec + }).then(function(response) { + angular.forEach(response.data, function(value, key) { + angular.forEach(value, function(subVal, key) { + var newVal = { "id" : subVal[FIELD.ID.SERVICE_ID], "description" : subVal[FIELD.ID.SERVICE_DESCRIPTION] ,"isPermitted" : subVal[FIELD.ID.IS_PERMITTED] }; + serviceIdList.push(newVal); + DataService.setServiceIdList(serviceIdList); + + $location.search({ + "subscriberId": subscriberId, + "serviceType": serviceType, + "serviceInstanceId": serviceInstanceId, + "isPermitted": newVal.isPermitted.toString() + }); + + $location.path(COMPONENT.INSTANTIATE_PATH); + }); + }); + }); + }) + ["catch"]($scope.handleServerError); + }; + }); +})(); diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/controller/creationDialogController.js b/vid-app-common/src/main/webapp/app/vid/scripts/controller/creationDialogController.js index a35411dd1..002bcb95a 100755 --- a/vid-app-common/src/main/webapp/app/vid/scripts/controller/creationDialogController.js +++ b/vid-app-common/src/main/webapp/app/vid/scripts/controller/creationDialogController.js @@ -93,9 +93,13 @@ var creationDialogController = function (COMPONENT, FIELD, PARAMETER, $scope, $h if (!$scope.shouldShowOldPopup()) { - $scope.url = COMPONENT.SERVICE_POPUP_IFRAME_URL + request.modelNameVersionId + "&isCreate=true&r=" + Math.random(); - window.addEventListener("message", receiveMessage, false); - + if(DataService.getHasTemplate()){ + $scope.url = COMPONENT.INSTANTIATION_TEMPLATES_IFRAME_URL + request.modelNameVersionId; + window.addEventListener("message", receiveMessage, false); + }else { + $scope.url = COMPONENT.SERVICE_POPUP_IFRAME_URL + request.modelNameVersionId + "&isCreate=true&r=" + Math.random(); + window.addEventListener("message", receiveMessage, false); + } } else { callbackFunction = request.callbackFunction; diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/services/dataService.js b/vid-app-common/src/main/webapp/app/vid/scripts/services/dataService.js index 56729f2d3..10c4277ca 100755 --- a/vid-app-common/src/main/webapp/app/vid/scripts/services/dataService.js +++ b/vid-app-common/src/main/webapp/app/vid/scripts/services/dataService.js @@ -319,6 +319,12 @@ var DataService = function($log, DataService) { }, setOwningEntityProperties: function (properties) { _this.owningEntityProperties = properties; + }, + getHasTemplate: function () { + return _this.hasTemplate; + }, + setHasTemplate: function (hasTemplate) { + _this.hasTemplate = hasTemplate; } }; }; diff --git a/vid-app-common/src/test/java/org/onap/vid/dal/AsyncInstantiationRepositoryTest.java b/vid-app-common/src/test/java/org/onap/vid/dal/AsyncInstantiationRepositoryTest.java index 27be3fb50..5f425fa3e 100644 --- a/vid-app-common/src/test/java/org/onap/vid/dal/AsyncInstantiationRepositoryTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/dal/AsyncInstantiationRepositoryTest.java @@ -32,10 +32,12 @@ import static org.hamcrest.core.IsEqual.equalTo; import static org.onap.vid.job.Job.JobStatus.COMPLETED; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import javax.inject.Inject; import org.onap.portalsdk.core.service.DataAccessService; @@ -84,6 +86,8 @@ public class AsyncInstantiationRepositoryTest extends AsyncInstantiationBaseTest MODEL_UUID, ServiceAction.INSTANTIATE); addNewServiceInfoWithAction(UUID.randomUUID(), "abc", "hidden", NOW, NOW, COMPLETED, true, false, MODEL_UUID, ServiceAction.INSTANTIATE); + addNewServiceInfoWithAction(UUID.randomUUID(), "abc", "4", NOW, NOW, COMPLETED, false, false, + MODEL_UUID_3, ServiceAction.UPDATE); } @DataProvider @@ -103,6 +107,13 @@ public class AsyncInstantiationRepositoryTest extends AsyncInstantiationBaseTest } @Test + public void getAllTemplatesServiceModelIds_givenDbWithSeveralModelIDs_2ReturnedAnd1OmittedAndDuplicatesRemoved() { + Set<String> actual = asyncInstantiationRepository.getAllTemplatesServiceModelIds(); + // MODEL_UUID3 is Action=UPDATE, therefore omitted + assertThat(actual, equalTo(ImmutableSet.of(MODEL_UUID, MODEL_UUID_2))); + } + + @Test public void whenFilterServiceByNotExistUUID_emptyListIsReturned() { List<ServiceInfo> serviceInfoListResult = asyncInstantiationRepository.listInstantiatedServicesByServiceModelId(UUID.randomUUID()); assertThat(serviceInfoListResult, is(empty())); diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java index 7c0abbe6e..b9535000a 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java @@ -79,6 +79,7 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests public static final String MODEL_UUID = "337be3fc-293e-43ec-af0b-cf932dad07e6"; public static final String MODEL_UUID_2 = "ce052844-22ba-4030-a838-822f2b39eb9b"; + public static final String MODEL_UUID_3 = "47a071cd-99f7-49bb-bc8b-f957979d6fe1"; public static final String OWNING_ENTITY_ID = "038d99af-0427-42c2-9d15-971b99b9b489"; public static final String JULIO_ERICKSON = "JULIO ERICKSON"; diff --git a/vid-automation/src/main/java/vid/automation/test/test/DrawingBoardTest.java b/vid-automation/src/main/java/vid/automation/test/test/DrawingBoardTest.java index fa7181c89..e2f3380f0 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/DrawingBoardTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/DrawingBoardTest.java @@ -1,27 +1,40 @@ package vid.automation.test.test; +import static org.testng.AssertJUnit.assertFalse; +import static vid.automation.test.Constants.DrawingBoard.AVAILABLE_MODELS_TREE; +import static vid.automation.test.Constants.DrawingBoard.BACK_BUTTON; +import static vid.automation.test.Constants.DrawingBoard.CONTEXT_MENU_BUTTON_HEADER; +import static vid.automation.test.Constants.DrawingBoard.CONTEXT_MENU_HEADER_EDIT_ITEM; +import static vid.automation.test.Constants.DrawingBoard.DEFAULT_SERVICE_NAME; +import static vid.automation.test.Constants.DrawingBoard.DRAWING_BOARD_TREE; +import static vid.automation.test.Constants.DrawingBoard.SEARCH_LEFT_TREE; +import static vid.automation.test.Constants.DrawingBoard.SERVICE_QUANTITY; +import static vid.automation.test.infra.ModelInfo.macroDrawingBoardComplexService; +import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails; + import com.google.common.collect.ImmutableList; -import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2; import org.onap.sdc.ci.tests.datatypes.UserCredentials; import org.onap.sdc.ci.tests.utilities.GeneralUIUtils; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2; import org.openqa.selenium.WebDriver; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import vid.automation.test.Constants; -import vid.automation.test.infra.*; +import vid.automation.test.infra.Click; +import vid.automation.test.infra.Exists; +import vid.automation.test.infra.Get; +import vid.automation.test.infra.Input; +import vid.automation.test.infra.ModelInfo; +import vid.automation.test.infra.SelectOption; +import vid.automation.test.infra.Wait; import vid.automation.test.model.User; import vid.automation.test.sections.BrowseASDCPage; import vid.automation.test.sections.DrawingBoardPage; import vid.automation.test.sections.VidBasePage; -import static org.testng.AssertJUnit.assertFalse; -import static vid.automation.test.Constants.DrawingBoard.*; -import static vid.automation.test.infra.ModelInfo.macroDrawingBoardComplexService; -import static vid.automation.test.infra.ModelInfo.macroSriovNoDynamicFieldsEcompNamingFalseFullModelDetails; - public class DrawingBoardTest extends VidBaseTestCase { private DrawingBoardPage drawingBoardPage = new DrawingBoardPage(); @@ -323,6 +336,7 @@ public class DrawingBoardTest extends VidBaseTestCase { Click.byTestId(CONTEXT_MENU_BUTTON_HEADER); Click.byTestId(CONTEXT_MENU_HEADER_EDIT_ITEM); Assert.assertTrue(Exists.byId("instance-popup"), "context menu should not appear"); + GeneralUIUtils.ultimateWait(); SelectOption.byIdAndVisibleText("quantity-select", String.valueOf(updatedQuantity)); Input.replaceText(updatedInstanceName,Constants.BrowseASDC.NewServicePopup.INSTANCE_NAME ); Click.byTestId(Constants.BrowseASDC.NewServicePopup.SET_BUTTON); @@ -341,6 +355,7 @@ public class DrawingBoardTest extends VidBaseTestCase { Click.byTestId(CONTEXT_MENU_BUTTON_HEADER); Click.byTestId(CONTEXT_MENU_HEADER_EDIT_ITEM); Assert.assertTrue(Exists.byId("instance-popup"), "context menu should not appear"); + GeneralUIUtils.ultimateWait(); SelectOption.byIdAndVisibleText("quantity-select", String.valueOf(updatedQuantity)); Input.replaceText(updatedInstanceName,Constants.BrowseASDC.NewServicePopup.INSTANCE_NAME ); Click.byTestId(Constants.BrowseASDC.NewServicePopup.CANCEL_BUTTON); diff --git a/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java b/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java index 8a5a2f1d3..68a3cdefe 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java @@ -378,12 +378,10 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { // Wizard pages of Network and VPN Click.byTestIdOnceItsAvailable("10a74149-c9d7-4918-bbcf-d5fb9b1799ce", 20); - Click.byTestId("setMembersBtn"); - GeneralUIUtils.ultimateWait(); + clickToCloseModal("setMembersBtn"); Click.byTestIdOnceItsAvailable("120d39fb-3627-473d-913c-d228dd0f8e5b", 20); - Click.byTestId("setMembersBtn"); - GeneralUIUtils.ultimateWait(); + clickToCloseModal("setMembersBtn"); Assert.assertEquals(Get.byTestId("node-type-indicator").getText(),"VRF"); @@ -538,7 +536,7 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { private void editVfModuleAndJustSetName(String vfModuleName, String vfModuleUUID) { hoverAndClickEditButton(vfModuleUUID + "-" + vfModuleName); Input.text("VF instance name ZERO", "instanceName"); - Click.byTestId(VNF_SET_BUTTON_TEST_ID); + clickToCloseModal(VNF_SET_BUTTON_TEST_ID); } @Test @@ -1209,7 +1207,7 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { } vidBasePage.screenshotDeployDialog("createVnf-" + serviceInstanceName); - Click.byTestId(VNF_SET_BUTTON_TEST_ID); + clickToCloseModal(VNF_SET_BUTTON_TEST_ID); if (isNetwork) { return; } @@ -1224,8 +1222,7 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { Assert.assertTrue(Get.isOptionSelectedInMultiSelect(Constants.OwningEntity.PLATFORM_MULTI_SELECT_TEST_ID, "platform")); - Click.byTestId(Constants.CANCEL_BUTTON_TEST_ID); - GeneralUIUtils.ultimateWait(); + clickToCloseModal(Constants.CANCEL_BUTTON_TEST_ID); } else { toggleItemInTree(Constants.DrawingBoard.AVAILABLE_MODELS_TREE); } @@ -1345,7 +1342,12 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { uploadSupplementaryFile("sample.json", true, browseASDCPage, setButtonTestId); browseASDCPage.screenshotDeployDialog("createVfModule-" + serviceInstanceName); - Click.byTestId(setButtonTestId); + clickToCloseModal(setButtonTestId); + } + + private void clickToCloseModal(String setOrCancelButtonTestId) { + Click.byTestId(setOrCancelButtonTestId); + GeneralUIUtils.ultimateWait(); } private void clickEditVfModule(ServiceData serviceData) { diff --git a/vid-automation/src/test/java/org/onap/vid/api/InstantiationTemplatesApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/InstantiationTemplatesApiTest.java index cf3d508e8..9d84e965d 100644 --- a/vid-automation/src/test/java/org/onap/vid/api/InstantiationTemplatesApiTest.java +++ b/vid-automation/src/test/java/org/onap/vid/api/InstantiationTemplatesApiTest.java @@ -138,13 +138,12 @@ public class InstantiationTemplatesApiTest extends AsyncInstantiationBase { String jobId = postAsyncInstanceRequest(request); - assertThat(fetchRecentTemplateInfo(request.at("/modelInfo/modelVersionId").asText()), allOf( - jsonPartEquals("jobId", jobId), + assertThat(fetchTemplateInfo(request.at("/modelInfo/modelVersionId").asText(), jobId), jsonPartEquals("requestSummary", ImmutableMap.of( "vnf", 1L, "vfModule", 2L, "volumeGroup", 1L - )))); + ))); } @Test @@ -157,8 +156,7 @@ public class InstantiationTemplatesApiTest extends AsyncInstantiationBase { String jobId = postAsyncInstanceRequest(request); - assertThat(fetchRecentTemplateInfo(request.at("/modelInfo/modelVersionId").asText()), allOf( - jsonPartEquals("jobId", jobId), + assertThat(fetchTemplateInfo(request.at("/modelInfo/modelVersionId").asText(), jobId), allOf( jsonEquals(templateInfoFromFile()).when(IGNORING_VALUES), // Assert only field types jsonEquals(templateInfoFromFile()).whenIgnoringPaths( // Ignore the fields where values are always changing @@ -169,8 +167,9 @@ public class InstantiationTemplatesApiTest extends AsyncInstantiationBase { ))); } - private JsonNode fetchRecentTemplateInfo(String serviceModelId) { + private JsonNode fetchTemplateInfo(String serviceModelId, String jobId) { return stream(restTemplate.getForObject(getTemplateInfoUrl(serviceModelId), JsonNode[].class)) + .filter(it -> it.at("/jobId").asText().equals(jobId)) .findFirst() .orElseGet(() -> { throw new AssertionError(getTemplateInfoUrl(serviceModelId) + " returned zero results"); diff --git a/vid-webpack-master/cypress/integration/iFrames/browse-sdc.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/browse-sdc.e2e.ts index b3ef7f032..427696561 100644 --- a/vid-webpack-master/cypress/integration/iFrames/browse-sdc.e2e.ts +++ b/vid-webpack-master/cypress/integration/iFrames/browse-sdc.e2e.ts @@ -4,72 +4,105 @@ import {JsonBuilder} from '../../support/jsonBuilders/jsonBuilder'; import {ServiceModel} from '../../support/jsonBuilders/models/service.model'; describe('Browse SDC', function () { - var jsonBuilderAndMock : JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>(); + const jsonBuilderAndMock: JsonBuilder<ServiceModel> = new JsonBuilder<ServiceModel>(); - beforeEach(() => { - cy.clearSessionStorage(); - cy.preventErrorsOnLoading(); - cy.initAAIMock(); - cy.initVidMock(); - cy.initZones(); - cy.login(); - cy.visit("welcome.htm") + beforeEach(() => { + cy.clearSessionStorage(); + cy.preventErrorsOnLoading(); + cy.initAAIMock(); + cy.initVidMock(); + cy.initZones(); + cy.login(); + cy.visit("welcome.htm") + }); + + afterEach(() => { + cy.screenshot(); + }); + + it(`browse sdc open macro with network and then macro for new flow`, function () { + // const MACRO_WITH_CONFIGURATION_ID: string = 'ee6d61be-4841-4f98-8f23-5de9da846ca7'; + const MACRO_WITH_NETWORK_ID: string = "bd8ffd14-da36-4f62-813c-6716ba9f4354"; + const MACRO_FOR_NEW_FLOW_ID: string = '74fa72dd-012b-49c3-800d-06b12bcaf1a0'; + const CANCEL_BUTTON = "cancelButton"; + + cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/list-services.json').then((res) => { + jsonBuilderAndMock.basicJson(res, + Cypress.config('baseUrl') + '/rest/models/services?distributionStatus=DISTRIBUTED', + 200, + 0, + 'list_services'); }); - afterEach(() => { - cy.screenshot(); + cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/service-with-configuration.json').then((res) => { + jsonBuilderAndMock.basicJson(res, + Cypress.config('baseUrl') + '/rest/models/services/' + MACRO_WITH_NETWORK_ID, + 200, + 0, + 'MACRO_WITH_CONFIGURATION'); }); - it(`browse sdc open macro with network and then macro for new flow`, function () { - // const MACRO_WITH_CONFIGURATION_ID: string = 'ee6d61be-4841-4f98-8f23-5de9da846ca7'; - const MACRO_WITH_NETWORK_ID: string = "bd8ffd14-da36-4f62-813c-6716ba9f4354"; - const MACRO_FOR_NEW_FLOW_ID: string = '74fa72dd-012b-49c3-800d-06b12bcaf1a0'; - const CANCEL_BUTTON = "cancelButton"; - - cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/list-services.json').then((res) => { - jsonBuilderAndMock.basicJson(res, - Cypress.config('baseUrl') + '/rest/models/services?distributionStatus=DISTRIBUTED', - 200, - 0, - 'list_services'); - }); + cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/Dror_service1806_Macro1.json').then((res) => { + jsonBuilderAndMock.basicJson(res, + Cypress.config('baseUrl') + '/rest/models/services/' + MACRO_FOR_NEW_FLOW_ID, + 200, + 0, + 'MACRO_FOR_NEW_FLOW'); + }); - cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/service-with-configuration.json').then((res) => { - jsonBuilderAndMock.basicJson(res, - Cypress.config('baseUrl') + '/rest/models/services/' + MACRO_WITH_NETWORK_ID, - 200, - 0, - 'MACRO_WITH_CONFIGURATION'); - }); + cy.get('span').contains('Browse SDC Service Models').click({force: true}); + cy.wait("@list_services").then(() => { + cy.getElementByDataTestsId('deploy-' + MACRO_WITH_NETWORK_ID).click({force: true}) + .getElementByDataTestsId(CANCEL_BUTTON).click({force: true}); + cy.getElementByDataTestsId('deploy-' + MACRO_FOR_NEW_FLOW_ID).click({force: true}); + cy.get("iframe"); + }); - cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/Dror_service1806_Macro1.json').then((res) => { - jsonBuilderAndMock.basicJson(res, - Cypress.config('baseUrl') + '/rest/models/services/' + MACRO_FOR_NEW_FLOW_ID, - 200, - 0, - 'MACRO_FOR_NEW_FLOW'); - }); + cy.visit("welcome.htm"); //relaod page to not break the following tests + + }); + + it(`browse sdc should open instantiation template modal if service hasTemplate is true`, function () { + const SERVICE_MODEL_ID: string = '74fa72dd-012b-49c3-800d-06b12bcaf1a0'; - cy.get('span').contains('Browse SDC Service Models').click({force: true}); - cy.wait("@list_services").then(() => { - cy.getElementByDataTestsId('deploy-' + MACRO_WITH_NETWORK_ID).click({force: true}) - .getElementByDataTestsId(CANCEL_BUTTON).click({force: true}); - cy.getElementByDataTestsId('deploy-' + MACRO_FOR_NEW_FLOW_ID).click({force: true}); - cy.get("iframe"); + cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/list-services.json').then((res) => { + res.services = res.services.map((service: { uuid: string, hasTemplate: boolean }) => { + if (service.uuid === SERVICE_MODEL_ID) { + service.hasTemplate = true; + } + return service; }); + jsonBuilderAndMock.basicJson(res, + Cypress.config('baseUrl') + '/rest/models/services?distributionStatus=DISTRIBUTED', + 200, + 0, + 'list_services'); + }); - cy.visit("welcome.htm"); //relaod page to not break the following tests + cy.readFile('cypress/support/jsonBuilders/mocks/jsons/bug616888/Dror_service1806_Macro1.json').then((res) => { + jsonBuilderAndMock.basicJson(res, + Cypress.config('baseUrl') + '/rest/models/services/' + SERVICE_MODEL_ID, + 200, + 0, + 'MACRO_FOR_NEW_FLOW'); + }); + + cy.get('span').contains('Browse SDC Service Models').click({force: true}); + cy.wait("@list_services").then(() => { + cy.getElementByDataTestsId('deploy-' + SERVICE_MODEL_ID).click({force: true}); + cy.get('iframe').then(function ($iframe) { + expect($iframe.attr('src')).to.contain(`app/ui/#/instantiationTemplatesPopup?serviceModelId=${SERVICE_MODEL_ID}`); + }); }); + }); it(`browse sdc of service without instantiationType open aLaCarte popup`, function () { const VERY_OLD_SERVICE_UUID: string = "09c476c7-91ae-44b8-a731-04d8d8fa3695"; - const TEST_MOCKS_PATH="cypress/support/jsonBuilders/mocks/jsons/bug_aLaCarteServiceWrongPopup/"; + const TEST_MOCKS_PATH = "cypress/support/jsonBuilders/mocks/jsons/bug_aLaCarteServiceWrongPopup/"; - const CANCEL_BUTTON = "cancelButton"; - - cy.readFile(TEST_MOCKS_PATH+'list-services.json').then((res) => { + cy.readFile(TEST_MOCKS_PATH + 'list-services.json').then((res) => { jsonBuilderAndMock.basicJson(res, Cypress.config('baseUrl') + '/rest/models/services?distributionStatus=DISTRIBUTED', 200, @@ -77,7 +110,7 @@ describe('Browse SDC', function () { 'list_services'); }); - cy.readFile(TEST_MOCKS_PATH+'serviceWithoutInstantiationType.json').then((res) => { + cy.readFile(TEST_MOCKS_PATH + 'serviceWithoutInstantiationType.json').then((res) => { jsonBuilderAndMock.basicJson(res, Cypress.config('baseUrl') + '/rest/models/services/' + VERY_OLD_SERVICE_UUID, 200, @@ -96,5 +129,4 @@ describe('Browse SDC', function () { }); - }); diff --git a/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts index 1da12a55d..5afcc9748 100644 --- a/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts +++ b/vid-webpack-master/cypress/integration/iFrames/instantiation-templates.e2e.ts @@ -182,6 +182,21 @@ describe('Drawing Board: Instantiation Templates', function () { }); + it('Given a template - User can remove existing vfmodule', function () { + + loadDrawingBoardWithRecreateMode(); + nodeAction('node-c09e4530-8fd8-418f-9483-2f57ce927b05-vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1', 'Remove'); + let removed_vfModule_Path = [ + ...vnfPath, "vfModules", + "vprobe_nc_vnf0..VprobeNcVnf..FE_Add_On_Module_vlbagent_eph..module-1", + ]; + + assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd([ + {path: [...vnfPath, "vnfStoreKey"], value: "vProbe_NC_VNF 0"}, // side-effect + {path: [...removed_vfModule_Path], value: undefined}, + ]); + }); + [ {desc: "with changes", modifySomeValues: true}, {desc: "without changes", modifySomeValues: false}, @@ -246,7 +261,46 @@ describe('Drawing Board: Instantiation Templates', function () { assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd_network(); }); + it(`Given a stored template of Network - User can remove existing network`, () => { + + loadDrawingBoardWithRecreateModeNetwork(); + + nodeAction('node-01f4c475-3f89-4f00-a2f4-39a873dba0ae-SR-IOV Provider 2-1', 'Remove'); + let removed_network_Path = [ + "networks", "SR-IOV Provider 2-1", + ]; + let removed_network_counter_Path = [ + "existingNetworksCounterMap", "f6b6d141-0d4c-427d-ad35-797f3d1abe71", + ]; + + assertThatBodyFromDeployRequestEqualsToTemplateFromBackEnd_network([ + {path: removed_network_Path, value: undefined}, + {path: removed_network_counter_Path, value: 0}, + ]); + }); + + it('Given a template - User can add a new network', () => { + + loadDrawingBoardWithRecreateModeNetwork(); + + // add new node + addNewNode('node-SR-IOV Provider 2-1-add-btn') + .fillNetworkPopup() + .getDrawingBoardDeployBtn().click() + .wait('@expectedPostAsyncInstantiation').then(xhr => { + const networkRequest = bodyOf(xhr).networks['SR-IOV Provider 2-1_1']; + + expect(networkRequest.action).equals("Create"); + expect(networkRequest.rollbackOnFailure).equals("true"); + expect(networkRequest.originalName).equals("SR-IOV Provider 2-1"); + expect(networkRequest.productFamilyId).equals("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"); + expect(networkRequest.lcpCloudRegionId).equals("hvf6"); + expect(networkRequest.lineOfBusiness).equals("zzz1"); + expect(networkRequest.platformName).equals("xxx1"); + expect(networkRequest.tenantId).equals("229bcdc6eaeb4ca59d55221141d01f8e"); + }); + }); }); }); }); diff --git a/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts b/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts index dd17e7db5..7fb7ea584 100644 --- a/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts +++ b/vid-webpack-master/cypress/integration/iFrames/instantiation.templates.modal.e2e.ts @@ -1,89 +1,45 @@ ///<reference path="../../../node_modules/cypress/types/index.d.ts"/> describe('Template', () => { - - const instantiationTemplates = [ - { - "id": 8, - "created": 1525075968000, - "modified": 1525075971000, - "action": "INSTANTIATE", - "createdId": null, - "modifiedId": null, - "rowNum": null, - "auditUserId": null, - "auditTrail": null, - "jobId": "5c2cd8e5-27d0-42e3-85a1-85db5eaba459", - "templateId": "d42ba7c8-9e19-4e34-ae2c-d8af3f24498e", - "userId": "16807000", - "aLaCarte": false, - "msoRequestId": "c0011670-0e1a-4b74-945d-8bf5aede1d9c", - "jobStatus": "FAILED", - "statusModifiedDate": 1525075968000, - "hidden": false, - "pause": false, - "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", - "owningEntityName": "WayneHolland", - "project": "WATKINS", - "aicZoneId": "NFT1", - "aicZoneName": "NFTJSSSS-NFT1", - "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054", - "tenantName": "AIN Web Tool-15-D-testalexandria", - "regionId": "hvf6", - "regionName": null, - "serviceType": "TYLER SILVIA", - "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89", - "serviceInstanceId": null, - "serviceInstanceName": "nWUfl instance name_002", - "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", - "serviceModelName": "action-data", - "serviceModelVersion": "1.0", - "createdBulkDate": 1525075968000, - "isRetryEnabled": true, - "requestSummary": { - "vnf": 1, - "vfModule": 2, - "volumeGroup": 1 - } - }, - { - "id": 7, - "created": 1525075968000, - "modified": 1525075971000, - "action": "INSTANTIATE", - "createdId": null, - "modifiedId": null, - "rowNum": null, - "auditUserId": null, - "auditTrail": null, - "jobId": "13063a83-924e-4500-a3a1-e53d1b58450b", - "templateId": "d42ba7c8-9e19-4e34-ae2c-d8af3f24498e", - "userId": "17807000", - "aLaCarte": false, - "msoRequestId": "c0011670-0e1a-4b74-945d-8bf5aede1d9d", - "jobStatus": "IN_PROGRESS", - "statusModifiedDate": 1525075968000, - "hidden": false, - "pause": false, - "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", - "owningEntityName": "WayneHolland", - "project": "WATKINS", - "aicZoneId": "NFT1", - "aicZoneName": "NFTJSSSS-NFT1", - "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054", - "tenantName": "AIN Web Tool-15-D-testalexandria", - "regionId": "hvf6", - "regionName": null, - "serviceType": "TYLER SILVIA", - "subscriberName": "e433710f-9217-458d-a79d-1c7aff376d89", - "serviceInstanceId": null, - "serviceInstanceName": "nWUfl instance name_001", - "serviceModelId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", - "serviceModelName": "action-data", - "serviceModelVersion": "1.0", - "createdBulkDate": 1525075968000, - "isRetryEnabled": false - } - ]; + const templateJobIdFromE2EFile = 'ef3430f8-6350-454c-a7c2-89ba301522c1'; + + const aSecondTemplateInfo = { + id: 7, + created: 1525075968000, + modified: 1525075971000, + action: "INSTANTIATE", + createdId: null, + modifiedId: null, + rowNum: null, + auditUserId: null, + auditTrail: null, + jobId: "13063a83-924e-4500-a3a1-e53d1b58450b", + templateId: "d42ba7c8-9e19-4e34-ae2c-d8af3f24498e", + userId: "17807000", + aLaCarte: false, + msoRequestId: "c0011670-0e1a-4b74-945d-8bf5aede1d9d", + jobStatus: "IN_PROGRESS", + statusModifiedDate: 1525075968000, + hidden: false, + pause: false, + owningEntityId: "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", + owningEntityName: "WayneHolland", + project: "WATKINS", + aicZoneId: "NFT1", + aicZoneName: "NFTJSSSS-NFT1", + tenantId: "bae71557c5bb4d5aac6743a4e5f1d054", + tenantName: "AIN Web Tool-15-D-testalexandria", + regionId: "hvf6", + regionName: null, + serviceType: "TYLER SILVIA", + subscriberName: "e433710f-9217-458d-a79d-1c7aff376d89", + serviceInstanceId: null, + serviceInstanceName: "nWUfl instance name_001", + serviceModelId: "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", + serviceModelName: "action-data", + serviceModelVersion: "1.0", + createdBulkDate: 1525075968000, + isRetryEnabled: false + }; beforeEach(() => { cy.clearSessionStorage(); @@ -107,8 +63,13 @@ describe('Template', () => { }).as('initFlags'); }); - cy.route(Cypress.config('baseUrl') + "/instantiationTemplates**", instantiationTemplates); - cy.route(Cypress.config('baseUrl') + "/getuserID", '16807000'); + cy.readFile('fixture:../../../vid-automation/src/test/resources/asyncInstantiation/vidRequestCreateBulkOfMacro__template_info.json').then((templateInfoFromE2EFile)=>{ + cy.route(Cypress.config('baseUrl') + "/instantiationTemplates?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", + [ templateInfoFromE2EFile, aSecondTemplateInfo ] + ) + }); + + cy.route(Cypress.config('baseUrl') + "/getuserID", 'us16807000'); cy.openPopupIframe('/app/ui/#/servicePopup?serviceModelId=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd&isCreate=true'); @@ -124,8 +85,7 @@ describe('Template', () => { .getElementByDataTestsId('template-modal-title').contains('Templates') // Check Modal header .getElementByDataTestsId('description-part-1').contains('The following list presents previous instantiations done for this model in this version.') .getElementByDataTestsId('description-part-2').contains('You may use one of them as a baseline for your instantiation or start from scratch.') - .getElementByDataTestsId('description-part-3').contains('Once you selecting one allows you to change the data before start instantiating.') - + .getElementByDataTestsId('description-part-3').contains('Once you selecting one allows you to change the data before start instantiating.'); //check table headers cy.get(`#header-userId`).contains('User ID'); @@ -137,19 +97,19 @@ describe('Template', () => { cy.get(`#header-aicZone`).contains('AIC Zone'); // check table body row - cy.getElementByDataTestsId(`userId-${instantiationTemplates[0].jobId}`).contains('16807000'); - cy.getElementByDataTestsId(`createDate-${instantiationTemplates[0].jobId}`).contains('2018-04-30 11:12:48'); - cy.getElementByDataTestsId(`instanceName-${instantiationTemplates[0].jobId}`).contains('nWUfl instance name_002'); - cy.getElementByDataTestsId(`instantiationStatus-${instantiationTemplates[0].jobId}`).contains('FAILED'); - cy.getElementByDataTestsId(`summary-${instantiationTemplates[0].jobId}`).contains('vnf: 1, vfModule: 2, volumeGroup: 1'); - cy.getElementByDataTestsId(`region-${instantiationTemplates[0].jobId}`).contains('hvf6 (WAYNEHOLLAND)'); - cy.getElementByDataTestsId(`tenant-${instantiationTemplates[0].jobId}`).contains('AIN Web Tool-15-D-testalexandria'); - cy.getElementByDataTestsId(`aicZone-${instantiationTemplates[0].jobId}`).contains('NFTJSSSS-NFT1'); + cy.getElementByDataTestsId(`userId-${templateJobIdFromE2EFile}`).contains('16807000'); + cy.getElementByDataTestsId(`createDate-${templateJobIdFromE2EFile}`).contains('2019-12-26 11:57:05'); + cy.getElementByDataTestsId(`instanceName-${templateJobIdFromE2EFile}`).contains('SERVICE_NAME'); + cy.getElementByDataTestsId(`instantiationStatus-${templateJobIdFromE2EFile}`).contains('IN_PROGRESS'); + cy.getElementByDataTestsId(`summary-${templateJobIdFromE2EFile}`).contains('vnf: 1, vfModule: 2, volumeGroup: 1'); + cy.getElementByDataTestsId(`region-${templateJobIdFromE2EFile}`).contains('hvf3 (SOMENAME)'); + cy.getElementByDataTestsId(`tenant-${templateJobIdFromE2EFile}`).contains('greatTenant'); + cy.getElementByDataTestsId(`aicZone-${templateJobIdFromE2EFile}`).contains('NFTJSSSS-NFT1'); //check load button is disabled cy.getElementByDataTestsId('LoadTemplateButton').should('be.disabled'); - cy.getElementByDataTestsId('row-5c2cd8e5-27d0-42e3-85a1-85db5eaba459').click(); + cy.getElementByDataTestsId(`row-${templateJobIdFromE2EFile}`).click(); cy.getElementByDataTestsId('LoadTemplateButton').should('not.be.disabled'); //filter by userId @@ -164,18 +124,16 @@ describe('Template', () => { cy.getElementByDataTestsId('templateButton').contains('Template') .getElementByDataTestsId('templateButton').click({force: true}) // Open template Modal - const serviceModelId = 'e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0'; - const jobId = '5c2cd8e5-27d0-42e3-85a1-85db5eaba459'; + const serviceModelId = '5c9e863f-2716-467b-8799-4a67f378dcaa'; const vidBaseUrl = `http://localhost:8080/vid/serviceModels.htm`; - cy.getElementByDataTestsId('row-5c2cd8e5-27d0-42e3-85a1-85db5eaba459').click(); + cy.getElementByDataTestsId(`row-${templateJobIdFromE2EFile}`).click(); cy.getElementByDataTestsId('LoadTemplateButton').click().setViewportToDefault(); cy.location().should((loc) => { - expect(loc.toString()).to.eq(`${vidBaseUrl}#/servicePlanning/RECREATE?serviceModelId=${serviceModelId}&jobId=${jobId}`); + expect(loc.toString()).to.eq(`${vidBaseUrl}#/servicePlanning/RECREATE?serviceModelId=${serviceModelId}&jobId=${templateJobIdFromE2EFile}`); }); }); - }); diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts index 3cd633de6..eb608652c 100644 --- a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts @@ -70,11 +70,7 @@ export class GenericFormPopupComponent extends DialogComponent<PopupModel, boole } closeDialog(that): void { - this._iframeService.removeClassCloseModal(that.parentElementClassName); - this.dialogService.removeDialog(this); - setTimeout(() => { - window.parent.postMessage("closeIframe", "*"); - }, 15); + this._iframeService.closeIframe(this.dialogService, this); } shouldShowNotification(): boolean { diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.html b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.html index 07fc7ab22..e2922b2a2 100644 --- a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.html +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.html @@ -2,6 +2,7 @@ <div class="modal-content"> <div class="modal-header"> <button type="button" + [attr.data-tests-id]="'closeModal'" class="close" (click)="closeModal()">× </button> diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.ts index 6a734161f..20655d54a 100644 --- a/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.ts +++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/instantiationTemplatesModal/instantiation.templates.modal.component.ts @@ -68,6 +68,6 @@ export class InstantiationTemplatesModalComponent extends DialogComponent<string }; closeModal(): void { - this.dialogService.removeDialog(this); + this._iframeService.closeIframe(this.dialogService, this); } } diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-elements-modal.component.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-elements-modal.component.ts index 211f59337..47f849059 100644 --- a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-elements-modal.component.ts +++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-elements-modal.component.ts @@ -60,11 +60,7 @@ export class SearchElementsModalComponent extends DialogComponent<{ modalInforma closeDialog(): void { this._iframeService.removeFullScreen(); - this._iframeService.removeClassCloseModal(this.parentElementClassName); - this.dialogService.removeDialog(this); - setTimeout(() => { - window.parent.postMessage("closeIframe", "*"); - }, 15); + this._iframeService.closeIframe(this.dialogService, this); } selectedMembersAmountChange(selectedMembersAmount: number): void { diff --git a/vid-webpack-master/src/app/shared/utils/iframe.service.spec.ts b/vid-webpack-master/src/app/shared/utils/iframe.service.spec.ts new file mode 100644 index 000000000..fd5fe0e65 --- /dev/null +++ b/vid-webpack-master/src/app/shared/utils/iframe.service.spec.ts @@ -0,0 +1,40 @@ +import {getTestBed, TestBed} from "@angular/core/testing"; +import {IframeService} from "./iframe.service"; +import {DialogService} from "ng2-bootstrap-modal"; + +export class DialogServiceMock extends DialogService { + removeDialog: (that) => ({}) +} + +describe('Iframe service', () => { + let injector; + let service: IframeService; + beforeAll(done => (async () => { + TestBed.configureTestingModule({ + providers : [ + IframeService + ] + }); + await TestBed.compileComponents(); + + injector = getTestBed(); + service = injector.get(IframeService); + + })().then(done).catch(done.fail)); + + + test('service should be defined', ()=>{ + expect(service).toBeDefined(); + }); + + test('closeIframe: should call removeClassCloseModal', ()=>{ + const dialogService = new DialogServiceMock(null, null, null, null); + spyOn(service, 'removeClassCloseModal'); + spyOn(dialogService, 'removeDialog'); + service.closeIframe(dialogService, {}) + + expect(service.removeClassCloseModal).toBeCalledWith('content'); + expect(dialogService.removeDialog).toBeCalledWith({}); + }); + +}); diff --git a/vid-webpack-master/src/app/shared/utils/iframe.service.ts b/vid-webpack-master/src/app/shared/utils/iframe.service.ts index 4c699825f..ab93d1ac8 100644 --- a/vid-webpack-master/src/app/shared/utils/iframe.service.ts +++ b/vid-webpack-master/src/app/shared/utils/iframe.service.ts @@ -1,22 +1,31 @@ import {Injectable} from "@angular/core"; +import {DialogService} from "ng2-bootstrap-modal"; @Injectable() export class IframeService { addClassOpenModal(elementClassName: string) { - var parentBodyElement = parent.document.getElementsByClassName(elementClassName)[0]; + const parentBodyElement = parent.document.getElementsByClassName(elementClassName)[0]; if (parentBodyElement) { parentBodyElement.classList.add("modal-open"); } } removeClassCloseModal(elementClassName: string) { - var parentBodyElement = parent.document.getElementsByClassName(elementClassName)[0]; + const parentBodyElement = parent.document.getElementsByClassName(elementClassName)[0]; if (parentBodyElement) { parentBodyElement.classList.remove("modal-open"); } } + closeIframe(dialogService : DialogService, that){ + this.removeClassCloseModal('content'); + dialogService.removeDialog(that); + setTimeout(() => { + window.parent.postMessage("closeIframe", "*"); + }, 15); + } + addFullScreen(){ let parentBodyElement = parent.document.getElementsByClassName('service-model-content')[0]; |