Improve testing stability
[sdc.git] / openecomp-be / lib / openecomp-sdc-versioning-lib / openecomp-sdc-versioning-core / src / test / java / org / openecomp / sdc / versioning / impl / AsdcItemManagerImplTest.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
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 or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.sdc.versioning.impl;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertNull;
21 import static org.junit.Assert.assertTrue;
22 import static org.mockito.Matchers.any;
23 import static org.mockito.Mockito.doReturn;
24 import static org.mockito.Mockito.never;
25 import static org.mockito.Mockito.verify;
26
27 import java.util.Collection;
28 import java.util.List;
29 import java.util.stream.Collectors;
30 import java.util.stream.Stream;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.mockito.InjectMocks;
34 import org.mockito.Mock;
35 import org.mockito.MockitoAnnotations;
36 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
37 import org.openecomp.sdc.itempermissions.PermissionsServices;
38 import org.openecomp.sdc.notification.services.SubscriptionService;
39 import org.openecomp.sdc.versioning.dao.ItemDao;
40 import org.openecomp.sdc.versioning.dao.types.VersionStatus;
41 import org.openecomp.sdc.versioning.types.Item;
42
43 public class AsdcItemManagerImplTest {
44
45   private static final String USER = "user1";
46   private static final String ITEM_ID = "item1";
47   private static final String ITEM_NAME = "item 1 name";
48   private static final String ITEM_TYPE_A = "A";
49   private static final String ITEM_TYPE_B = "B";
50   private static final String tenant = "dox";
51   @Mock
52   private ItemDao itemDao;
53   @Mock
54   private PermissionsServices permissionsServices;
55   @Mock
56   private SubscriptionService subscriptionService;
57   @InjectMocks
58   private AsdcItemManagerImpl itemManager;
59
60   @Before
61   public void setUp() throws Exception {
62     MockitoAnnotations.openMocks(this);
63   }
64
65   @Test
66   public void testList() throws Exception {
67     List<Item> returnedItems = Stream.of(createItem(ITEM_ID, ITEM_NAME, ITEM_TYPE_A),
68         createItem("item2", "item2 name", ITEM_TYPE_B),
69         createItem("item3", "item3 name", ITEM_TYPE_B),
70         createItem("item4", "item4 name", ITEM_TYPE_A)).collect(Collectors.toList());
71     doReturn(returnedItems).when(itemDao).list();
72
73     Collection<Item> items = itemManager.list(item -> ITEM_TYPE_B.equals(item.getType()));
74
75     assertEquals(items.size(), 2);
76     assertTrue(
77         items.stream().anyMatch(item -> returnedItems.get(1).getName().equals(item.getName())));
78     assertTrue(
79         items.stream().anyMatch(item -> returnedItems.get(2).getName().equals(item.getName())));
80   }
81
82   @Test
83   public void testGetNotExisting() throws Exception {
84     Item item = itemManager.get(ITEM_ID);
85     assertNull(item);
86   }
87
88   @Test
89   public void testGet() throws Exception {
90     Item toBeReturned = createItem(ITEM_ID, ITEM_NAME, ITEM_TYPE_A);
91     doReturn(toBeReturned).when(itemDao).get(any(Item.class));
92
93     Item item = itemManager.get(ITEM_ID);
94
95     assertItemEquals(item, toBeReturned);
96   }
97
98   @Test
99   public void testCreate() throws Exception {
100     SessionContextProviderFactory.getInstance().createInterface().create(USER, tenant);
101
102     Item returnedItem = createItem(ITEM_ID, ITEM_NAME, ITEM_TYPE_A);
103     doReturn(returnedItem).when(itemDao).create(any(Item.class));
104
105     Item inputItem = createItem(null, returnedItem.getName(), returnedItem.getType());
106     Item item = itemManager.create(inputItem);
107
108     assertItemEquals(item, returnedItem);
109     verify(permissionsServices).execute(ITEM_ID, USER, "Create_Item");
110     verify(subscriptionService).subscribe(USER, ITEM_ID);
111   }
112
113   @Test
114   public void testUpdateNotExistingVersionStatus() throws Exception {
115     itemManager.updateVersionStatus(ITEM_ID, VersionStatus.Certified, VersionStatus.Draft);
116
117     verify(itemDao, never()).update(any(Item.class));
118   }
119
120   @Test
121   public void testUpdateVersionStatusWhenNone() throws Exception {
122     Item item = new Item();
123     item.setId(ITEM_ID);
124     doReturn(item).when(itemDao).get(any(Item.class));
125
126     itemManager.updateVersionStatus(ITEM_ID, VersionStatus.Certified, VersionStatus.Draft);
127
128     verify(itemDao).update(item);
129     assertEquals(item.getVersionStatusCounters().get(VersionStatus.Certified).intValue(), 1);
130     assertNull(item.getVersionStatusCounters().get(VersionStatus.Draft));
131   }
132
133   @Test
134   public void testUpdateVersionStatusAddFirst() throws Exception {
135     Item item = new Item();
136     item.setId(ITEM_ID);
137     doReturn(item).when(itemDao).get(any(Item.class));
138
139     itemManager.updateVersionStatus(ITEM_ID, VersionStatus.Draft, null);
140
141     verify(itemDao).update(item);
142     assertEquals(item.getVersionStatusCounters().size(), 1);
143     assertEquals(item.getVersionStatusCounters().get(VersionStatus.Draft).intValue(), 1);
144   }
145
146   @Test
147   public void testUpdateVersionStatus() throws Exception {
148     Item item = new Item();
149     item.setId(ITEM_ID);
150     item.getVersionStatusCounters().put(VersionStatus.Certified, 2);
151     item.getVersionStatusCounters().put(VersionStatus.Draft, 3);
152     doReturn(item).when(itemDao).get(any(Item.class));
153
154     itemManager.updateVersionStatus(ITEM_ID, VersionStatus.Certified, VersionStatus.Draft);
155
156     verify(itemDao).update(item);
157     assertEquals(item.getVersionStatusCounters().size(), 2);
158     assertEquals(item.getVersionStatusCounters().get(VersionStatus.Certified).intValue(), 3);
159     assertEquals(item.getVersionStatusCounters().get(VersionStatus.Draft).intValue(), 2);
160   }
161
162   @Test
163   public void testUpdateVersionStatusRemoveLast() throws Exception {
164     Item item = new Item();
165     item.setId(ITEM_ID);
166     item.getVersionStatusCounters().put(VersionStatus.Certified, 2);
167     item.getVersionStatusCounters().put(VersionStatus.Draft, 1);
168     doReturn(item).when(itemDao).get(any(Item.class));
169
170     itemManager.updateVersionStatus(ITEM_ID, VersionStatus.Certified, VersionStatus.Draft);
171
172     verify(itemDao).update(item);
173     assertEquals(item.getVersionStatusCounters().size(), 1);
174     assertEquals(item.getVersionStatusCounters().get(VersionStatus.Certified).intValue(), 3);
175     assertNull(item.getVersionStatusCounters().get(VersionStatus.Draft));
176   }
177
178   private Item createItem(String id, String name, String type) {
179     Item item = new Item();
180     item.setId(id);
181     item.setName(name);
182     item.setType(type);
183     return item;
184   }
185
186   private void assertItemEquals(Item actual, Item expected) {
187     assertEquals(actual.getId(), expected.getId());
188     assertEquals(actual.getName(), expected.getName());
189     assertEquals(actual.getType(), expected.getType());
190   }
191 }