// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.mdm.repository.utils;
import static org.junit.Assert.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import static org.powermock.api.support.membermodification.MemberMatcher.*;
import static org.powermock.api.support.membermodification.MemberModifier.stub;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ResourceBundle;
import org.apache.commons.lang.math.RandomUtils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.ui.IEditorReference;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.rule.PowerMockRule;
import org.powermock.reflect.Whitebox;
import org.talend.commons.exception.PersistenceException;
import org.talend.commons.i18n.internal.DefaultMessagesImpl;
import org.talend.commons.runtime.model.repository.ERepositoryStatus;
import org.talend.commons.utils.VersionUtils;
import org.talend.commons.utils.data.container.RootContainer;
import org.talend.commons.utils.workbench.resources.ResourceUtils;
import org.talend.core.context.RepositoryContext;
import org.talend.core.model.general.Project;
import org.talend.core.model.properties.FolderType;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.ItemState;
import org.talend.core.model.properties.PropertiesFactory;
import org.talend.core.model.properties.Property;
import org.talend.core.model.properties.User;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.Folder;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.model.repository.RepositoryNodeProviderRegistryReader;
import org.talend.core.model.repository.ResourceModelUtils;
import org.talend.core.repository.model.IRepositoryFactory;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.mdm.repository.core.IRepositoryNodeConfiguration;
import org.talend.mdm.repository.core.IRepositoryNodeLabelProvider;
import org.talend.mdm.repository.core.IRepositoryNodeResourceProvider;
import org.talend.mdm.repository.core.impl.recyclebin.RecycleBinNodeConfiguration;
import org.talend.mdm.repository.core.service.ContainerCacheService;
import org.talend.mdm.repository.core.service.IInteractiveHandler;
import org.talend.mdm.repository.core.service.InteractiveService;
import org.talend.mdm.repository.core.service.RepositoryQueryService;
import org.talend.mdm.repository.extension.RepositoryNodeConfigurationManager;
import org.talend.mdm.repository.model.mdmproperties.ContainerItem;
import org.talend.mdm.repository.models.FolderRepositoryObject;
import org.talend.mdm.workbench.serverexplorer.core.ServerDefService;
import org.talend.repository.ProjectManager;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.IRepositoryNode.ENodeType;
import org.talend.repository.model.IRepositoryNode.EProperties;
import org.talend.repository.model.RepositoryNode;
import com.amalto.workbench.exadapter.ExAdapterManager;
import com.amalto.workbench.image.ImageCache;
// @RunWith(PowerMockRunner.class)
@PrepareForTest({ RepositoryResourceUtil.class, ImageDescriptor.class, JFaceResources.class, DefaultMessagesImpl.class,
ImageCache.class, ItemState.class, ProjectManager.class, CoreRuntimePlugin.class, InteractiveService.class,
ResourceModelUtils.class, FolderType.class, RepositoryNodeConfigurationManager.class, ResourceUtils.class,
ContainerCacheService.class, RepositoryQueryService.class, RepositoryNodeProviderRegistryReader.class,
ServerDefService.class, ERepositoryStatus.class, ERepositoryObjectType.class, ExAdapterManager.class,
ProxyRepositoryFactory.class,
})
public class RepositoryResourceUtilTest {
@Rule
public PowerMockRule powerMockRule = new PowerMockRule();
class StubFolderRepositoryObject extends FolderRepositoryObject {
public StubFolderRepositoryObject(Property prop) {
super(prop);
}
@Override
public List<IRepositoryViewObject> getChildren() {
return super.getChildren();
}
}
@Before
public void setUp() throws Exception {
ResourceBundle rb = mock(ResourceBundle.class);
stub(method(ResourceBundle.class, "getBundle", String.class)).toReturn(rb); //$NON-NLS-1$
PowerMockito.mockStatic(JFaceResources.class);
ImageRegistry registry = mock(ImageRegistry.class);
when(JFaceResources.getImageRegistry()).thenReturn(registry);
PowerMockito.mockStatic(DefaultMessagesImpl.class);
when(DefaultMessagesImpl.getString(anyString())).thenReturn("anyString()"); //$NON-NLS-1$
IRepositoryResourceUtilExAdapter mockAdapter = PowerMockito.mock(IRepositoryResourceUtilExAdapter.class);
PowerMockito.mockStatic(ExAdapterManager.class);
PowerMockito.when(ExAdapterManager.getAdapter(new RepositoryResourceUtil(), IRepositoryResourceUtilExAdapter.class))
.thenReturn(mockAdapter);
PowerMockito.mockStatic(CoreRuntimePlugin.class);
CoreRuntimePlugin coreRuntimePlugin = mock(CoreRuntimePlugin.class);
when(CoreRuntimePlugin.getInstance()).thenReturn(coreRuntimePlugin);
PowerMockito.mockStatic(RepositoryNodeProviderRegistryReader.class);
RepositoryNodeProviderRegistryReader reader = mock(RepositoryNodeProviderRegistryReader.class);
PowerMockito.when(RepositoryNodeProviderRegistryReader.getInstance()).thenReturn(reader);
}
@Test
public void testIsLockedViewObject() {
IRepositoryViewObject mockViewObject = mock(IRepositoryViewObject.class);
IProxyRepositoryFactory repositoryFactory = mock(IProxyRepositoryFactory.class);
when(CoreRuntimePlugin.getInstance().getProxyRepositoryFactory()).thenReturn(repositoryFactory);
// true
when(repositoryFactory.getStatus(mockViewObject)).thenReturn(ERepositoryStatus.LOCK_BY_OTHER);
boolean islockedViewObject = RepositoryResourceUtil.isLockedViewObject(mockViewObject);
assertTrue(islockedViewObject);
when(repositoryFactory.getStatus(mockViewObject)).thenReturn(ERepositoryStatus.LOCK_BY_USER);
islockedViewObject = RepositoryResourceUtil.isLockedViewObject(mockViewObject);
assertTrue(islockedViewObject);
// false
ERepositoryStatus[] statuss = { ERepositoryStatus.DEFAULT, ERepositoryStatus.DELETED, ERepositoryStatus.EDITABLE,
ERepositoryStatus.ERROR, ERepositoryStatus.NEW, ERepositoryStatus.NOT_UP_TO_DATE, ERepositoryStatus.READ_ONLY,
ERepositoryStatus.WARN };
for (ERepositoryStatus status : statuss) {
when(repositoryFactory.getStatus(mockViewObject)).thenReturn(status);
islockedViewObject = RepositoryResourceUtil.isLockedViewObject(mockViewObject);
assertFalse(islockedViewObject);
}
}
@Test
public void testIsLockedAndEdited() throws Exception {
IRepositoryViewObject mockViewObject = mock(IRepositoryViewObject.class);
IProxyRepositoryFactory repositoryFactory = mock(IProxyRepositoryFactory.class);
when(CoreRuntimePlugin.getInstance().getProxyRepositoryFactory()).thenReturn(repositoryFactory);
// true
when(repositoryFactory.getStatus(mockViewObject)).thenReturn(ERepositoryStatus.LOCK_BY_OTHER);
boolean islockedViewObject = RepositoryResourceUtil.isLockedAndEdited(mockViewObject);
assertTrue(islockedViewObject);
when(repositoryFactory.getStatus(mockViewObject)).thenReturn(ERepositoryStatus.LOCK_BY_USER);
PowerMockito.mockStatic(RepositoryResourceUtil.class);
PowerMockito.doCallRealMethod().when(RepositoryResourceUtil.class, "isLockedAndEdited",
(IRepositoryViewObject) Mockito.anyObject());
when(RepositoryResourceUtil.isOpenedInEditor(mockViewObject)).thenReturn(mock(IEditorReference.class));
islockedViewObject = RepositoryResourceUtil.isLockedAndEdited(mockViewObject);
assertTrue(islockedViewObject);
// false
when(RepositoryResourceUtil.isOpenedInEditor(mockViewObject)).thenReturn(null);
islockedViewObject = RepositoryResourceUtil.isLockedAndEdited(mockViewObject);
assertFalse(islockedViewObject);
// false
ERepositoryStatus[] statuss = { ERepositoryStatus.DEFAULT, ERepositoryStatus.DELETED, ERepositoryStatus.EDITABLE,
ERepositoryStatus.ERROR, ERepositoryStatus.NEW, ERepositoryStatus.NOT_UP_TO_DATE, ERepositoryStatus.READ_ONLY,
ERepositoryStatus.WARN };
for (ERepositoryStatus status : statuss) {
when(repositoryFactory.getStatus(mockViewObject)).thenReturn(status);
islockedViewObject = RepositoryResourceUtil.isLockedAndEdited(mockViewObject);
assertFalse(islockedViewObject);
}
}
@Test
public void testIsLockedItem() {
Item mockItem = mock(Item.class);
IProxyRepositoryFactory repositoryFactory = mock(IProxyRepositoryFactory.class);
when(CoreRuntimePlugin.getInstance().getProxyRepositoryFactory()).thenReturn(repositoryFactory);
when(repositoryFactory.getStatus(mockItem)).thenReturn(ERepositoryStatus.LOCK_BY_OTHER);
boolean islockedViewObject = RepositoryResourceUtil.isLockedItem(mockItem);
assertTrue(islockedViewObject);
when(repositoryFactory.getStatus(mockItem)).thenReturn(ERepositoryStatus.LOCK_BY_USER);
islockedViewObject = RepositoryResourceUtil.isLockedItem(mockItem);
assertTrue(islockedViewObject);
// false
ERepositoryStatus[] statuss = { ERepositoryStatus.DEFAULT, ERepositoryStatus.DELETED, ERepositoryStatus.EDITABLE,
ERepositoryStatus.ERROR, ERepositoryStatus.NEW, ERepositoryStatus.NOT_UP_TO_DATE, ERepositoryStatus.READ_ONLY,
ERepositoryStatus.WARN };
for (ERepositoryStatus status : statuss) {
when(repositoryFactory.getStatus(mockItem)).thenReturn(status);
islockedViewObject = RepositoryResourceUtil.isLockedItem(mockItem);
assertFalse(islockedViewObject);
}
}
@Test
public void testSaveItem() throws Exception {
// following two lines code is handling errors when mockStatic class "RepositoryNodeConfigurationManager"
RecycleBinNodeConfiguration mockRBNConf = mock(RecycleBinNodeConfiguration.class);
PowerMockito.whenNew(RecycleBinNodeConfiguration.class).withNoArguments().thenReturn(mockRBNConf);
PowerMockito.mockStatic(RepositoryNodeConfigurationManager.class);
Item mockItem = mock(Item.class);
IRepositoryNodeConfiguration mockConf = mock(IRepositoryNodeConfiguration.class);
when(RepositoryNodeConfigurationManager.getConfiguration(mockItem)).thenReturn(mockConf);
IRepositoryNodeResourceProvider mockResourceProvider = mock(IRepositoryNodeResourceProvider.class);
when(mockConf.getResourceProvider()).thenReturn(mockResourceProvider);
when(mockResourceProvider.needSaveReferenceFile()).thenReturn(true);
IProxyRepositoryFactory repositoryFactory = mock(IProxyRepositoryFactory.class);
when(CoreRuntimePlugin.getInstance().getProxyRepositoryFactory()).thenReturn(repositoryFactory);
RepositoryResourceUtil.saveItem(mockItem);
verify(mockResourceProvider, Mockito.times(1)).handleReferenceFile(mockItem);
verify(repositoryFactory, Mockito.times(1)).save(mockItem, false);
}
@Test
public void testCreateItemWith2Args() throws Exception {
String propLabel = "this is propLabel";
String nextId = "UUID_NEXT";
Item mockItem = mock(Item.class);
ItemState mockItemState = mock(ItemState.class);
when(mockItem.getState()).thenReturn(mockItemState);
when(mockItem.getState().getPath()).thenReturn("");
IProxyRepositoryFactory repositoryFactory = mock(IProxyRepositoryFactory.class);
when(CoreRuntimePlugin.getInstance().getProxyRepositoryFactory()).thenReturn(repositoryFactory);
RepositoryContext mockContext = mock(RepositoryContext.class);
when(repositoryFactory.getRepositoryContext()).thenReturn(mockContext);
when(repositoryFactory.getNextId()).thenReturn(nextId);
Property mockProperty = mock(Property.class);
when(mockItem.getProperty()).thenReturn(mockProperty);
PropertiesFactory proFactory = PropertiesFactory.eINSTANCE;
PropertiesFactory spyProFactory = PowerMockito.spy(proFactory);
when(spyProFactory.createProperty()).thenReturn(mockProperty);
User user = mock(User.class);
when(mockContext.getUser()).thenReturn(user);
// following two lines code is handling errors when mockStatic class "RepositoryNodeConfigurationManager"
RecycleBinNodeConfiguration mockRBNConf = mock(RecycleBinNodeConfiguration.class);
PowerMockito.whenNew(RecycleBinNodeConfiguration.class).withNoArguments().thenReturn(mockRBNConf);
PowerMockito.mockStatic(RepositoryNodeConfigurationManager.class);
IRepositoryNodeConfiguration mockConfManager = mock(IRepositoryNodeConfiguration.class);
when(RepositoryNodeConfigurationManager.getConfiguration(Mockito.any(Item.class))).thenReturn(mockConfManager);
IRepositoryNodeResourceProvider mockResourceProvider = mock(IRepositoryNodeResourceProvider.class);
when(mockConfManager.getResourceProvider()).thenReturn(mockResourceProvider);
when(mockResourceProvider.needSaveReferenceFile()).thenReturn(true);
when(repositoryFactory.isEditableAndLockIfPossible(mockItem)).thenReturn(true);
Resource mockResource = mock(Resource.class);
ResourceSet mockResourceSet = mock(ResourceSet.class);
when(mockResource.getResourceSet()).thenReturn(mockResourceSet);
when(mockItem.eResource()).thenReturn(mockResource);
boolean createItem = RepositoryResourceUtil.createItem(mockItem, propLabel);
verify(mockProperty, times(1)).setId(nextId);
verify(mockProperty, times(1)).setVersion(Mockito.anyString());
verify(mockProperty, times(1)).setAuthor(user);
verify(mockProperty, times(1)).setLabel(propLabel);
verify(repositoryFactory, times(1)).create(Mockito.any(Item.class), Mockito.any(IPath.class));
verify(mockResourceProvider, times(1)).handleReferenceFile(mockItem);
verify(repositoryFactory, times(1)).unlock(mockItem);
assertTrue(createItem);
}
@Test
public void testGetVersionFileName() {
String version = "0.1";
String firstF = "datamodel";
String endF = "xsd";
File file = new File(firstF + "." + endF);
String versionFileName = RepositoryResourceUtil.getVersionFileName(file, version);
assertEquals(firstF + "_" + version + "." + endF, versionFileName);
versionFileName = RepositoryResourceUtil.getVersionFileName(file, null);
assertEquals(firstF + "_" + VersionUtils.DEFAULT_VERSION + "." + endF, versionFileName);
versionFileName = RepositoryResourceUtil.getVersionFileName(new File(firstF), null);
assertEquals(firstF, versionFileName);
}
@Test
public void testCopyOSFileTOProject() throws Exception {
String path = "srcpath";
IFolder desFolder = mock(IFolder.class);
String version = VersionUtils.DEFAULT_VERSION;
boolean overwrite = true;
IProgressMonitor progressMonitor = mock(IProgressMonitor.class);
IProject mockIProject = mock(IProject.class);
// verify that if second or third parameter is null will throws exception of IllegalArgumentException type
try {
RepositoryResourceUtil.copyOSFileTOProject(mockIProject, null, desFolder, version, overwrite, progressMonitor);
fail();
} catch (Exception e) {
if (e instanceof IllegalArgumentException) {
assertTrue(true);
} else {
assertTrue(false);
}
}
try {
RepositoryResourceUtil.copyOSFileTOProject(mockIProject, path, null, version, overwrite, progressMonitor);
fail();
} catch (Exception e) {
if (e instanceof IllegalArgumentException) {
assertTrue(true);
} else {
assertTrue(false);
}
}
// if first parameter is null, verify it will call method to create a IProject instance
PowerMockito.mockStatic(ProjectManager.class);
ProjectManager mockProjectManager = mock(ProjectManager.class);
when(ProjectManager.getInstance()).thenReturn(mockProjectManager);
Project mockProject = mock(Project.class);
when(ProjectManager.getInstance().getCurrentProject()).thenReturn(mockProject);
PowerMockito.mockStatic(ResourceUtils.class);
when(ResourceUtils.getProject(mockProject)).thenReturn(mockIProject);
String invalidPath = "mm:\\ss";
when(desFolder.exists()).thenReturn(true);
IFile copyOfFile = RepositoryResourceUtil.copyOSFileTOProject(null, invalidPath, desFolder, version, overwrite,
progressMonitor);
PowerMockito.verifyStatic(Mockito.atLeastOnce());
ProjectManager.getInstance();
ResourceUtils.getProject(Mockito.any(Project.class));
assertNull(copyOfFile);
// verify if the file that defined by second parameter does not exist, return null
String validPath = "d:\\ss";
File file = new File(validPath);
File spyFile = Mockito.spy(file);
PowerMockito.whenNew(File.class).withArguments(validPath).thenReturn(spyFile);
when(spyFile.exists()).thenReturn(true);
when(spyFile.getName()).thenReturn("ss");
IFile mockIFile = mock(IFile.class);
when(desFolder.getFile(Mockito.anyString())).thenReturn(mockIFile);
IPath mockIPath = mock(IPath.class);
when(mockIFile.getLocation()).thenReturn(mockIPath);
when(mockIPath.toOSString()).thenReturn(validPath);
FileInputStream inputStream = mock(FileInputStream.class);
PowerMockito.whenNew(FileInputStream.class).withArguments(spyFile).thenReturn(inputStream);
IFile copiedFile = RepositoryResourceUtil.copyOSFileTOProject(mockIProject, validPath, desFolder, version, overwrite,
progressMonitor);
assertNotNull(copiedFile);
verify(inputStream, Mockito.times(1)).close();
}
/**
* Test for: getFolder(ERepositoryObjectType type, Item item)
*/
@Test
public void testGetFolder2Args() throws PersistenceException {
PowerMockito.mockStatic(ProjectManager.class);
ProjectManager mockProjectManager = mock(ProjectManager.class);
when(ProjectManager.getInstance()).thenReturn(mockProjectManager);
Project mockProject = mock(Project.class);
when(ProjectManager.getInstance().getCurrentProject()).thenReturn(mockProject);
PowerMockito.mockStatic(ResourceUtils.class);
IProject mockIProject = mock(IProject.class);
when(ResourceUtils.getProject(mockProject)).thenReturn(mockIProject);
Item mockItem = mock(Item.class);
ItemState mockState = mock(ItemState.class);
when(mockItem.getState()).thenReturn(mockState);
when(mockState.getPath()).thenReturn("mockStatePath");
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
PowerMockito.mockStatic(ERepositoryObjectType.class);
when(ERepositoryObjectType.getFolderName(mockType)).thenReturn("mockPath");
IFolder mockFolder = mock(IFolder.class);
when(mockIProject.getFolder(Mockito.anyString())).thenReturn(mockFolder);
IFolder folder = RepositoryResourceUtil.getFolder(mockType, mockItem);
assertEquals(mockFolder, folder);
}
@Test
public void testGetTextFileContent() throws Exception {
String encode = "UTF-8";
String filePath = "testfile.txt";//
IFile mockFile = mock(IFile.class);
IPath mockPath = mock(IPath.class);
when(mockFile.getLocation()).thenReturn(mockPath);
when(mockFile.getLocation().toOSString()).thenReturn(filePath);
when(mockFile.exists()).thenReturn(true);
File file = mock(File.class);
when(file.exists()).thenReturn(true);
PowerMockito.whenNew(File.class).withArguments(Mockito.anyString()).thenReturn(file);
PowerMockito.doNothing().when(mockFile).refreshLocal(0, null);
String textContent = "this is the test content!";
byte[] buf = textContent.getBytes(encode);
FileInputStream mockFileInputStream = PowerMockito.mock(FileInputStream.class);
PowerMockito.whenNew(FileInputStream.class).withArguments(file).thenReturn(mockFileInputStream);
PowerMockito.when(mockFileInputStream.available()).thenReturn(0);
ByteArrayOutputStream spyOutputStream = Mockito.spy(new ByteArrayOutputStream());
PowerMockito.whenNew(ByteArrayOutputStream.class).withNoArguments().thenReturn(spyOutputStream);
spyOutputStream.write(buf);
String content = RepositoryResourceUtil.getTextFileContent(mockFile, encode);
assertEquals(textContent, content);
verify(mockFileInputStream, Mockito.atLeastOnce()).read(Matchers.<byte[]> any());
verify(mockFileInputStream, Mockito.atLeastOnce()).close();
verify(spyOutputStream, Mockito.atLeastOnce()).close();
}
/**
* Test for: getFolder(ERepositoryObjectType type)
*/
@Test
public void testGetFolder() throws Exception {
PowerMockito.mockStatic(ProjectManager.class);
ProjectManager mockProjectManager = mock(ProjectManager.class);
when(ProjectManager.getInstance()).thenReturn(mockProjectManager);
Project mockProject = mock(Project.class);
when(ProjectManager.getInstance().getCurrentProject()).thenReturn(mockProject);
PowerMockito.mockStatic(ResourceUtils.class);
IProject mockIProject = mock(IProject.class);
when(ResourceUtils.getProject(mockProject)).thenReturn(mockIProject);
IFolder mockFolder = mock(IFolder.class);
String processFolder = "process"; //$NON-NLS-1$
when(ResourceUtils.getFolder(mockIProject, processFolder, true)).thenReturn(mockFolder);
PowerMockito.mockStatic(ERepositoryObjectType.class);
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
when(ERepositoryObjectType.getFolderName(mockType)).thenReturn(processFolder);
IFolder folder = RepositoryResourceUtil.getFolder(mockType);
assertEquals(mockFolder, folder);
}
@Test
public void testIsSystemFolder() throws Exception {
String folderName = "system";
FolderType[] folderTypes = { FolderType.FOLDER_LITERAL, FolderType.STABLE_SYSTEM_FOLDER_LITERAL };
ContainerItem mockContainerItem = mock(ContainerItem.class);
when(mockContainerItem.getType()).thenReturn(FolderType.SYSTEM_FOLDER_LITERAL);
boolean result = Whitebox.invokeMethod(RepositoryResourceUtil.class, "isSystemFolder", mockContainerItem, folderName);
assertTrue(result);
for (FolderType folderType : folderTypes) {
when(mockContainerItem.getType()).thenReturn(folderType);
result = Whitebox.invokeMethod(RepositoryResourceUtil.class, "isSystemFolder", mockContainerItem, folderName);
assertFalse(result);
}
Item mockItem = mock(Item.class);
result = Whitebox.invokeMethod(RepositoryResourceUtil.class, "isSystemFolder", mockItem, folderName);
assertFalse(result);
}
@Test
public void testCreateFolderViewObject() throws Exception {
boolean isSystem = false;
String folderName = "folderName";
PowerMockito.mockStatic(ProjectManager.class);
ProjectManager mockProjectManager = mock(ProjectManager.class);
Project mockProject = mock(Project.class);
IProject mockIProject = mock(IProject.class);
when(ProjectManager.getInstance()).thenReturn(mockProjectManager);
when(ProjectManager.getInstance().getCurrentProject()).thenReturn(mockProject);
IFolder mockFolder = mock(IFolder.class);
PowerMockito.mockStatic(ResourceUtils.class);
when(ResourceUtils.getProject(mockProject)).thenReturn(mockIProject);
when(mockIProject.getFolder(Mockito.anyString())).thenReturn(mockFolder);
when(mockFolder.exists()).thenReturn(false);
PowerMockito.doNothing().when(ResourceUtils.class, "createFolder", mockFolder);
ItemState mockItemState = mock(ItemState.class);
when(mockItemState.getPath()).thenReturn("mocked_path");
Item mockParentItem = mock(Item.class);
when(mockParentItem.getState()).thenReturn(mockItemState);
String processFolder = "process";
PowerMockito.mockStatic(ERepositoryObjectType.class);
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
when(mockType.getType()).thenReturn("mockType");
when(ERepositoryObjectType.getFolderName(mockType)).thenReturn(processFolder);
PowerMockito.mockStatic(ProxyRepositoryFactory.class);
ProxyRepositoryFactory proxyRepositoryFactory = mock(ProxyRepositoryFactory.class);
when(ProxyRepositoryFactory.getInstance()).thenReturn(proxyRepositoryFactory);
Folder mockTalendFolder = mock(Folder.class);
when(
proxyRepositoryFactory.createFolder(any(Project.class), any(ERepositoryObjectType.class), any(IPath.class),
anyString())).thenReturn(mockTalendFolder);
IRepositoryViewObject folderViewObject = RepositoryResourceUtil.createFolderViewObject(mockType, folderName,
mockParentItem, isSystem);
assertNotNull(folderViewObject);
verify(proxyRepositoryFactory, times(1)).createFolder(any(Project.class), any(ERepositoryObjectType.class),
any(IPath.class), anyString());
}
@Test
public void testCreateDeletedFolderViewObject() throws Exception {
ERepositoryObjectType type = null;
String path = "mocked_path";
String folderName = "folderName";
List<IRepositoryViewObject> children = new ArrayList<IRepositoryViewObject>();
List<IRepositoryViewObject> spychildren = PowerMockito.spy(children);
StubFolderRepositoryObject mockParentFolderObject = mock(StubFolderRepositoryObject.class);
when(mockParentFolderObject.getChildren()).thenReturn(spychildren);
PowerMockito.mockStatic(ContainerCacheService.class);
PowerMockito.doNothing().when(ContainerCacheService.class, "putContainer", Mockito.any(IRepositoryViewObject.class));
FolderRepositoryObject deletedFolderViewObject = RepositoryResourceUtil.createDeletedFolderViewObject(type, path,
folderName, mockParentFolderObject);
assertNotNull(deletedFolderViewObject);
}
/**
* Test for: getCategoryViewObject(IRepositoryNodeConfiguration conf)
*/
@Test
public void testGetCategoryViewObject() throws Exception {
IRepositoryNodeConfiguration mockConfiguration = mock(IRepositoryNodeConfiguration.class);
IRepositoryNodeResourceProvider mockResourceProvider = mock(IRepositoryNodeResourceProvider.class);
when(mockConfiguration.getResourceProvider()).thenReturn(mockResourceProvider);
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
when(mockConfiguration.getResourceProvider().getRepositoryObjectType(Mockito.any(Item.class))).thenReturn(mockType);
IRepositoryNodeLabelProvider mockLabelProvider = mock(IRepositoryNodeLabelProvider.class);
when(mockConfiguration.getLabelProvider()).thenReturn(mockLabelProvider);
when(mockLabelProvider.getCategoryLabel(Mockito.any(ERepositoryObjectType.class))).thenReturn("anystring");
PowerMockito.mockStatic(ContainerCacheService.class);
PowerMockito.doNothing().when(ContainerCacheService.class, "putContainer", Mockito.any(IRepositoryViewObject.class));
IRepositoryViewObject categoryViewObject = RepositoryResourceUtil.getCategoryViewObject(mockConfiguration);
assertNotNull(categoryViewObject);
}
@Test
public void testRemoveViewObjectPhysically() throws PersistenceException {
String name = "mockname";
String version = VersionUtils.DEFAULT_VERSION;
String path = "mockpath";
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
// test the first and second parameter should not be null,and should throw exception of the expected type
try {
RepositoryResourceUtil.removeViewObjectPhysically(null, name, version, path);
fail("First parameter should not be null.");
} catch (Exception e) {
if (e instanceof IllegalArgumentException) {
assertTrue(true);
} else {
assertTrue("the throwed exception does not match", false);
}
}
try {
RepositoryResourceUtil.removeViewObjectPhysically(mockType, null, version, path);
fail("Second parameter should not be null.");
} catch (Exception e) {
if (e instanceof IllegalArgumentException) {
assertTrue(true);
} else {
assertTrue("the throwed exception does not match", false);
}
}
// test method function
IProxyRepositoryFactory mockFactory = mock(IProxyRepositoryFactory.class);
when(CoreRuntimePlugin.getInstance().getProxyRepositoryFactory()).thenReturn(mockFactory);
List<IRepositoryViewObject> viewObjects = new ArrayList<IRepositoryViewObject>();
for (int i = 0; i < 3; i++) {
IRepositoryViewObject mockViewObject = createMockedViewObject(name, version, path);
viewObjects.add(mockViewObject);
}
when(mockFactory.getAll(mockType)).thenReturn(viewObjects);
RepositoryResourceUtil.removeViewObjectPhysically(mockType, name, version, path);
verify(mockFactory, Mockito.atLeastOnce()).deleteObjectPhysical(Mockito.any(IRepositoryViewObject.class), eq(version));
}
private IRepositoryViewObject createMockedViewObject(String name, String version, String path) {
IRepositoryViewObject mockViewObject = mock(IRepositoryViewObject.class);
Property mockProperty = mock(Property.class);
when(mockViewObject.getProperty()).thenReturn(mockProperty);
Item mockItem = mock(Item.class);
when(mockProperty.getItem()).thenReturn(mockItem);
when(mockProperty.getLabel()).thenReturn(name);
when(mockProperty.getVersion()).thenReturn(version);
ItemState mockItemState = mock(ItemState.class);
when(mockItem.getState()).thenReturn(mockItemState);
when(mockItemState.getPath()).thenReturn(path);
return mockViewObject;
}
/**
* Test for: findAllViewObjects(ERepositoryObjectType type, boolean useRepositoryViewObject, boolean withDeleted)
*/
@Test
public void testFindAllViewObjects() throws Exception {
boolean withDeleted = false;
boolean useRepositoryViewObject = true;
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
IProxyRepositoryFactory mockFactory = mock(IProxyRepositoryFactory.class);
when(CoreRuntimePlugin.getInstance().getProxyRepositoryFactory()).thenReturn(mockFactory);
List<IRepositoryViewObject> viewObjects = new ArrayList<IRepositoryViewObject>();
IRepositoryViewObject mockViewObject = mock(IRepositoryViewObject.class);
Property mockProperty = mock(Property.class);
when(mockViewObject.getProperty()).thenReturn(mockProperty);
when(mockViewObject.getRepositoryObjectType()).thenReturn(mockType);
Item mockItem = mock(Item.class);
when(mockProperty.getItem()).thenReturn(mockItem);
ItemState mockItemState = mock(ItemState.class);
when(mockItemState.isDeleted()).thenReturn(false);
when(mockItem.getState()).thenReturn(mockItemState);
viewObjects.add(mockViewObject);
when(mockFactory.getAll(mockType, withDeleted)).thenReturn(viewObjects);
PowerMockito.mockStatic(InteractiveService.class);
IInteractiveHandler mockHandler = mock(IInteractiveHandler.class);
when(InteractiveService.findHandler(mockType)).thenReturn(mockHandler);
PowerMockito.mockStatic(RepositoryResourceUtil.class);
IRepositoryViewObject mockResultViewObject = mock(IRepositoryViewObject.class);
PowerMockito.when(RepositoryResourceUtil.class, "getCacheViewObject", mockProperty, mockViewObject).thenReturn(
mockResultViewObject);
PowerMockito.when(RepositoryResourceUtil.class, "assertViewObject", mockViewObject).thenReturn(mockViewObject);
PowerMockito.doCallRealMethod().when(RepositoryResourceUtil.class, "findAllViewObjects", mockType,
useRepositoryViewObject, withDeleted);
List<IRepositoryViewObject> viewObjectss = RepositoryResourceUtil.findAllViewObjects(mockType, useRepositoryViewObject,
withDeleted);
assertEquals(1, viewObjectss.size());
PowerMockito.verifyStatic(Mockito.atLeastOnce());
InteractiveService.findHandler(mockType);
}
/**
* Test for: findViewObjects(ERepositoryObjectType type, Item parentItem, boolean useRepositoryViewObject, boolean
* withDeleted)
*/
@Test
public void testFindViewObjects4Args() throws Exception {
boolean withDeleted = false;
boolean useRepositoryViewObject = true;
String path = "mockPath";
String parentPath = "parent";
Item mockParentItem = mock(Item.class);
ItemState mockItemState = mock(ItemState.class);
when(mockParentItem.getState()).thenReturn(mockItemState);
when(mockItemState.getPath()).thenReturn(parentPath);
PowerMockito.mockStatic(ProjectManager.class);
ProjectManager mockManager = mock(ProjectManager.class);
when(ProjectManager.getInstance()).thenReturn(mockManager);
Project mockProject = mock(Project.class);
when(ProjectManager.getInstance().getCurrentProject()).thenReturn(mockProject);
IProject mockIProject = mock(IProject.class);
PowerMockito.mockStatic(ResourceUtils.class);
when(ResourceUtils.getProject(mockProject)).thenReturn(mockIProject);
PowerMockito.mockStatic(ERepositoryObjectType.class);
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
when(ERepositoryObjectType.getFolderName(mockType)).thenReturn(path);
IFolder mockFolder = mock(IFolder.class);
when(mockIProject.getFolder(any(IPath.class))).thenReturn(mockFolder);
List<IRepositoryViewObject> viewObjects = new ArrayList<IRepositoryViewObject>();
viewObjects.add(mock(IRepositoryViewObject.class));
PowerMockito.mockStatic(RepositoryResourceUtil.class);
when(RepositoryResourceUtil.findViewObjects(mockType, mockParentItem, mockFolder, useRepositoryViewObject, withDeleted))
.thenReturn(viewObjects);
PowerMockito.doCallRealMethod().when(RepositoryResourceUtil.class, "findViewObjects", mockType, mockParentItem,
useRepositoryViewObject, withDeleted);
List<IRepositoryViewObject> result = RepositoryResourceUtil.findViewObjects(mockType, mockParentItem,
useRepositoryViewObject, withDeleted);
assertEquals(1, result.size());
assertSame(viewObjects, result);
when(ERepositoryObjectType.getFolderName(mockType)).thenReturn("");
result = RepositoryResourceUtil.findViewObjects(mockType, mockParentItem, useRepositoryViewObject, withDeleted);
assertEquals(0, result.size());
assertEquals(Collections.EMPTY_LIST, result);
}
/**
* Test for: findViewObjects(ERepositoryObjectType type, Item parentItem, IFolder folder, boolean
* useRepositoryViewObject, boolean withDeleted)
*/
@Test
public void testFindViewObjects5Args() throws Exception {
boolean withDeleted = false;
boolean useRepositoryViewObject = true;
Item mockParentItem = mock(Item.class);
String path = "mockPath"; //$NON-NLS-1$
ItemState mockItemState = mock(ItemState.class);
when(mockParentItem.getState()).thenReturn(mockItemState);
when(mockItemState.getPath()).thenReturn(path);
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
IFolder[] mockResources = { mock(IFolder.class), mock(IFolder.class), mock(IFolder.class) };
for (IFolder folder : mockResources) {
when(folder.getName()).thenReturn("folder");
}
IFolder mockFolder = mock(IFolder.class);
when(mockFolder.members()).thenReturn(mockResources);
when(mockFolder.exists()).thenReturn(true);
PowerMockito.mockStatic(RepositoryResourceUtil.class);
PowerMockito.doReturn(false).when(RepositoryResourceUtil.class, "isDeletedFolder", mockResources[0]);
PowerMockito.doReturn(false).when(RepositoryResourceUtil.class, "isDeletedFolder", mockResources[1]);
PowerMockito.doReturn(false).when(RepositoryResourceUtil.class, "isDeletedFolder", mockResources[2]);
PowerMockito.doReturn(false).when(RepositoryResourceUtil.class, "isSVNFolder", mockResources[0]);
PowerMockito.doReturn(false).when(RepositoryResourceUtil.class, "isSVNFolder", mockResources[1]);
PowerMockito.doReturn(false).when(RepositoryResourceUtil.class, "isSVNFolder", mockResources[2]);
IRepositoryViewObject mock1ViewObject = mock(IRepositoryViewObject.class);
when(RepositoryResourceUtil.createFolderViewObject(mockType, "folder", mockParentItem, false))
.thenReturn(mock1ViewObject);
PowerMockito.mockStatic(ContainerCacheService.class);
// to mock ContainerCacheService.get(type, resPath);
IRepositoryViewObject folderObject = mock(IRepositoryViewObject.class);
PowerMockito.doReturn(folderObject).when(ContainerCacheService.class, "get", mockType, path); //$NON-NLS-1$
List<IRepositoryViewObject> mockViewObjects = new ArrayList<IRepositoryViewObject>();
mockViewObjects.add(mock(IRepositoryViewObject.class));
mockViewObjects.add(mock(IRepositoryViewObject.class));
mockViewObjects.add(mock(IRepositoryViewObject.class));
when(RepositoryResourceUtil.findViewObjectsInFolder(mockType, mockParentItem, useRepositoryViewObject, withDeleted))
.thenReturn(mockViewObjects);
PowerMockito.doCallRealMethod().when(RepositoryResourceUtil.class, "findViewObjects", mockType, mockParentItem,
mockFolder, useRepositoryViewObject, withDeleted);
List<IRepositoryViewObject> allViewObjects = RepositoryResourceUtil.findViewObjects(mockType, mockParentItem, mockFolder,
useRepositoryViewObject, withDeleted);
assertEquals(6, allViewObjects.size());
assertTrue(allViewObjects.containsAll(mockViewObjects));
assertTrue(allViewObjects.contains(mock1ViewObject));
}
/**
* Test for: findViewObjectsInFolder(ERepositoryObjectType type, Item parentItem, boolean useRepositoryViewObject,
* boolean withDeleted)
*/
@Test
public void testFindViewObjectsInFolder() throws Exception {
boolean withDeleted = false;
boolean useRepositoryViewObject = true;
String path = "mockPath";
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
Item mockParentItem = mock(Item.class);
ItemState mockItemState = mock(ItemState.class);
when(mockParentItem.getState()).thenReturn(mockItemState);
when(mockItemState.getPath()).thenReturn(path);
List<IRepositoryViewObject> viewObjects = new ArrayList<IRepositoryViewObject>();
IRepositoryViewObject mockViewObject = mock(IRepositoryViewObject.class);
Property mockProperty = mock(Property.class);
when(mockViewObject.getProperty()).thenReturn(mockProperty);
Item mockItem = mock(Item.class);
when(mockProperty.getItem()).thenReturn(mockItem);
ItemState mockState = mock(ItemState.class);
when(mockState.isDeleted()).thenReturn(false);
when(mockItem.getState()).thenReturn(mockState);
when(mockState.getPath()).thenReturn(path);
viewObjects.add(mockViewObject);
RootContainer<String, IRepositoryViewObject> mockContainer = mock(RootContainer.class);
PowerMockito.when(mockContainer.getMembers()).thenReturn(viewObjects);
IProxyRepositoryFactory mockFactory = mock(IProxyRepositoryFactory.class);
when(CoreRuntimePlugin.getInstance().getProxyRepositoryFactory()).thenReturn(mockFactory);
PowerMockito.mockStatic(ProjectManager.class);
ProjectManager mockProjectManager = mock(ProjectManager.class);
Project mockProject = mock(Project.class);
PowerMockito.when(ProjectManager.getInstance()).thenReturn(mockProjectManager);
PowerMockito.when(ProjectManager.getInstance().getCurrentProject()).thenReturn(mockProject);
int option = IRepositoryFactory.OPTION_DYNAMIC_OBJECTS | IRepositoryFactory.OPTION_NOT_INCLUDE_CHILDRENS
| IRepositoryFactory.OPTION_ONLY_LAST_VERSION | IRepositoryFactory.OPTION_SKIP_DELETED;
PowerMockito.when(mockFactory.getObjectFromFolder(mockProject, mockType, path, option)).thenReturn(mockContainer);
List<IRepositoryViewObject> allViewObjectsInFolder = RepositoryResourceUtil.findViewObjectsInFolder(mockType,
mockParentItem, useRepositoryViewObject, withDeleted);
assertEquals(1, allViewObjectsInFolder.size());
verify(mockFactory, Mockito.atLeastOnce()).getObjectFromFolder(mockProject, mockType, path, option);
verify(mockContainer, Mockito.atLeastOnce()).getMembers();
}
@Test
public void testConvertToNode() throws Exception {
IRepositoryViewObject mockViewObject = mock(IRepositoryViewObject.class);
Property mockProperty = mock(Property.class);
ContainerItem mockContainerItem = mock(ContainerItem.class);
when(mockViewObject.getProperty()).thenReturn(mockProperty);
when(mockViewObject.getLabel()).thenReturn("mockViewObjectLabel");
when(mockProperty.getItem()).thenReturn(mockContainerItem);
int[] folderType = { FolderType.SYSTEM_FOLDER, FolderType.STABLE_SYSTEM_FOLDER, FolderType.FOLDER };
ENodeType[] enodeType = { ENodeType.SYSTEM_FOLDER, ENodeType.STABLE_SYSTEM_FOLDER, ENodeType.SIMPLE_FOLDER };
int randomInt = RandomUtils.nextInt() % 3;
FolderType fType = mock(FolderType.class);
// when(fType.getValue()).thenReturn(folderType[randomInt]);
PowerMockito.stub(PowerMockito.method(FolderType.class, "getValue")).toReturn(folderType[randomInt]);
when(mockContainerItem.getType()).thenReturn(fType);
ERepositoryObjectType mockType = mock(ERepositoryObjectType.class);
when(mockViewObject.getRepositoryObjectType()).thenReturn(mockType);
RepositoryNode node = RepositoryResourceUtil.convertToNode(mockViewObject);
assertNotNull(node);
assertEquals(enodeType[randomInt], node.getType());
assertEquals("mockViewObjectLabel", node.getProperties(EProperties.LABEL));
assertEquals(mockType, node.getProperties(EProperties.CONTENT_TYPE));
}
}