blob: 91b4e7d40eea6a8b670087ecf3c3cda150c275ba [file] [log] [blame]
talig8e9c0652017-12-20 14:30:43 +02001/*!
svishnev57c5c4a2018-04-22 14:14:31 +03002 * Copyright © 2016-2018 European Support Limited
talig8e9c0652017-12-20 14:30:43 +02003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
15 */
16
17import deepFreeze from 'deep-freeze';
18import mockRest from 'test-utils/MockRest.js';
svishnev57c5c4a2018-04-22 14:14:31 +030019import { cloneAndSet } from 'test-utils/Util.js';
20import { storeCreator } from 'sdc-app/AppStore.js';
talig8e9c0652017-12-20 14:30:43 +020021
22import SoftwareProductActionHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js';
svishnev57c5c4a2018-04-22 14:14:31 +030023import { VSPEditorFactoryWithLicensingData } from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
talig8e9c0652017-12-20 14:30:43 +020024import VersionFactory from 'test-utils/factories/common/VersionFactory.js';
svishnev57c5c4a2018-04-22 14:14:31 +030025import { default as CurrentScreenFactory } from 'test-utils/factories/common/CurrentScreenFactory.js';
26import { actionsEnum as VersionControllerActionsEnum } from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
27import { SyncStates } from 'sdc-app/common/merge/MergeEditorConstants.js';
28import { itemTypes } from 'sdc-app/onboarding/versionsPage/VersionsPageConstants.js';
talig8e9c0652017-12-20 14:30:43 +020029
svishnev57c5c4a2018-04-22 14:14:31 +030030describe('Software Product Module Tests', function() {
31 it('Validating readonly screen after submit', () => {
32 const version = VersionFactory.build({}, { isCertified: false });
33 const itemPermissionAndProps = CurrentScreenFactory.build(
34 {},
35 { version }
36 );
37 const softwareProduct = VSPEditorFactoryWithLicensingData.build();
38 deepFreeze(softwareProduct);
talig8e9c0652017-12-20 14:30:43 +020039
svishnev57c5c4a2018-04-22 14:14:31 +030040 const store = storeCreator({
41 currentScreen: { ...itemPermissionAndProps },
42 softwareProduct: {
43 softwareProductEditor: { data: softwareProduct },
44 softwareProductQuestionnaire: {
45 qdata: 'test',
46 qschema: { type: 'string' }
47 }
48 }
49 });
50 deepFreeze(store.getState());
talig8e9c0652017-12-20 14:30:43 +020051
svishnev57c5c4a2018-04-22 14:14:31 +030052 const certifiedVersion = {
53 ...itemPermissionAndProps.props.version,
54 status: 'Certified'
55 };
talig8e9c0652017-12-20 14:30:43 +020056
svishnev57c5c4a2018-04-22 14:14:31 +030057 const versionsList = {
58 itemType: itemTypes.SOFTWARE_PRODUCT,
59 itemId: softwareProduct.id,
60 versions: [{ ...certifiedVersion }]
61 };
62 const expectedCurrentScreenProps = {
63 itemPermission: {
64 ...itemPermissionAndProps.itemPermission,
65 isCertified: true
66 },
67 props: {
68 isReadOnlyMode: true,
69 version: certifiedVersion
70 }
71 };
72 const expectedSuccessModal = {
73 cancelButtonText: 'OK',
74 modalClassName: 'notification-modal',
75 msg: 'This software product successfully submitted',
76 timeout: 2000,
77 title: 'Submit Succeeded',
78 type: 'success'
79 };
talig8e9c0652017-12-20 14:30:43 +020080
svishnev57c5c4a2018-04-22 14:14:31 +030081 let expectedStore = store.getState();
82 expectedStore = cloneAndSet(
83 expectedStore,
84 'currentScreen.itemPermission',
85 expectedCurrentScreenProps.itemPermission
86 );
87 expectedStore = cloneAndSet(
88 expectedStore,
89 'currentScreen.props',
90 expectedCurrentScreenProps.props
91 );
92 expectedStore = cloneAndSet(
93 expectedStore,
94 'modal',
95 expectedSuccessModal
96 );
97 expectedStore = cloneAndSet(
98 expectedStore,
99 'versionsPage.versionsList',
100 versionsList
101 );
talig8e9c0652017-12-20 14:30:43 +0200102
svishnev57c5c4a2018-04-22 14:14:31 +0300103 mockRest.addHandler('put', ({ data, options, baseUrl }) => {
104 expect(baseUrl).toEqual(
105 `/onboarding-api/v1.0/vendor-software-products/${
106 softwareProduct.id
107 }/versions/${version.id}/actions`
108 );
109 expect(data).toEqual({
110 action: VersionControllerActionsEnum.SUBMIT
111 });
112 expect(options).toEqual(undefined);
113 return { returnCode: 'OK' };
114 });
talig8e9c0652017-12-20 14:30:43 +0200115
svishnev57c5c4a2018-04-22 14:14:31 +0300116 mockRest.addHandler('put', ({ data, options, baseUrl }) => {
117 expect(baseUrl).toEqual(
118 `/onboarding-api/v1.0/vendor-software-products/${
119 softwareProduct.id
120 }/versions/${version.id}/actions`
121 );
122 expect(data).toEqual({
123 action: VersionControllerActionsEnum.CREATE_PACKAGE
124 });
125 expect(options).toEqual(undefined);
126 return { returnCode: 'OK' };
127 });
talig8e9c0652017-12-20 14:30:43 +0200128
svishnev57c5c4a2018-04-22 14:14:31 +0300129 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
130 expect(baseUrl).toEqual(
131 `/onboarding-api/v1.0/items/${softwareProduct.id}/versions/${
132 version.id
133 }`
134 );
135 expect(data).toEqual(undefined);
136 expect(options).toEqual(undefined);
137 return {
138 ...certifiedVersion,
139 state: {
140 synchronizationState: SyncStates.UP_TO_DATE,
141 dirty: false
142 }
143 };
144 });
talig8e9c0652017-12-20 14:30:43 +0200145
svishnev57c5c4a2018-04-22 14:14:31 +0300146 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
147 expect(baseUrl).toEqual(
148 `/onboarding-api/v1.0/items/${softwareProduct.id}`
149 );
150 expect(data).toEqual(undefined);
151 expect(options).toEqual(undefined);
152 return { ...certifiedVersion };
153 });
talig8e9c0652017-12-20 14:30:43 +0200154
svishnev57c5c4a2018-04-22 14:14:31 +0300155 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
156 expect(baseUrl).toEqual(
157 `/onboarding-api/v1.0/items/${softwareProduct.id}/versions`
158 );
159 expect(data).toEqual(undefined);
160 expect(options).toEqual(undefined);
161 return { results: [{ ...certifiedVersion }] };
162 });
163
164 return SoftwareProductActionHelper.performSubmitAction(store.dispatch, {
165 softwareProductId: softwareProduct.id,
166 version
167 }).then(() => {
168 expect(store.getState()).toEqual(expectedStore);
169 });
170 });
171});