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