2 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 import deepFreeze from 'deep-freeze';
17 import mockRest from 'test-utils/MockRest.js';
18 import {cloneAndSet, buildListFromFactory} from 'test-utils/Util.js';
19 import {storeCreator} from 'sdc-app/AppStore.js';
20 import EntitlementPoolsActionHelper from 'sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsActionHelper.js';
21 import {EntitlementPoolStoreFactory, EntitlementPoolPostFactory} from 'test-utils/factories/licenseModel/EntitlementPoolFactories.js';
22 import VersionFactory from 'test-utils/factories/common/VersionFactory.js';
23 import {LimitItemFactory, LimitPostFactory} from 'test-utils/factories/licenseModel/LimitFactories.js';
24 import {getStrValue} from 'nfvo-utils/getValue.js';
25 import {SyncStates} from 'sdc-app/common/merge/MergeEditorConstants.js';
26 import CurrentScreenFactory from 'test-utils/factories/common/CurrentScreenFactory.js';
28 describe('Entitlement Pools Module Tests', function () {
30 const LICENSE_MODEL_ID = '555';
31 const version = VersionFactory.build();
32 const itemPermissionAndProps = CurrentScreenFactory.build({}, {version});
33 const returnedVersionFields = {baseId: version.baseId, description: version.description, id: version.id, name: version.name, status: version.status};
35 it('Load Entitlement Pools List', () => {
37 const entitlementPoolsList = buildListFromFactory(EntitlementPoolStoreFactory);
38 deepFreeze(entitlementPoolsList);
39 const store = storeCreator();
40 deepFreeze(store.getState());
42 const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolsList', entitlementPoolsList);
44 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
45 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools`);
46 expect(data).toEqual(undefined);
47 expect(options).toEqual(undefined);
48 return {results: entitlementPoolsList};
51 return EntitlementPoolsActionHelper.fetchEntitlementPoolsList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID, version}).then(() => {
52 expect(store.getState()).toEqual(expectedStore);
56 it('Delete Entitlement Pool', () => {
58 const entitlementPoolsList = buildListFromFactory(EntitlementPoolStoreFactory,1);
59 deepFreeze(entitlementPoolsList);
60 const store = storeCreator({
61 currentScreen: {...itemPermissionAndProps},
68 deepFreeze(store.getState());
70 const expectedCurrentScreenProps = {
71 ...itemPermissionAndProps,
73 ...itemPermissionAndProps.itemPermission,
78 let expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolsList', []);
79 expectedStore = cloneAndSet(expectedStore, 'currentScreen.itemPermission', expectedCurrentScreenProps.itemPermission);
81 mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
82 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPoolsList[0].id}`);
83 expect(data).toEqual(undefined);
84 expect(options).toEqual(undefined);
92 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
93 expect(baseUrl).toEqual(`/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${version.id}`);
94 expect(data).toEqual(undefined);
95 expect(options).toEqual(undefined);
96 return {...returnedVersionFields, state: {synchronizationState: SyncStates.UP_TO_DATE, dirty: true}};
99 return EntitlementPoolsActionHelper.deleteEntitlementPool(store.dispatch, {
100 licenseModelId: LICENSE_MODEL_ID,
102 entitlementPoolId: entitlementPoolsList[0].id
104 expect(store.getState()).toEqual(expectedStore);
108 it('Add Entitlement Pool', () => {
110 const store = storeCreator({
111 currentScreen: {...itemPermissionAndProps}
113 deepFreeze(store.getState());
115 const EntitlementPoolPostRequest = EntitlementPoolPostFactory.build();
117 deepFreeze(EntitlementPoolPostRequest);
119 const entitlementPoolIdFromResponse = 'ADDED_ID';
120 const entitlementPoolAfterAdd = EntitlementPoolStoreFactory.build({id: entitlementPoolIdFromResponse});
121 deepFreeze(entitlementPoolAfterAdd);
123 const expectedCurrentScreenProps = {
124 ...itemPermissionAndProps,
126 ...itemPermissionAndProps.itemPermission,
131 let expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolsList', [entitlementPoolAfterAdd]);
132 expectedStore = cloneAndSet(expectedStore, 'currentScreen.itemPermission', expectedCurrentScreenProps.itemPermission);
134 mockRest.addHandler('post', ({data, options, baseUrl}) => {
135 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools`);
136 expect(data).toEqual(EntitlementPoolPostRequest);
137 expect(options).toEqual(undefined);
140 value: entitlementPoolIdFromResponse
144 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
145 expect(baseUrl).toEqual(`/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${version.id}`);
146 expect(data).toEqual(undefined);
147 expect(options).toEqual(undefined);
148 return {...returnedVersionFields, state: {synchronizationState: SyncStates.UP_TO_DATE, dirty: true}};
151 return EntitlementPoolsActionHelper.saveEntitlementPool(store.dispatch,
153 licenseModelId: LICENSE_MODEL_ID,
155 previousEntitlementPool: null,
156 entitlementPool: EntitlementPoolPostRequest
159 expect(store.getState()).toEqual(expectedStore);
163 it('Update Entitlement Pool', () => {
165 const entitlementPoolsList = buildListFromFactory(EntitlementPoolStoreFactory, 1);
166 deepFreeze(entitlementPoolsList);
168 const store = storeCreator({
169 currentScreen: {...itemPermissionAndProps},
177 deepFreeze(store.getState());
179 const toBeUpdatedEntitlementPoolId = entitlementPoolsList[0].id;
180 const previousEntitlementPoolData = entitlementPoolsList[0];
181 const entitlementPoolUpdateData = EntitlementPoolStoreFactory.build({name: 'ep1_UPDATED', description: 'string_UPDATED', id: toBeUpdatedEntitlementPoolId});
182 deepFreeze(entitlementPoolUpdateData);
184 const entitlementPoolPutRequest = EntitlementPoolPostFactory.build({name: 'ep1_UPDATED', description: 'string_UPDATED'});
185 deepFreeze(entitlementPoolPutRequest);
187 const expectedCurrentScreenProps = {
188 ...itemPermissionAndProps,
190 ...itemPermissionAndProps.itemPermission,
195 let expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolsList', [entitlementPoolUpdateData]);
196 expectedStore = cloneAndSet(expectedStore, 'currentScreen.itemPermission', expectedCurrentScreenProps.itemPermission);
199 mockRest.addHandler('put', ({data, options, baseUrl}) => {
200 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${toBeUpdatedEntitlementPoolId}`);
201 expect(data).toEqual(entitlementPoolPutRequest);
202 expect(options).toEqual(undefined);
203 return {returnCode: 'OK'};
206 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
207 expect(baseUrl).toEqual(`/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${version.id}`);
208 expect(data).toEqual(undefined);
209 expect(options).toEqual(undefined);
210 return {...returnedVersionFields, state: {synchronizationState: SyncStates.UP_TO_DATE, dirty: true}};
213 return EntitlementPoolsActionHelper.saveEntitlementPool(store.dispatch, {
214 licenseModelId: LICENSE_MODEL_ID,
216 previousEntitlementPool: previousEntitlementPoolData,
217 entitlementPool: entitlementPoolUpdateData
219 expect(store.getState()).toEqual(expectedStore);
223 it('Load Limits List', () => {
225 const limitsList = LimitItemFactory.buildList(3);
226 deepFreeze(limitsList);
227 const store = storeCreator();
228 deepFreeze(store.getState());
230 const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList', limitsList);
231 const entitlementPool = EntitlementPoolStoreFactory.build();
232 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
233 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
234 expect(data).toEqual(undefined);
235 expect(options).toEqual(undefined);
236 return {results: limitsList};
239 return EntitlementPoolsActionHelper.fetchLimits(store.dispatch, {licenseModelId: LICENSE_MODEL_ID, version, entitlementPool}).then(() => {
240 expect(store.getState()).toEqual(expectedStore);
244 it('Add Limit', () => {
246 const store = storeCreator({
247 currentScreen: {...itemPermissionAndProps}
249 deepFreeze(store.getState());
251 const limitToAdd = LimitPostFactory.build();
252 let limitFromBE = {...limitToAdd};
253 limitFromBE.metric = getStrValue(limitFromBE.metric);
254 limitFromBE.unit = getStrValue(limitFromBE.unit);
256 deepFreeze(limitToAdd);
257 deepFreeze(limitFromBE);
259 const LimitIdFromResponse = 'ADDED_ID';
260 const limitAddedItem = {...limitToAdd, id: LimitIdFromResponse};
261 deepFreeze(limitAddedItem);
262 const entitlementPool = EntitlementPoolStoreFactory.build();
264 const expectedCurrentScreenProps = {
265 ...itemPermissionAndProps,
267 ...itemPermissionAndProps.itemPermission,
272 let expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList', [limitAddedItem]);
273 expectedStore = cloneAndSet(expectedStore, 'currentScreen.itemPermission', expectedCurrentScreenProps.itemPermission);
275 mockRest.addHandler('post', ({data, options, baseUrl}) => {
276 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
277 expect(data).toEqual(limitFromBE);
278 expect(options).toEqual(undefined);
281 value: LimitIdFromResponse
285 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
286 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
287 expect(data).toEqual(undefined);
288 expect(options).toEqual(undefined);
289 return {results: [limitAddedItem]};
292 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
293 expect(baseUrl).toEqual(`/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${version.id}`);
294 expect(data).toEqual(undefined);
295 expect(options).toEqual(undefined);
296 return {...returnedVersionFields, state: {synchronizationState: SyncStates.UP_TO_DATE, dirty: true}};
299 return EntitlementPoolsActionHelper.submitLimit(store.dispatch,
301 licenseModelId: LICENSE_MODEL_ID,
307 expect(store.getState()).toEqual(expectedStore);
312 it('Delete Limit', () => {
314 const limitsList = LimitItemFactory.buildList(1);
315 deepFreeze(limitsList);
317 const store = storeCreator({
318 currentScreen: {...itemPermissionAndProps},
321 entitlementPoolEditor: {
327 deepFreeze(store.getState());
329 const entitlementPool = EntitlementPoolStoreFactory.build();
331 const expectedCurrentScreenProps = {
332 ...itemPermissionAndProps,
334 ...itemPermissionAndProps.itemPermission,
339 let expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList', []);
340 expectedStore = cloneAndSet(expectedStore, 'currentScreen.itemPermission', expectedCurrentScreenProps.itemPermission);
342 mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
343 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits/${limitsList[0].id}`);
344 expect(data).toEqual(undefined);
345 expect(options).toEqual(undefined);
353 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
354 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
355 expect(data).toEqual(undefined);
356 expect(options).toEqual(undefined);
357 return {results: []};
360 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
361 expect(baseUrl).toEqual(`/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${version.id}`);
362 expect(data).toEqual(undefined);
363 expect(options).toEqual(undefined);
364 return {...returnedVersionFields, state: {synchronizationState: SyncStates.UP_TO_DATE, dirty: true}};
367 return EntitlementPoolsActionHelper.deleteLimit(store.dispatch, {
368 licenseModelId: LICENSE_MODEL_ID,
373 expect(store.getState()).toEqual(expectedStore);
377 it('Update Limit', () => {
379 const limitsList = LimitItemFactory.buildList(1);
380 deepFreeze(limitsList);
381 const entitlementPool = EntitlementPoolStoreFactory.build();
382 const store = storeCreator({
383 currentScreen: {...itemPermissionAndProps},
386 entitlementPoolEditor: {
393 deepFreeze(store.getState());
396 const previousData = limitsList[0];
398 deepFreeze(previousData);
399 const limitId = limitsList[0].id;
401 let updatedLimit = {...previousData, name: 'updatedLimit'};
403 const updatedLimitForPut = {...updatedLimit, id: undefined};
404 updatedLimit.metric = {choice: updatedLimit.metric, other: ''};
405 updatedLimit.unit = {choice: updatedLimit.unit, other: ''};
406 deepFreeze(updatedLimit);
408 const expectedCurrentScreenProps = {
409 ...itemPermissionAndProps,
411 ...itemPermissionAndProps.itemPermission,
416 let expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList', [updatedLimitForPut]);
417 expectedStore = cloneAndSet(expectedStore, 'currentScreen.itemPermission', expectedCurrentScreenProps.itemPermission);
420 mockRest.addHandler('put', ({data, options, baseUrl}) => {
421 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits/${limitId}`);
422 expect(data).toEqual(updatedLimitForPut);
423 expect(options).toEqual(undefined);
424 return {returnCode: 'OK'};
427 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
428 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPool.id}/limits`);
429 expect(data).toEqual(undefined);
430 expect(options).toEqual(undefined);
431 return {results: [updatedLimitForPut]};
434 mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
435 expect(baseUrl).toEqual(`/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${version.id}`);
436 expect(data).toEqual(undefined);
437 expect(options).toEqual(undefined);
438 return {...returnedVersionFields, state: {synchronizationState: SyncStates.UP_TO_DATE, dirty: true}};
441 return EntitlementPoolsActionHelper.submitLimit(store.dispatch,
443 licenseModelId: LICENSE_MODEL_ID,
449 expect(store.getState()).toEqual(expectedStore);