/*******************************************************************************
* Copyright (c) 2010-2011 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.ws.ui.bot.test.webservice;
import static org.junit.Assert.fail;
import org.jboss.reddeer.common.exception.WaitTimeoutExpiredException;
import org.jboss.reddeer.common.matcher.RegexMatcher;
import org.jboss.reddeer.common.wait.WaitUntil;
import org.jboss.reddeer.common.wait.WaitWhile;
import org.jboss.reddeer.core.condition.ShellWithTextIsAvailable;
import org.jboss.reddeer.eclipse.core.resources.ProjectItem;
import org.jboss.reddeer.eclipse.exception.EclipseLayerException;
import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer;
import org.jboss.reddeer.eclipse.wst.server.ui.view.ServerModule;
import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersView;
import org.jboss.reddeer.junit.runner.RedDeerSuite;
import org.jboss.reddeer.swt.impl.button.OkButton;
import org.jboss.tools.ws.reddeer.ui.wizards.wst.WebServiceWizardPageBase.SliderLevel;
import org.jboss.tools.ws.ui.bot.test.utils.DeploymentHelper;
import org.jboss.tools.ws.ui.bot.test.utils.ProjectHelper;
import org.jboss.tools.ws.ui.bot.test.utils.ServersViewHelper;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Test operates on Web Service Wizard with top down process of creating web service
* @author jlukas
*
*/
@RunWith(RedDeerSuite.class)
public class TopDownWSTest extends WebServiceTestBase {
@Override
protected String getEarProjectName() {
return "TopDownWS-ear";
}
@Override
protected String getWsPackage() {
return "jbossws.td." + getLevel().toString().toLowerCase();
}
@Override
protected String getWsName() {
return "WsdlWs" + getLevel();
}
@Override
protected String getWsProjectName() {
return "TopDownWS-web";
}
//http://localhost:8080/TopDownJbossWS/jbossws.ClassB?wsdl
/*
<soap:Body>
<method xmlns = "http://jbossws/">
</method>
</soap:Body>
<soap:Body>
<ns2:methodResponse xmlns:ns2="http://jbossws/">
<return>0</return>
</ns2:methodResponse>
</soap:Body>
*/
@Test
public void testDevelopService() {
setLevel(SliderLevel.DEVELOP);
topDownWS();
}
@Test
public void testAssembleService() {
setLevel(SliderLevel.ASSEMBLE);
/* There may exist WSDL and generated files created in testDefaultPkg due to using the same SliderLevel */
prepareAssembleService();
topDownWS();
}
@Test
public void testDeployService() {
setLevel(SliderLevel.DEPLOY);
topDownWS();
}
@Test
public void testInstallService() {
setLevel(SliderLevel.INSTALL);
topDownWS();
}
/**
* Fails due to JBIDE-16066
* @see https://issues.jboss.org/browse/JBIDE-16066
*/
@Test
public void testStartService() {
setLevel(SliderLevel.START);
topDownWS();
}
/**
* Fails due to JBIDE-16066
* @see https://issues.jboss.org/browse/JBIDE-16066
*/
@Test
public void testTestService() {
setLevel(SliderLevel.TEST);
topDownWS();
}
@Test
public void testDefaultPkg() {
setLevel(SliderLevel.ASSEMBLE);
prepareAssembleService();
topDownWS(null);
}
private void removeWsdlFileFromProject(String wsdlFileName) {
ProjectItem item = null;
try {
item = new ProjectExplorer().getProject(getWsProjectName())
.getProjectItem("Java Resources", "src", wsdlFileName);
} catch(EclipseLayerException e) {
return;
}
item.delete();
ShellWithTextIsAvailable condition = new ShellWithTextIsAvailable(new RegexMatcher("Delete"));
try {
new WaitUntil(condition);
} catch(WaitTimeoutExpiredException e) {
return;
}
new OkButton().click();
new WaitWhile(condition);
}
private void topDownWS() {
topDownWS("ws." + getWsName().toLowerCase());
}
protected void topDownWS(String pkg) {
topDownWS(
TopDownWSTest.class.getResourceAsStream("/resources/jbossws/ClassB.wsdl"),
WebServiceRuntime.JBOSS_WS, pkg, true);
switch (getLevel()) {
case DEVELOP:
case ASSEMBLE:
/*workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=377624
choosing 'Deploy' should normally deploy the project automatically*/
case DEPLOY:
ProjectHelper.cleanAllProjects();
ServersViewHelper.runProjectOnServer(getEarProjectName());
break;
case INSTALL:
case START:
case TEST:
ServerModule module = null;
try {
module = new ServersView().getServer(getConfiguredServerName()).getModule(getEarProjectName());
} catch (EclipseLayerException ex) {
fail("The project was not deployed");
}
module.remove();
ProjectHelper.cleanAllProjects();
ServersViewHelper.runProjectOnServer(getEarProjectName());
break;
}
ServersViewHelper.waitForDeployment(getEarProjectName(), getConfiguredServerName());
DeploymentHelper.assertServiceDeployed(DeploymentHelper.getWSDLUrl(getWsProjectName(), getWsName()), 10000);
}
private void prepareAssembleService() {
/* There exists WSDL file created in testAssembleService due to using the same SliderLevel */
removeWsdlFileFromProject(getWsName() + ".wsdl");
}
}