/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.portlet.ui.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; import org.junit.Before; import org.junit.Test; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.project.core.model.PluginType; import com.liferay.ide.service.core.operation.INewServiceBuilderDataModelProperties; import com.liferay.ide.service.ui.wizard.NewServiceBuilderWizard; /** * @author Li Lu */ @SuppressWarnings( "restriction" ) public class NewServiceBuilderWizardTests extends PortletUITestBase implements INewServiceBuilderDataModelProperties { NewServiceBuilderWizard wizard; IProject project; IDataModel dataModel; IFile serviceFile; @Before public void createPortletProject() throws Exception { if( shouldSkipBundleTests() )return; project = createProject( "service-builder-portlet-project-test", PluginType.portlet, "mvc" ); wizard = new NewServiceBuilderWizard(); dataModel = wizard.getDataModel(); // delete service.xml if( getServiceFile().exists() ) { serviceFile.delete( true, new NullProgressMonitor() ); } } public IFile getServiceFile() { IFolder defaultDocroot = CoreUtil.getDefaultDocrootFolder( project ); serviceFile = defaultDocroot.getFile( "WEB-INF/service.xml" ); return serviceFile; } @Test public void testContentDefaultValues() { dataModel.setProperty( PROJECT_NAME, project.getName() ); assertEquals( "service.xml", dataModel.getProperty( SERVICE_FILE ) ); assertNull( dataModel.getDefaultProperty( PACKAGE_PATH ) ); assertNull( dataModel.getDefaultProperty( NAMESPACE ) ); assertEquals( System.getProperty( "user.name" ), dataModel.getDefaultProperty( AUTHOR ) ); assertEquals( true, dataModel.getDefaultProperty( USE_SAMPLE_TEMPLATE ) ); assertEquals( false, wizard.canFinish() ); } @Test public void testPluginProject() { dataModel.setProperty( PACKAGE_PATH, "com.test" ); dataModel.setProperty( NAMESPACE, "foo" ); String message = dataModel.validate().getMessage(); assertEquals( "Enter a project name.", message ); dataModel.setProperty( PROJECT_NAME, project.getName() ); } @Test public void testPackagePath() throws Exception { assertEquals( true, dataModel.isPropertyEnabled( PACKAGE_PATH ) ); dataModel.setProperty( PROJECT_NAME, project.getName() ); dataModel.setProperty( NAMESPACE, "foo" ); dataModel.setProperty( PACKAGE_PATH, " " ); String message = dataModel.validateProperty( PACKAGE_PATH ).getMessage(); assertEquals( "Package path cannot be empty.", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( PACKAGE_PATH, "test test" ); message = dataModel.validateProperty( PACKAGE_PATH ).getMessage(); assertEquals( "Invalid Java package name: 'test test' is not a valid Java identifier", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( PACKAGE_PATH, "com.test" ); assertEquals( true, wizard.canFinish() ); } @Test public void testNamespace() { assertEquals( true, dataModel.isPropertyEnabled( NAMESPACE ) ); dataModel.setProperty( PROJECT_NAME, project.getName() ); dataModel.setProperty( PACKAGE_PATH, "com.test" ); dataModel.setProperty( NAMESPACE, "" ); String message = dataModel.validateProperty( NAMESPACE ).getMessage(); assertEquals( "Namespace cannot be empty.", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( NAMESPACE, "test.test" ); message = dataModel.validateProperty( NAMESPACE ).getMessage(); assertEquals( "The namespace element must be a valid keyword.", message ); assertEquals( false, wizard.canFinish() ); dataModel.setProperty( NAMESPACE, "test_test" ); message = dataModel.validate().getMessage(); assertEquals( true, wizard.canFinish() ); } @Test public void testIncludeSample() throws Exception { assertEquals( true, dataModel.isPropertyEnabled( USE_SAMPLE_TEMPLATE ) ); } @Test public void testServiceFile() throws Exception { assertEquals( false, dataModel.isPropertyEnabled( SERVICE_FILE ) ); dataModel.setProperty( PROJECT_NAME, project.getName() ); dataModel.setProperty( PACKAGE_PATH, "com.test" ); dataModel.setProperty( NAMESPACE, "foo" ); assertEquals( true, dataModel.isPropertyEnabled( USE_SAMPLE_TEMPLATE ) ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); assertEquals( true, checkFileExist( project, "service.xml", "WEB-INF" ) ); dataModel = wizard.getDataModel(); dataModel.setProperty( PROJECT_NAME, project.getName() ); dataModel.setProperty( PACKAGE_PATH, "com.test" ); dataModel.setProperty( NAMESPACE, "foo" ); String message = dataModel.validate().getMessage(); assertEquals( "Project already contains service.xml file, please select another project.", message ); assertEquals( false, wizard.canFinish() ); // select another project IProject anotherProject = createProject( "another-portlet-project-test", PluginType.portlet, "mvc" ); dataModel.setProperty( PROJECT_NAME, anotherProject.getName() ); message = dataModel.validate().getMessage(); assertEquals( "OK", message ); assertEquals( true, wizard.canFinish() ); dataModel.getDefaultOperation().execute( new NullProgressMonitor(), null ); assertEquals( true, checkFileExist( anotherProject, "service.xml", "WEB-INF" ) ); // check file content IFile serviceFile = getServiceFile(); assertEquals( true, checkFileHasContent( serviceFile, "service-builder", "package-path", "com.test" ) ); assertEquals( true, checkFileHasContent( serviceFile, "author", null, System.getProperty( "user.name" ) ) ); assertEquals( true, checkFileHasContent( serviceFile, "namespace", null, "foo" ) ); assertEquals( true, checkFileHasContent( serviceFile, "entity", "name", "Foo" ) ); } }