blob: 40b60da77f6b749bd487c8fbc0ecd083d91180ce [file] [log] [blame]
AviZi280f8012017-06-09 02:39:56 +03001/*!
Michael Landoefa037d2017-02-19 12:57:33 +02002 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
AviZi280f8012017-06-09 02:39:56 +03003 *
Michael Landoefa037d2017-02-19 12:57:33 +02004 * 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
AviZi280f8012017-06-09 02:39:56 +03007 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
Michael Landoefa037d2017-02-19 12:57:33 +020010 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
AviZi280f8012017-06-09 02:39:56 +030012 * 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.
Michael Landoefa037d2017-02-19 12:57:33 +020015 */
Michael Landoefa037d2017-02-19 12:57:33 +020016import deepFreeze from 'deep-freeze';
AviZi280f8012017-06-09 02:39:56 +030017import pickBy from 'lodash/pickBy';
Michael Landoefa037d2017-02-19 12:57:33 +020018import mockRest from 'test-utils/MockRest.js';
AviZi280f8012017-06-09 02:39:56 +030019import {cloneAndSet, buildListFromFactory} from 'test-utils/Util.js';
Michael Landoefa037d2017-02-19 12:57:33 +020020import {storeCreator} from 'sdc-app/AppStore.js';
21import LicenseAgreementActionHelper from 'sdc-app/onboarding/licenseModel/licenseAgreement/LicenseAgreementActionHelper.js';
22
AviZi280f8012017-06-09 02:39:56 +030023import { LicenseAgreementStoreFactory, LicenseAgreementDispatchFactory, LicenseAgreementPostFactory, LicenseAgreementPutFactory } from 'test-utils/factories/licenseModel/LicenseAgreementFactories.js';
24import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
Michael Landoefa037d2017-02-19 12:57:33 +020025
26describe('License Agreement Module Tests', () => {
27
28 const LICENSE_MODEL_ID = '777';
AviZi280f8012017-06-09 02:39:56 +030029 const version = VersionControllerUtilsFactory.build().version;
Michael Landoefa037d2017-02-19 12:57:33 +020030
31 it('Load License Agreement List', () => {
AviZi280f8012017-06-09 02:39:56 +030032 const licenseAgreementList = buildListFromFactory(LicenseAgreementStoreFactory);
33
Michael Landoefa037d2017-02-19 12:57:33 +020034 const store = storeCreator();
35 deepFreeze(store.getState());
36
37 const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseAgreement.licenseAgreementList', licenseAgreementList);
38
39 mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
AviZi280f8012017-06-09 02:39:56 +030040 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements`);
41 expect(data).toEqual(undefined);
42 expect(options).toEqual(undefined);
Michael Landoefa037d2017-02-19 12:57:33 +020043 return {results: licenseAgreementList};
44 });
AviZi280f8012017-06-09 02:39:56 +030045 return LicenseAgreementActionHelper.fetchLicenseAgreementList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID, version}).then(() => {
46 expect(store.getState()).toEqual(expectedStore);
Michael Landoefa037d2017-02-19 12:57:33 +020047 });
48 });
49
50 it('Delete License Agreement', () => {
AviZi280f8012017-06-09 02:39:56 +030051 const licenseAgreementList = buildListFromFactory(LicenseAgreementStoreFactory, 1);
Michael Landoefa037d2017-02-19 12:57:33 +020052 const store = storeCreator({
53 licenseModel: {
54 licenseAgreement: {
55 licenseAgreementList
56 }
57 }
58 });
59 deepFreeze(store.getState());
AviZi280f8012017-06-09 02:39:56 +030060 const toBeDeletedLicenseAgreementId = licenseAgreementList[0].id;
Michael Landoefa037d2017-02-19 12:57:33 +020061 const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseAgreement.licenseAgreementList', []);
62
63 mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
AviZi280f8012017-06-09 02:39:56 +030064 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements/${toBeDeletedLicenseAgreementId}`);
65 expect(data).toEqual(undefined);
66 expect(options).toEqual(undefined);
Michael Landoefa037d2017-02-19 12:57:33 +020067 });
68
69 return LicenseAgreementActionHelper.deleteLicenseAgreement(store.dispatch, {
70 licenseAgreementId: toBeDeletedLicenseAgreementId,
AviZi280f8012017-06-09 02:39:56 +030071 licenseModelId: LICENSE_MODEL_ID,
72 version
Michael Landoefa037d2017-02-19 12:57:33 +020073 }).then(() => {
AviZi280f8012017-06-09 02:39:56 +030074 expect(store.getState()).toEqual(expectedStore);
Michael Landoefa037d2017-02-19 12:57:33 +020075 });
76 });
77
78 it('Add License Agreement', () => {
79 const store = storeCreator();
80 deepFreeze(store.getState());
Michael Landoefa037d2017-02-19 12:57:33 +020081
AviZi280f8012017-06-09 02:39:56 +030082 const licenseAgreementToAdd = LicenseAgreementDispatchFactory.build();
83
84 const LicenseAgreementPostRequest = LicenseAgreementPostFactory.build(
85 pickBy(licenseAgreementToAdd, (val, key) => key !== 'featureGroupsIds')
86 );
87
88 deepFreeze(LicenseAgreementPostRequest);
Michael Landoefa037d2017-02-19 12:57:33 +020089
90 const licenseAgreementIdFromResponse = 'ADDED_ID';
AviZi280f8012017-06-09 02:39:56 +030091 const licenseAgreementAfterAdd = LicenseAgreementStoreFactory.build({
Michael Landoefa037d2017-02-19 12:57:33 +020092 ...licenseAgreementToAdd,
93 id: licenseAgreementIdFromResponse
AviZi280f8012017-06-09 02:39:56 +030094 });
Michael Landoefa037d2017-02-19 12:57:33 +020095 deepFreeze(licenseAgreementAfterAdd);
ilanapcb1d4832017-09-27 11:41:19 +030096 const licenseAgreementList = [licenseAgreementAfterAdd];
Michael Landoefa037d2017-02-19 12:57:33 +020097
ilanapcb1d4832017-09-27 11:41:19 +030098 const featureGroupsList = licenseAgreementList.featureGroupsIds;
Michael Landoefa037d2017-02-19 12:57:33 +020099 const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseAgreement.licenseAgreementList', [licenseAgreementAfterAdd]);
100
AviZi280f8012017-06-09 02:39:56 +0300101 mockRest.addHandler('post', ({options, data, baseUrl}) => {
102 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements`);
103 expect(data).toEqual(LicenseAgreementPostRequest);
104 expect(options).toEqual(undefined);
Michael Landoefa037d2017-02-19 12:57:33 +0200105 return {
106 value: licenseAgreementIdFromResponse
107 };
108 });
ilanapcb1d4832017-09-27 11:41:19 +0300109 mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
110 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements`);
111 expect(data).toEqual(undefined);
112 expect(options).toEqual(undefined);
113 return {results: licenseAgreementList};
114 });
115 mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
116 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/feature-groups`);
117 expect(data).toEqual(undefined);
118 expect(options).toEqual(undefined);
119 return {results: featureGroupsList};
120 });
Michael Landoefa037d2017-02-19 12:57:33 +0200121 return LicenseAgreementActionHelper.saveLicenseAgreement(store.dispatch, {
122 licenseAgreement: licenseAgreementToAdd,
AviZi280f8012017-06-09 02:39:56 +0300123 licenseModelId: LICENSE_MODEL_ID,
124 version
Michael Landoefa037d2017-02-19 12:57:33 +0200125 }).then(() => {
AviZi280f8012017-06-09 02:39:56 +0300126 expect(store.getState()).toEqual(expectedStore);
Michael Landoefa037d2017-02-19 12:57:33 +0200127 });
128 });
129
130 it('Update License Agreement', () => {
AviZi280f8012017-06-09 02:39:56 +0300131 const licenseAgreementList = buildListFromFactory(LicenseAgreementStoreFactory, 1, {featureGroupsIds: ['77']});
Michael Landoefa037d2017-02-19 12:57:33 +0200132 const store = storeCreator({
133 licenseModel: {
134 licenseAgreement: {
135 licenseAgreementList
136 }
137 }
138 });
139 deepFreeze(store.getState());
140
Michael Landoefa037d2017-02-19 12:57:33 +0200141 const previousLicenseAgreementData = licenseAgreementList[0];
AviZi280f8012017-06-09 02:39:56 +0300142 const toBeUpdatedLicenseAgreementId = previousLicenseAgreementData.id;
143 const oldFeatureGroupIds = previousLicenseAgreementData.featureGroupsIds;
Michael Landoefa037d2017-02-19 12:57:33 +0200144
AviZi280f8012017-06-09 02:39:56 +0300145 const newFeatureGroupsIds = ['update_id_1', 'update_id_2'];
146
147 const licenseAgreementUpdateData = LicenseAgreementStoreFactory.build({
148 id: toBeUpdatedLicenseAgreementId,
149 featureGroupsIds: newFeatureGroupsIds
150 });
Michael Landoefa037d2017-02-19 12:57:33 +0200151 deepFreeze(licenseAgreementUpdateData);
152
AviZi280f8012017-06-09 02:39:56 +0300153 const LicenseAgreementPutFactoryRequest = LicenseAgreementPutFactory.build({
154 addedFeatureGroupsIds: newFeatureGroupsIds,
155 removedFeatureGroupsIds: oldFeatureGroupIds
156 });
157
158 deepFreeze(LicenseAgreementPutFactoryRequest);
Michael Landoefa037d2017-02-19 12:57:33 +0200159
160 const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseAgreement.licenseAgreementList', [licenseAgreementUpdateData]);
161
AviZi280f8012017-06-09 02:39:56 +0300162 mockRest.addHandler('put', ({data, options, baseUrl}) => {
163 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements/${toBeUpdatedLicenseAgreementId}`);
164 expect(data).toEqual(LicenseAgreementPutFactoryRequest);
165 expect(options).toEqual(undefined);
Michael Landoefa037d2017-02-19 12:57:33 +0200166 });
ilanapcb1d4832017-09-27 11:41:19 +0300167 mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
168 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements`);
169 expect(data).toEqual(undefined);
170 expect(options).toEqual(undefined);
171 return {results: [licenseAgreementUpdateData]};
172 });
173 mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
174 expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/feature-groups`);
175 expect(data).toEqual(undefined);
176 expect(options).toEqual(undefined);
177 return {results: newFeatureGroupsIds};
178 });
Michael Landoefa037d2017-02-19 12:57:33 +0200179 return LicenseAgreementActionHelper.saveLicenseAgreement(store.dispatch, {
180 licenseModelId: LICENSE_MODEL_ID,
AviZi280f8012017-06-09 02:39:56 +0300181 version,
Michael Landoefa037d2017-02-19 12:57:33 +0200182 previousLicenseAgreement: previousLicenseAgreementData,
183 licenseAgreement: licenseAgreementUpdateData
184 }).then(() => {
AviZi280f8012017-06-09 02:39:56 +0300185 expect(store.getState()).toEqual(expectedStore);
Michael Landoefa037d2017-02-19 12:57:33 +0200186 });
187 });
188
189});