Add new code new version
[sdc.git] / openecomp-ui / test / softwareProduct / details / test.js
diff --git a/openecomp-ui/test/softwareProduct/details/test.js b/openecomp-ui/test/softwareProduct/details/test.js
new file mode 100644 (file)
index 0000000..9803b16
--- /dev/null
@@ -0,0 +1,383 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+import {expect} from 'chai';
+import deepFreeze from 'deep-freeze';
+import mockRest from 'test-utils/MockRest.js';
+import {cloneAndSet} from 'test-utils/Util.js';
+import {storeCreator} from 'sdc-app/AppStore.js';
+
+import SoftwareProductCreationActionHelper from 'sdc-app/onboarding/softwareProduct/creation/SoftwareProductCreationActionHelper.js';
+import SoftwareProductActionHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js';
+import SoftwareProductCategoriesHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductCategoriesHelper.js';
+
+describe('Software Product Module Tests', function () {
+       it('Get Software Products List', () => {
+               const store = storeCreator();
+               deepFreeze(store.getState());
+
+               const softwareProductList = [
+                       {
+                               name: 'VSP1',
+                               description: 'hjhj',
+                               version: '0.1',
+                               id: 'EBADF561B7FA4A788075E1840D0B5971',
+                               subCategory: 'resourceNewCategory.network connectivity.virtual links',
+                               category: 'resourceNewCategory.network connectivity',
+                               vendorId: '5259EDE4CC814DC9897BA6F69E2C971B',
+                               vendorName: 'Vendor',
+                               checkinStatus: 'CHECK_OUT',
+                               licensingData: {
+                                       'featureGroups': []
+                               }
+                       },
+                       {
+                               name: 'VSP2',
+                               description: 'dfdfdfd',
+                               version: '0.1',
+                               id: '2F47447D22DB4C53B020CA1E66201EF2',
+                               subCategory: 'resourceNewCategory.network connectivity.virtual links',
+                               category: 'resourceNewCategory.network connectivity',
+                               vendorId: '5259EDE4CC814DC9897BA6F69E2C971B',
+                               vendorName: 'Vendor',
+                               checkinStatus: 'CHECK_OUT',
+                               licensingData: {
+                                       featureGroups: []
+                               }
+                       }
+               ];
+
+               deepFreeze(softwareProductList);
+
+               deepFreeze(store.getState());
+
+               const expectedStore = cloneAndSet(store.getState(), 'softwareProductList', softwareProductList);
+
+               mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+                       expect(baseUrl).to.equal('/onboarding-api/v1.0/vendor-software-products/');
+                       expect(data).to.deep.equal(undefined);
+                       expect(options).to.equal(undefined);
+                       return {results: softwareProductList};
+               });
+
+               return SoftwareProductActionHelper.fetchSoftwareProductList(store.dispatch).then(() => {
+                       expect(store.getState()).to.deep.equal(expectedStore);
+               });
+       });
+
+       it('Add Software Product', () => {
+               const store = storeCreator();
+               deepFreeze(store.getState());
+
+               const softwareProductPostRequest = deepFreeze({
+                       name: 'vsp1',
+                       description: 'string',
+                       vendorId: '1',
+                       vendorName: 'Vendor',
+                       icon: 'icon',
+                       subCategory: 'resourceNewCategory.network connectivity.virtual links',
+                       category: 'resourceNewCategory.network connectivity',
+                       licensingData: {}
+               });
+
+               const softwareProductToAdd = deepFreeze({
+                       ...softwareProductPostRequest
+               });
+
+               const softwareProductIdFromResponse = 'ADDED_ID';
+               const softwareProductAfterAdd = deepFreeze({
+                       ...softwareProductToAdd,
+                       id: softwareProductIdFromResponse
+               });
+
+               const expectedStore = cloneAndSet(store.getState(), 'softwareProductList', [softwareProductAfterAdd]);
+
+               mockRest.addHandler('create', ({options, data, baseUrl}) => {
+                       expect(baseUrl).to.equal('/onboarding-api/v1.0/vendor-software-products/');
+                       expect(data).to.deep.equal(softwareProductPostRequest);
+                       expect(options).to.equal(undefined);
+                       return {
+                               vspId: softwareProductIdFromResponse
+                       };
+               });
+
+               return SoftwareProductCreationActionHelper.createSoftwareProduct(store.dispatch, {
+                       softwareProduct: softwareProductToAdd
+               }).then(() => {
+                       expect(store.getState()).to.deep.equal(expectedStore);
+               });
+       });
+       it('Save Software product', () => {
+               const softwareProduct = {
+                       name: 'VSP5',
+                       id: '4730033D16C64E3CA556AB0AC4478218',
+                       description: 'A software model for Fortigate.',
+                       subCategory: 'resourceNewCategory.network connectivity.virtual links',
+                       category: 'resourceNewCategory.network connectivity',
+                       vendorId: '1',
+                       vendorName: 'Vendor',
+                       licensingVersion: '1.0',
+                       icon: 'icon',
+                       licensingData: {
+                               licenceAgreement: '123',
+                               featureGroups: [
+                                       '123', '234'
+                               ]
+                       }
+               };
+               deepFreeze(softwareProduct);
+
+               const store = storeCreator({
+                       softwareProduct: {
+                               softwareProductEditor: {data: softwareProduct},
+                               softwareProductQuestionnaire: {qdata: 'test', qschema: {type: 'string'}}
+                       }
+               });
+               deepFreeze(store.getState());
+
+               const toBeUpdatedSoftwareProductId = softwareProduct.id;
+               const softwareProductUpdateData = {
+                       ...softwareProduct,
+                       name: 'VSP5_UPDATED',
+                       description: 'A software model for Fortigate._UPDATED'
+               };
+               deepFreeze(softwareProductUpdateData);
+
+               const expectedStore = cloneAndSet(store.getState(), 'softwareProductList', [softwareProductUpdateData]);
+               const questionnaireData = {
+                       general: {
+                               affinityData: {
+                                       affinityGrouping: true,
+                                       antiAffinityGrouping: false
+                               }
+                       }
+               };
+               deepFreeze(questionnaireData);
+
+               mockRest.addHandler('save', ({data, options, baseUrl}) => {
+                       const expectedData = {
+                               name: 'VSP5_UPDATED',
+                               description: 'A software model for Fortigate._UPDATED',
+                               subCategory: 'resourceNewCategory.network connectivity.virtual links',
+                               category: 'resourceNewCategory.network connectivity',
+                               vendorId: '1',
+                               vendorName: 'Vendor',
+                               licensingVersion: '1.0',
+                               icon: 'icon',
+                               licensingData: {
+                                       licenceAgreement: '123',
+                                       featureGroups: [
+                                               '123', '234'
+                                       ]
+                               }
+                       };
+                       expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}`);
+                       expect(data).to.deep.equal(expectedData);
+                       expect(options).to.equal(undefined);
+                       return {returnCode: 'OK'};
+               });
+               mockRest.addHandler('save', ({data, options, baseUrl}) => {
+                       expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}/questionnaire`);
+                       expect(data).to.deep.equal(questionnaireData);
+                       expect(options).to.equal(undefined);
+                       return {returnCode: 'OK'};
+               });
+
+               return SoftwareProductActionHelper.updateSoftwareProduct(store.dispatch, {
+                       softwareProduct: softwareProductUpdateData,
+                       qdata: questionnaireData
+               }).then(() => {
+                       expect(store.getState()).to.deep.equal(expectedStore);
+               });
+       });
+       it('Save Software product data only', () => {
+               const softwareProduct = {
+                       name: 'VSP5',
+                       id: '4730033D16C64E3CA556AB0AC4478218',
+                       description: 'A software model for Fortigate.',
+                       subCategory: 'resourceNewCategory.network connectivity.virtual links',
+                       category: 'resourceNewCategory.network connectivity',
+                       vendorId: '1',
+                       vendorName: 'Vendor',
+                       licensingVersion: '1.0',
+                       icon: 'icon',
+                       licensingData: {
+                               licenceAgreement: '123',
+                               featureGroups: [
+                                       '123', '234'
+                               ]
+                       }
+               };
+               deepFreeze(softwareProduct);
+
+               const store = storeCreator({
+                       softwareProduct: {
+                               softwareProductEditor: {data: softwareProduct},
+                               softwareProductQuestionnaire: {qdata: 'test', qschema: {type: 'string'}}
+                       }
+               });
+               deepFreeze(store.getState());
+               const expectedStore = store.getState();
+
+               const toBeUpdatedSoftwareProductId = softwareProduct.id;
+               const softwareProductUpdateData = {
+                       ...softwareProduct,
+                       name: 'VSP5_UPDATED',
+                       description: 'A software model for Fortigate._UPDATED'
+               };
+               deepFreeze(softwareProductUpdateData);
+
+               mockRest.addHandler('save', ({data, options, baseUrl}) => {
+                       const expectedData = {
+                               name: 'VSP5_UPDATED',
+                               description: 'A software model for Fortigate._UPDATED',
+                               subCategory: 'resourceNewCategory.network connectivity.virtual links',
+                               category: 'resourceNewCategory.network connectivity',
+                               vendorId: '1',
+                               vendorName: 'Vendor',
+                               licensingVersion: '1.0',
+                               icon: 'icon',
+                               licensingData: {
+                                       licenceAgreement: '123',
+                                       featureGroups: [
+                                               '123', '234'
+                                       ]
+                               }
+                       };
+                       expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}`);
+                       expect(data).to.deep.equal(expectedData);
+                       expect(options).to.equal(undefined);
+                       return {returnCode: 'OK'};
+               });
+
+               return SoftwareProductActionHelper.updateSoftwareProductData(store.dispatch, {
+                       softwareProduct: softwareProductUpdateData
+               }).then(() => {
+                       expect(store.getState()).to.deep.equal(expectedStore);
+               });
+       });
+
+       it('Save Software product questionnaire only', () => {
+               const softwareProduct = {
+                       name: 'VSP5',
+                       id: '4730033D16C64E3CA556AB0AC4478218',
+                       description: 'A software model for Fortigate.',
+                       subCategory: 'resourceNewCategory.network connectivity.virtual links',
+                       category: 'resourceNewCategory.network connectivity',
+                       vendorId: '1',
+                       vendorName: 'Vendor',
+                       icon: 'icon',
+                       licensingData: {
+                               licenceAgreement: '123',
+                               featureGroups: [
+                                       '123', '234'
+                               ]
+                       }
+               };
+               deepFreeze(softwareProduct);
+
+               const store = storeCreator({
+                       softwareProduct: {
+                               softwareProductEditor: {data: softwareProduct},
+                               softwareProductQuestionnaire: {qdata: 'test', qschema: {type: 'string'}}
+                       }
+               });
+               deepFreeze(store.getState());
+               const expectedStore = store.getState();
+
+               const toBeUpdatedSoftwareProductId = softwareProduct.id;
+               const questionnaireData = {
+                       general: {
+                               affinityData: {
+                                       affinityGrouping: true,
+                                       antiAffinityGrouping: false
+                               }
+                       }
+               };
+               deepFreeze(questionnaireData);
+
+               mockRest.addHandler('save', ({data, options, baseUrl}) => {
+                       expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}/questionnaire`);
+                       expect(data).to.deep.equal(questionnaireData);
+                       expect(options).to.equal(undefined);
+                       return {returnCode: 'OK'};
+               });
+
+               return SoftwareProductActionHelper.updateSoftwareProductQuestionnaire(store.dispatch, {
+                       softwareProductId: softwareProduct.id,
+                       qdata: questionnaireData
+               }).then(() => {
+                       expect(store.getState()).to.deep.equal(expectedStore);
+               });
+       });
+
+       it('Handle category without subcategories', () => {
+               const categories = deepFreeze([
+                       {
+                               name: 'Resource Category 1',
+                               normalizedName: 'resource category 1',
+                               uniqueId: 'resourceNewCategory.resource category 1',
+                               subcategories: [
+                                       {
+                                               name: 'Sub Category for RC 1',
+                                               normalizedName: 'sub category for rc 1',
+                                               uniqueId: 'resourceNewCategory.resource category 1.sub category for rc 1'
+                                       },
+                                       {
+                                               name: 'SC4RC2',
+                                               normalizedName: 'sc4rc2',
+                                               uniqueId: 'resourceNewCategory.resource category 1.sc4rc2'
+                                       },
+                                       {
+                                               name: 'SC4RC1',
+                                               normalizedName: 'sc4rc1',
+                                               uniqueId: 'resourceNewCategory.resource category 1.sc4rc1'
+                                       }
+                               ]
+                       },
+                       {
+                               name: 'Eeeeee',
+                               normalizedName: 'eeeeee',
+                               uniqueId: 'resourceNewCategory.eeeeee'
+                       },
+                       {
+                               name: 'Some Recource',
+                               normalizedName: 'some recource',
+                               uniqueId: 'resourceNewCategory.some recource',
+                               subcategories: [
+                                       {
+                                               name: 'Second Sub Category for S',
+                                               normalizedName: 'second sub category for s',
+                                               uniqueId: 'resourceNewCategory.some recource.second sub category for s'
+                                       },
+                                       {
+                                               name: 'Sub Category for Some Rec',
+                                               normalizedName: 'sub category for some rec',
+                                               uniqueId: 'resourceNewCategory.some recource.sub category for some rec'
+                                       }
+                               ]
+                       }
+               ]);
+               const category = SoftwareProductCategoriesHelper.getCurrentCategoryOfSubCategory('resourceNewCategory.some recource.sub category for some rec', categories);
+               expect(category).to.equal('resourceNewCategory.some recource');
+       });
+
+});
+