/*
* gvNIX is an open source tool for rapid application development (RAD).
* Copyright (C) 2010 Generalitat Valenciana
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gvnix.service.roo.addon.addon.ws;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.reset;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.Validate;
import org.gvnix.service.roo.addon.addon.ws.WSConfigServiceImpl;
import org.gvnix.service.roo.addon.addon.ws.WSConfigService.WsType;
import org.junit.Before;
import org.junit.Test;
import org.springframework.roo.metadata.MetadataService;
import org.springframework.roo.process.manager.FileManager;
import org.springframework.roo.project.Dependency;
import org.springframework.roo.project.ProjectMetadata;
import org.springframework.roo.project.ProjectOperations;
import org.springframework.test.util.ReflectionTestUtils;
import org.w3c.dom.Element;
/**
* Addon Web Service configuration Test class.
*
* @author <a href="http://www.disid.com">DISID Corporation S.L.</a> made for <a
* href="http://www.dgti.gva.es">General Directorate for Information
* Technologies (DGTI)</a>
*/
public class WSConfigServiceImplTest {
static final String WEB_XML = "webmvc-config.xml";
// Project web config file path
static final String WEB_XML_PATH = "WEB-INF/spring/webmvc-config.xml";
// Class under test
private WSConfigServiceImpl wSConfigServiceImpl;
// Mock objects to emulate Roo OSGi Services
private FileManager fileManager;
private MetadataService metadataService;
// Mock to emulate file management.
private ProjectMetadata projectMetadata;
private ProjectOperations projectOperations;
private static Logger logger = Logger
.getLogger(WSConfigServiceImplTest.class.getName());
/**
* Setup operations instance and Mock objects
*
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception {
// Class under test
wSConfigServiceImpl = new WSConfigServiceImpl();
// Setup Mock service objects
fileManager = createMock(FileManager.class);
metadataService = createMock(MetadataService.class);
projectOperations = createMock(ProjectOperations.class);
// pathResolver = createMock(PathResolver.class);
// Mock Objects
projectMetadata = createMock(ProjectMetadata.class);
// Inject mock objects in instance. This emulate OSGi environment
ReflectionTestUtils.setField(wSConfigServiceImpl, "fileManager",
fileManager);
ReflectionTestUtils.setField(wSConfigServiceImpl, "metadataService",
metadataService);
ReflectionTestUtils.setField(wSConfigServiceImpl, "projectOperations",
projectOperations);
// ReflectionTestUtils.setField(projectOperations, "pathResolver",
// pathResolver);
}
/**
* Checks method {@link WSConfigServiceImpl#isCxfDependenciesInstalled()}
* TODO Test disabled because error after migrate to Roo 1.2.2 (¿ changed
* mock tests ?)
*
* @throws Exception
*/
// @Test
public void testAreCxfDependenciesInstalled() throws Exception {
boolean areCxfDependenciesInstalledResult;
/*
* Test 1 - Todas las dependencias de CXF han sido definidas en el
* pom.xml.
*/
expect(
metadataService.get(ProjectMetadata
.getProjectIdentifier(projectOperations
.getFocusedModuleName()))).andReturn(
projectMetadata);
Dependency dependency;
List<Element> dependencyList = wSConfigServiceImpl
.getDependencies(WsType.EXPORT);
for (Element element : dependencyList) {
dependency = new Dependency(element);
expect(
projectMetadata.getPom().isDependencyRegistered(dependency,
false)).andReturn(true);
}
replay(metadataService, projectMetadata);
areCxfDependenciesInstalledResult = wSConfigServiceImpl
.dependenciesRegistered(WsType.EXPORT);
assertTrue("There is one or more dependencies not set.",
areCxfDependenciesInstalledResult);
logger.log(Level.INFO,
"Test 1 \nAll Cxf Dependencies defined in pom.xml");
reset(metadataService, projectMetadata);
/*
* Test 2 - Falta al menos una dependencia por definir en el pom.xml del
* proyecto.
*/
String dependencyNotDefined = "jaxb-api";
expect(
metadataService.get(ProjectMetadata
.getProjectIdentifier(projectOperations
.getFocusedModuleName()))).andReturn(
projectMetadata);
for (Element element : dependencyList) {
dependency = new Dependency(element);
if (dependency.getArtifactId().compareTo(dependencyNotDefined) == 0) {
expect(
projectMetadata.getPom().isDependencyRegistered(
dependency, false)).andReturn(false);
}
expect(
projectMetadata.getPom().isDependencyRegistered(dependency,
false)).andReturn(true);
}
replay(metadataService, projectMetadata);
areCxfDependenciesInstalledResult = wSConfigServiceImpl
.dependenciesRegistered(WsType.EXPORT);
assertFalse("There are all dependencies set.",
areCxfDependenciesInstalledResult);
logger.log(Level.INFO, "Test 2 \njaxb-api dependency is not set.");
reset(metadataService, projectMetadata);
}
/**
* Checks method {@link WSConfigServiceImpl#isCxfConfigurated()} TODO Test
* disabled because error after migrate to Roo 1.2.2 (¿ changed mock tests
* ?)
*
* @throws Exception
*/
// @Test
public void testIsCxfConfigurated() throws Exception {
String projectName;
String cxfprojectFile;
String cxfPath;
boolean cxfConfigFileExpected;
/*
* Test 1 - Exists Cxf config file using project name. projectName =
* test-service-layer.
*/
projectName = "test-service-layer";
cxfprojectFile = "WEB-INF/cxf-".concat(projectName).concat(".xml");
cxfPath = cxfprojectFile;
cxfConfigFileExpected = true;
expect(
metadataService.get(ProjectMetadata
.getProjectIdentifier(projectOperations
.getFocusedModuleName()))).andReturn(
projectMetadata);
expect(
projectOperations.getProjectName(projectOperations
.getFocusedModuleName())).andReturn(projectName);
// expect(
// projectOperations.getPathResolver().getIdentifier(Path.SRC_MAIN_WEBAPP,
// cxfprojectFile)).andReturn(cxfPath);
expect(fileManager.exists(cxfPath)).andReturn(cxfConfigFileExpected);
replay(metadataService, projectMetadata, fileManager);
assertTrue("The Cxf config file doesn't exists.", cxfConfigFileExpected);
logger.log(Level.INFO,
"Test 1 \nThe Cxf config file using project name exists.");
reset(metadataService, projectMetadata, fileManager);
}
/**
* Checks method
* {@link WSConfigServiceImpl#convertPackageToTargetNamespace(String)}
*
* @throws Exception
*/
@Test
public void testConvertPackageToTargetNamespace() throws Exception {
String packageName = "org.gvnix.service.roo.addon";
String targetNamespaceExpected = "http://addon.roo.service.gvnix.org/";
String targetNamespaceResult;
/*
* Test 1 - Check's method functionality.
*/
targetNamespaceResult = wSConfigServiceImpl
.convertPackageToTargetNamespace(packageName);
Validate.isTrue(
targetNamespaceResult != null
&& targetNamespaceResult.length() != 0,
"The method doesn't work properly.");
assertTrue("The namespace is not well generated",
targetNamespaceResult.contains(targetNamespaceExpected));
}
}