2 * Copyright © 2016-2018 European Support Limited
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 or implied.
13 * See the License for the specific language governing permissions and
14 * 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';
22 EntitlementPoolStoreFactory,
23 EntitlementPoolPostFactory
24 } from 'test-utils/factories/licenseModel/EntitlementPoolFactories.js';
25 import VersionFactory from 'test-utils/factories/common/VersionFactory.js';
29 } from 'test-utils/factories/licenseModel/LimitFactories.js';
30 import { getStrValue } from 'nfvo-utils/getValue.js';
31 import { SyncStates } from 'sdc-app/common/merge/MergeEditorConstants.js';
32 import CurrentScreenFactory from 'test-utils/factories/common/CurrentScreenFactory.js';
34 describe('Entitlement Pools Module Tests', function() {
35 const LICENSE_MODEL_ID = '555';
36 const version = VersionFactory.build();
37 const itemPermissionAndProps = CurrentScreenFactory.build({}, { version });
38 const returnedVersionFields = {
39 baseId: version.baseId,
40 description: version.description,
43 status: version.status
46 it('Load Entitlement Pools List', () => {
47 const entitlementPoolsList = buildListFromFactory(
48 EntitlementPoolStoreFactory
50 deepFreeze(entitlementPoolsList);
51 const store = storeCreator();
52 deepFreeze(store.getState());
54 const expectedStore = cloneAndSet(
56 'licenseModel.entitlementPool.entitlementPoolsList',
60 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
61 expect(baseUrl).toEqual(
62 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
66 expect(data).toEqual(undefined);
67 expect(options).toEqual(undefined);
68 return { results: entitlementPoolsList };
71 return EntitlementPoolsActionHelper.fetchEntitlementPoolsList(
73 { licenseModelId: LICENSE_MODEL_ID, version }
75 expect(store.getState()).toEqual(expectedStore);
79 it('Delete Entitlement Pool', () => {
80 const entitlementPoolsList = buildListFromFactory(
81 EntitlementPoolStoreFactory,
84 deepFreeze(entitlementPoolsList);
85 const store = storeCreator({
86 currentScreen: { ...itemPermissionAndProps },
93 deepFreeze(store.getState());
95 const expectedCurrentScreenProps = {
96 ...itemPermissionAndProps,
98 ...itemPermissionAndProps.itemPermission,
103 let expectedStore = cloneAndSet(
105 'licenseModel.entitlementPool.entitlementPoolsList',
108 expectedStore = cloneAndSet(
110 'currentScreen.itemPermission',
111 expectedCurrentScreenProps.itemPermission
114 mockRest.addHandler('destroy', ({ data, options, baseUrl }) => {
115 expect(baseUrl).toEqual(
116 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
118 }/entitlement-pools/${entitlementPoolsList[0].id}`
120 expect(data).toEqual(undefined);
121 expect(options).toEqual(undefined);
129 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
130 expect(baseUrl).toEqual(
131 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${
135 expect(data).toEqual(undefined);
136 expect(options).toEqual(undefined);
138 ...returnedVersionFields,
140 synchronizationState: SyncStates.UP_TO_DATE,
146 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
147 expect(baseUrl).toEqual(
148 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}`
150 expect(data).toEqual(undefined);
151 expect(options).toEqual(undefined);
153 ...returnedVersionFields
157 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
158 expect(baseUrl).toEqual(
159 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
163 expect(data).toEqual(undefined);
164 expect(options).toEqual(undefined);
165 return { results: [] };
168 return EntitlementPoolsActionHelper.deleteEntitlementPool(
171 licenseModelId: LICENSE_MODEL_ID,
173 entitlementPoolId: entitlementPoolsList[0].id
176 expect(store.getState()).toEqual(expectedStore);
180 it('Add Entitlement Pool', () => {
181 const store = storeCreator({
182 currentScreen: { ...itemPermissionAndProps }
184 deepFreeze(store.getState());
186 const EntitlementPoolPostRequest = EntitlementPoolPostFactory.build();
188 deepFreeze(EntitlementPoolPostRequest);
190 const entitlementPoolIdFromResponse = 'ADDED_ID';
191 const entitlementPoolAfterAdd = EntitlementPoolStoreFactory.build({
192 id: entitlementPoolIdFromResponse
194 deepFreeze(entitlementPoolAfterAdd);
196 const expectedCurrentScreenProps = {
197 ...itemPermissionAndProps,
199 ...itemPermissionAndProps.itemPermission,
204 let expectedStore = cloneAndSet(
206 'licenseModel.entitlementPool.entitlementPoolsList',
207 [entitlementPoolAfterAdd]
209 expectedStore = cloneAndSet(
211 'currentScreen.itemPermission',
212 expectedCurrentScreenProps.itemPermission
215 mockRest.addHandler('post', ({ data, options, baseUrl }) => {
216 expect(baseUrl).toEqual(
217 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
221 expect(data).toEqual(EntitlementPoolPostRequest);
222 expect(options).toEqual(undefined);
225 value: entitlementPoolIdFromResponse
229 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
230 expect(baseUrl).toEqual(
231 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${
235 expect(data).toEqual(undefined);
236 expect(options).toEqual(undefined);
238 ...returnedVersionFields,
240 synchronizationState: SyncStates.UP_TO_DATE,
246 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
247 expect(baseUrl).toEqual(
248 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}`
250 expect(data).toEqual(undefined);
251 expect(options).toEqual(undefined);
253 ...returnedVersionFields
257 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
258 expect(baseUrl).toEqual(
259 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
263 expect(data).toEqual(undefined);
264 expect(options).toEqual(undefined);
265 return { results: [entitlementPoolAfterAdd] };
268 return EntitlementPoolsActionHelper.saveEntitlementPool(
271 licenseModelId: LICENSE_MODEL_ID,
273 previousEntitlementPool: null,
274 entitlementPool: EntitlementPoolPostRequest
277 expect(store.getState()).toEqual(expectedStore);
281 it('Update Entitlement Pool', () => {
282 const entitlementPoolsList = buildListFromFactory(
283 EntitlementPoolStoreFactory,
286 deepFreeze(entitlementPoolsList);
288 const store = storeCreator({
289 currentScreen: { ...itemPermissionAndProps },
297 deepFreeze(store.getState());
299 const toBeUpdatedEntitlementPoolId = entitlementPoolsList[0].id;
300 const previousEntitlementPoolData = entitlementPoolsList[0];
301 const entitlementPoolUpdateData = EntitlementPoolStoreFactory.build({
303 description: 'string_UPDATED',
304 id: toBeUpdatedEntitlementPoolId
306 deepFreeze(entitlementPoolUpdateData);
308 const entitlementPoolPutRequest = EntitlementPoolPostFactory.build({
310 description: 'string_UPDATED'
312 deepFreeze(entitlementPoolPutRequest);
314 const expectedCurrentScreenProps = {
315 ...itemPermissionAndProps,
317 ...itemPermissionAndProps.itemPermission,
322 let expectedStore = cloneAndSet(
324 'licenseModel.entitlementPool.entitlementPoolsList',
325 [entitlementPoolUpdateData]
327 expectedStore = cloneAndSet(
329 'currentScreen.itemPermission',
330 expectedCurrentScreenProps.itemPermission
333 mockRest.addHandler('put', ({ data, options, baseUrl }) => {
334 expect(baseUrl).toEqual(
335 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
337 }/entitlement-pools/${toBeUpdatedEntitlementPoolId}`
339 expect(data).toEqual(entitlementPoolPutRequest);
340 expect(options).toEqual(undefined);
341 return { returnCode: 'OK' };
344 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
345 expect(baseUrl).toEqual(
346 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${
350 expect(data).toEqual(undefined);
351 expect(options).toEqual(undefined);
353 ...returnedVersionFields,
355 synchronizationState: SyncStates.UP_TO_DATE,
361 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
362 expect(baseUrl).toEqual(
363 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}`
365 expect(data).toEqual(undefined);
366 expect(options).toEqual(undefined);
368 ...returnedVersionFields
372 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
373 expect(baseUrl).toEqual(
374 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
378 expect(data).toEqual(undefined);
379 expect(options).toEqual(undefined);
380 return { results: [entitlementPoolUpdateData] };
383 return EntitlementPoolsActionHelper.saveEntitlementPool(
386 licenseModelId: LICENSE_MODEL_ID,
388 previousEntitlementPool: previousEntitlementPoolData,
389 entitlementPool: entitlementPoolUpdateData
392 expect(store.getState()).toEqual(expectedStore);
396 it('Load Limits List', () => {
397 const limitsList = LimitItemFactory.buildList(3);
398 deepFreeze(limitsList);
399 const store = storeCreator();
400 deepFreeze(store.getState());
402 const expectedStore = cloneAndSet(
404 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList',
407 const entitlementPool = EntitlementPoolStoreFactory.build();
408 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
409 expect(baseUrl).toEqual(
410 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
412 }/entitlement-pools/${entitlementPool.id}/limits`
414 expect(data).toEqual(undefined);
415 expect(options).toEqual(undefined);
416 return { results: limitsList };
419 return EntitlementPoolsActionHelper.fetchLimits(store.dispatch, {
420 licenseModelId: LICENSE_MODEL_ID,
424 expect(store.getState()).toEqual(expectedStore);
428 it('Add Limit', () => {
429 const store = storeCreator({
430 currentScreen: { ...itemPermissionAndProps }
432 deepFreeze(store.getState());
434 const limitToAdd = LimitPostFactory.build();
435 let limitFromBE = { ...limitToAdd };
436 limitFromBE.metric = getStrValue(limitFromBE.metric);
437 limitFromBE.unit = getStrValue(limitFromBE.unit);
439 deepFreeze(limitToAdd);
440 deepFreeze(limitFromBE);
442 const LimitIdFromResponse = 'ADDED_ID';
443 const limitAddedItem = { ...limitToAdd, id: LimitIdFromResponse };
444 deepFreeze(limitAddedItem);
445 const entitlementPool = EntitlementPoolStoreFactory.build();
447 const expectedCurrentScreenProps = {
448 ...itemPermissionAndProps,
450 ...itemPermissionAndProps.itemPermission,
455 let expectedStore = cloneAndSet(
457 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList',
460 expectedStore = cloneAndSet(
462 'currentScreen.itemPermission',
463 expectedCurrentScreenProps.itemPermission
466 mockRest.addHandler('post', ({ data, options, baseUrl }) => {
467 expect(baseUrl).toEqual(
468 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
470 }/entitlement-pools/${entitlementPool.id}/limits`
472 expect(data).toEqual(limitFromBE);
473 expect(options).toEqual(undefined);
476 value: LimitIdFromResponse
480 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
481 expect(baseUrl).toEqual(
482 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
484 }/entitlement-pools/${entitlementPool.id}/limits`
486 expect(data).toEqual(undefined);
487 expect(options).toEqual(undefined);
488 return { results: [limitAddedItem] };
491 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
492 expect(baseUrl).toEqual(
493 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${
497 expect(data).toEqual(undefined);
498 expect(options).toEqual(undefined);
500 ...returnedVersionFields,
502 synchronizationState: SyncStates.UP_TO_DATE,
508 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
509 expect(baseUrl).toEqual(
510 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}`
512 expect(data).toEqual(undefined);
513 expect(options).toEqual(undefined);
515 ...returnedVersionFields
519 return EntitlementPoolsActionHelper.submitLimit(store.dispatch, {
520 licenseModelId: LICENSE_MODEL_ID,
525 expect(store.getState()).toEqual(expectedStore);
529 it('Delete Limit', () => {
530 const limitsList = LimitItemFactory.buildList(1);
531 deepFreeze(limitsList);
533 const store = storeCreator({
534 currentScreen: { ...itemPermissionAndProps },
537 entitlementPoolEditor: {
543 deepFreeze(store.getState());
545 const entitlementPool = EntitlementPoolStoreFactory.build();
547 const expectedCurrentScreenProps = {
548 ...itemPermissionAndProps,
550 ...itemPermissionAndProps.itemPermission,
555 let expectedStore = cloneAndSet(
557 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList',
560 expectedStore = cloneAndSet(
562 'currentScreen.itemPermission',
563 expectedCurrentScreenProps.itemPermission
566 mockRest.addHandler('destroy', ({ data, options, baseUrl }) => {
567 expect(baseUrl).toEqual(
568 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
570 }/entitlement-pools/${entitlementPool.id}/limits/${
574 expect(data).toEqual(undefined);
575 expect(options).toEqual(undefined);
583 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
584 expect(baseUrl).toEqual(
585 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
587 }/entitlement-pools/${entitlementPool.id}/limits`
589 expect(data).toEqual(undefined);
590 expect(options).toEqual(undefined);
591 return { results: [] };
594 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
595 expect(baseUrl).toEqual(
596 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${
600 expect(data).toEqual(undefined);
601 expect(options).toEqual(undefined);
603 ...returnedVersionFields,
605 synchronizationState: SyncStates.UP_TO_DATE,
611 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
612 expect(baseUrl).toEqual(
613 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}`
615 expect(data).toEqual(undefined);
616 expect(options).toEqual(undefined);
618 ...returnedVersionFields
622 return EntitlementPoolsActionHelper.deleteLimit(store.dispatch, {
623 licenseModelId: LICENSE_MODEL_ID,
628 expect(store.getState()).toEqual(expectedStore);
632 it('Update Limit', () => {
633 const limitsList = LimitItemFactory.buildList(1);
634 deepFreeze(limitsList);
635 const entitlementPool = EntitlementPoolStoreFactory.build();
636 const store = storeCreator({
637 currentScreen: { ...itemPermissionAndProps },
640 entitlementPoolEditor: {
647 deepFreeze(store.getState());
649 const previousData = limitsList[0];
651 deepFreeze(previousData);
652 const limitId = limitsList[0].id;
654 let updatedLimit = { ...previousData, name: 'updatedLimit' };
656 const updatedLimitForPut = { ...updatedLimit, id: undefined };
657 updatedLimit.metric = { choice: updatedLimit.metric, other: '' };
658 updatedLimit.unit = { choice: updatedLimit.unit, other: '' };
659 deepFreeze(updatedLimit);
661 const expectedCurrentScreenProps = {
662 ...itemPermissionAndProps,
664 ...itemPermissionAndProps.itemPermission,
669 let expectedStore = cloneAndSet(
671 'licenseModel.entitlementPool.entitlementPoolEditor.limitsList',
674 expectedStore = cloneAndSet(
676 'currentScreen.itemPermission',
677 expectedCurrentScreenProps.itemPermission
680 mockRest.addHandler('put', ({ data, options, baseUrl }) => {
681 expect(baseUrl).toEqual(
682 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
684 }/entitlement-pools/${entitlementPool.id}/limits/${limitId}`
686 expect(data).toEqual(updatedLimitForPut);
687 expect(options).toEqual(undefined);
688 return { returnCode: 'OK' };
691 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
692 expect(baseUrl).toEqual(
693 `/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${
695 }/entitlement-pools/${entitlementPool.id}/limits`
697 expect(data).toEqual(undefined);
698 expect(options).toEqual(undefined);
699 return { results: [updatedLimitForPut] };
702 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
703 expect(baseUrl).toEqual(
704 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}/versions/${
708 expect(data).toEqual(undefined);
709 expect(options).toEqual(undefined);
711 ...returnedVersionFields,
713 synchronizationState: SyncStates.UP_TO_DATE,
719 mockRest.addHandler('fetch', ({ data, options, baseUrl }) => {
720 expect(baseUrl).toEqual(
721 `/onboarding-api/v1.0/items/${LICENSE_MODEL_ID}`
723 expect(data).toEqual(undefined);
724 expect(options).toEqual(undefined);
726 ...returnedVersionFields
730 return EntitlementPoolsActionHelper.submitLimit(store.dispatch, {
731 licenseModelId: LICENSE_MODEL_ID,
736 expect(store.getState()).toEqual(expectedStore);