/* * Copyright © 2016-2018 European Support Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.openecomp.activityspec.be.dao.impl; import com.amdocs.zusammen.adaptor.inbound.api.types.item.Element; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementConflict; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ElementInfo; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ItemVersionConflict; import com.amdocs.zusammen.adaptor.inbound.api.types.item.ZusammenElement; import com.amdocs.zusammen.commons.health.data.HealthInfo; import com.amdocs.zusammen.datatypes.Id; import com.amdocs.zusammen.datatypes.SessionContext; import com.amdocs.zusammen.datatypes.item.Action; import com.amdocs.zusammen.datatypes.item.ElementContext; import com.amdocs.zusammen.datatypes.item.Info; import com.amdocs.zusammen.datatypes.item.Item; import com.amdocs.zusammen.datatypes.item.ItemVersion; import com.amdocs.zusammen.datatypes.item.ItemVersionData; import com.amdocs.zusammen.datatypes.item.ItemVersionStatus; import com.amdocs.zusammen.datatypes.item.Resolution; import com.amdocs.zusammen.datatypes.itemversion.ItemVersionRevisions; import com.amdocs.zusammen.datatypes.itemversion.Tag; import java.io.InputStream; import org.openecomp.activityspec.be.dao.impl.ActivitySpecDaoZusammenImpl.InfoPropertyName; import org.openecomp.activityspec.be.datatypes.ActivitySpecData; import org.openecomp.activityspec.be.datatypes.ActivitySpecParameter; import org.openecomp.core.utilities.json.JsonUtil; import org.openecomp.core.zusammen.api.ZusammenAdaptor; import org.openecomp.activityspec.be.dao.types.ActivitySpecEntity; import org.openecomp.activityspec.be.datatypes.ElementType; import org.openecomp.sdc.common.session.SessionContextProviderFactory; import org.openecomp.sdc.versioning.dao.types.Version; import org.openecomp.types.ElementPropertyName; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; import java.util.stream.Collectors; import static org.mockito.Mockito.verify; import static org.openecomp.core.zusammen.api.ZusammenUtil.createSessionContext; public class ActivitySpecZusammenDaoImplTest { private static final Version version = new Version(); private static final String versionId = "1234"; private static final String itemId = "5678"; private static final String tenant = "dox"; ZusammenAdaptorMock zusammenAdaptor; ActivitySpecDaoZusammenImpl daoImpl; ActivitySpecEntity entity; @BeforeMethod public void setUp(){ SessionContextProviderFactory.getInstance().createInterface().create("test", tenant); zusammenAdaptor = new ZusammenAdaptorMock(); daoImpl = new ActivitySpecDaoZusammenImpl(zusammenAdaptor); entity = new ActivitySpecEntity(); entity = new ActivitySpecEntity(); entity.setId(itemId); version.setId(versionId); entity.setVersion(version); entity.setName("activitySpec"); List categoryList = new ArrayList(); categoryList.add("category1"); entity.setCategoryList(categoryList); ActivitySpecParameter inputParams = new ActivitySpecParameter("dbhost", "String"); inputParams.setValue("localhost"); List inputs = new ArrayList<>(); inputs.add(inputParams); entity.setInputParameters(inputs); } @AfterMethod public void tearDown(){ SessionContextProviderFactory.getInstance().createInterface().close(); } @Test public void testCreate() { ItemVersion itemVersionmock = new ItemVersion(); itemVersionmock.setId(new Id()); daoImpl.create(entity); SessionContext context = createSessionContext(); ElementContext elementContext = new ElementContext(entity.getId(), entity.getVersion().getId()); Optional testElementInfo = zusammenAdaptor.getElementInfoByName(context, elementContext,Id.ZERO, ElementType.ACTIVITYSPEC.name() ); Assert.assertTrue(testElementInfo.isPresent()); Assert.assertEquals(testElementInfo.get().getInfo().getName(), ElementType.ACTIVITYSPEC.name()); Assert.assertEquals(testElementInfo.get().getInfo().getProperty( ActivitySpecDaoZusammenImpl.InfoPropertyName.DESCRIPTION.getValue()), entity.getDescription()); Assert.assertEquals(testElementInfo.get().getInfo().getProperty( InfoPropertyName.CATEGORY.getValue()), entity.getCategoryList()); Assert.assertEquals(testElementInfo.get().getInfo().getProperty( ActivitySpecDaoZusammenImpl.InfoPropertyName.NAME.getValue()), entity.getName()); final Optional testElement = zusammenAdaptor .getElement(context, elementContext, zusammenAdaptor.elementId); final InputStream data = testElement.get().getData(); final ActivitySpecData activitySpecData = JsonUtil.json2Object(data, ActivitySpecData.class); Assert.assertEquals(activitySpecData.getInputParameters().get(0).getName(), entity.getInputParameters().get(0).getName()); } @Test public void testGet () { SessionContext context = createSessionContext(); ElementContext elementContext = new ElementContext(entity.getId(), entity.getVersion().getId()); final ActivitySpecEntity retrieved = daoImpl.get(entity); Assert.assertEquals(retrieved.getName(), entity.getName()); Assert.assertEquals(retrieved.getDescription(), entity.getDescription()); Assert.assertEquals(retrieved.getCategoryList(), entity.getCategoryList()); } @Test public void testUpdate () { SessionContext context = createSessionContext(); ElementContext elementContext = new ElementContext(entity.getId(), entity.getVersion().getId()); entity.setDescription("Update AS version1"); daoImpl.update(entity); final ActivitySpecEntity retrieved = daoImpl.get(entity); Assert.assertEquals(retrieved.getName(), entity.getName()); Assert.assertEquals(retrieved.getDescription(), entity.getDescription()); Assert.assertEquals(retrieved.getCategoryList(), entity.getCategoryList()); } private class ZusammenAdaptorMock implements ZusammenAdaptor { private ItemVersion itemVersion; private Map elementMap = new HashMap<>(); String elementId; /* private void setItemVersion(ItemVersion itemVersion) { this.itemVersion = itemVersion; } private void addElementInfo(String key, ElementInfo elementInfo) { elementInfoMap.put(key, elementInfo); } private void addElement(Element element) { elements.add(element); }*/ @Override public Optional getFirstVersion(SessionContext context, Id itemId) { return Optional.ofNullable(itemVersion); } @Override public Collection listPublicVersions(SessionContext context, Id itemId) { return null; } @Override public ItemVersion getPublicVersion(SessionContext context, Id itemId, Id versionId) { return null; } @Override public Optional getElement(SessionContext context, ElementContext elementContext, String elementId) { return Optional.of(elementMap.get(elementId)); } @Override public Optional getElementByName(SessionContext context, ElementContext elementContext, Id parentElementId, String elementName) { //return Optional.empty(); ZusammenElement element = new ZusammenElement(); Info info = new Info(); element.setElementId(Id.ZERO); info.addProperty("name", entity.getName()); info.addProperty("description", entity.getDescription()); info.addProperty("category", entity.getCategoryList()); element.setInfo(info); return Optional.ofNullable(element); } @Override public Collection listElements(SessionContext context, ElementContext elementContext, Id parentElementId) { return null; } @Override public Collection listElementData(SessionContext context, ElementContext elementContext, Id parentElementId) { return elementMap.values(); } @Override public Collection listElementsByName(SessionContext context, ElementContext elementContext, Id parentElementId, String elementName) { return elementMap.values().stream(). filter(element->elementName.equals(element.getInfo().getProperty (ElementPropertyName.elementType.name()))).map(element->{ ElementInfo elementInfo = new ElementInfo(); elementInfo.setId(element.getElementId()); elementInfo.setInfo(element.getInfo()); return elementInfo; }).collect(Collectors.toList()); } @Override public Optional getElementInfoByName(SessionContext context, ElementContext elementContext, Id parentElementId, String elementName) { return elementMap.values().stream(). filter(element -> elementName.equals(element.getInfo().getProperty (ElementPropertyName.elementType.name()))).map(element -> { ElementInfo elementInfo = new ElementInfo(); elementInfo.setId(element.getElementId()); elementInfo.setInfo(element.getInfo()); return elementInfo; }).findAny(); } @Override public Element saveElement(SessionContext context, ElementContext elementContext, ZusammenElement element, String message) { if(element.getAction().equals(Action.CREATE) || element.getAction().equals(Action.UPDATE)){ element.setElementId(new Id(UUID.randomUUID().toString())); } elementMap.put(element.getElementId().getValue(),element); elementId = element.getElementId().getValue(); return element; } @Override public void resolveElementConflict(SessionContext context, ElementContext elementContext, ZusammenElement element, Resolution resolution) { } @Override public Collection checkHealth(SessionContext context) { return null; } @Override public Id createItem(SessionContext context, Info info) { return null; } @Override public void updateItem(SessionContext context, Id itemId, Info info) { } @Override public Id createVersion(SessionContext context, Id itemId, Id baseVersionId, ItemVersionData itemVersionData) { return null; } @Override public void updateVersion(SessionContext context, Id itemId, Id versionId, ItemVersionData itemVersionData) { } @Override public ItemVersion getVersion(SessionContext context, Id itemId, Id versionId) { return null; } @Override public ItemVersionStatus getVersionStatus(SessionContext context, Id itemId, Id versionId) { return null; } @Override public ItemVersionConflict getVersionConflict(SessionContext context, Id itemId, Id versionId) { return null; } @Override public void tagVersion(SessionContext context, Id itemId, Id versionId, Tag tag) { } @Override public void resetVersionHistory(SessionContext context, Id itemId, Id versionId, String changeRef) { } @Override public void publishVersion(SessionContext context, Id itemId, Id versionId, String message) { } @Override public void syncVersion(SessionContext sessionContext, Id itemId, Id versionId) { } @Override public void forceSyncVersion(SessionContext context, Id itemId, Id versionId) { } @Override public Optional getElementInfo(SessionContext context, ElementContext elementContext, Id elementId) { return Optional.empty(); } @Override public String getVersion(SessionContext sessionContext) { return null; } @Override public void revert(SessionContext sessionContext, Id itemId, Id versionId, Id revisionId) { } @Override public ItemVersionRevisions listRevisions(SessionContext sessionContext, Id itemId, Id versionId) { return null; } @Override public Optional getElementConflict(SessionContext context, ElementContext elementContext, Id id) { return Optional.empty(); } @Override public Collection listItems(SessionContext context) { return null; } @Override public Item getItem(SessionContext context, Id itemId) { return null; } @Override public void deleteItem(SessionContext context, Id itemId) { } } }