Add new code new version
Change-Id: Ic02a76313503b526f17c3df29eb387a29fe6a42a
Signed-off-by: Michael Lando <ml636r@att.com>
diff --git a/openecomp-ui/test/softwareProduct/details/test.js b/openecomp-ui/test/softwareProduct/details/test.js
new file mode 100644
index 0000000..9803b16
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/details/test.js
@@ -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');
+ });
+
+});
+