/*******************************************************************************
* Copyright (c) 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.wsclient;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.List;
import org.jboss.reddeer.common.exception.RedDeerException;
import org.jboss.reddeer.eclipse.core.resources.Project;
import org.jboss.reddeer.eclipse.core.resources.ProjectItem;
import org.jboss.reddeer.eclipse.jdt.ui.packageexplorer.PackageExplorer;
import org.jboss.reddeer.eclipse.ui.views.navigator.ResourceNavigator;
import org.jboss.tools.ws.reddeer.ui.wizards.wst.WebServiceWizardPageBase.SliderLevel;
import org.jboss.tools.ws.ui.bot.test.soap.SOAPTestBase;
import org.jboss.tools.ws.ui.bot.test.utils.ServersViewHelper;
import org.jboss.tools.ws.ui.bot.test.utils.WebServiceClientHelper;
import org.jboss.tools.ws.ui.bot.test.webservice.WebServiceRuntime;
import org.junit.After;
import org.junit.Test;
/**
* Test template operates on Web Service Client Wizard
*
* @author jlukas
* @author Radoslav Rabara
*/
public class WSClientTestTemplate extends SOAPTestBase {
protected final WebServiceRuntime serviceRuntime;
public WSClientTestTemplate(WebServiceRuntime serviceRuntime) {
this.serviceRuntime = serviceRuntime;
}
@After
public void undeploy() {
ServersViewHelper.removeAllProjectsFromServer(getConfiguredServerName());
}
@Override
protected String getWsProjectName() {
return "client";
}
protected String getWsPackage() {
return "client." + getLevel().toString().toLowerCase();
}
@Override
protected String getEarProjectName() {
return "clientEAR";
}
protected String getSampleClientFileName() {
return "clientsample/ClientSample.java";
}
@Test
public void testDeployClient() {
setLevel(SliderLevel.DEPLOY);
clientTest(getWsPackage());
}
@Test
public void testAssembleClient() {
setLevel(SliderLevel.ASSEMBLE);
clientTest(getWsPackage());
}
@Test
public void testDevelopClient() {
setLevel(SliderLevel.DEVELOP);
clientTest(getWsPackage());
}
@Test
public void testInstallClient() {
setLevel(SliderLevel.INSTALL);
clientTest(getWsPackage());
}
@Test
public void testStartClient() {
setLevel(SliderLevel.START);
clientTest(getWsPackage());
}
@Test
public void testTestClient() {
setLevel(SliderLevel.TEST);
clientTest(getWsPackage());
}
@Test
public void testDefaultPkg() {
setLevel(SliderLevel.ASSEMBLE);
clientTest(null);
}
@After
@Override
public void cleanup() {
super.cleanup();
deleteAllPackages();
}
protected void clientTest(String targetPkg) {
WebServiceClientHelper.createClient(
getConfiguredServerName(),
"http://soaptest.parasoft.com/calculator.wsdl",
serviceRuntime,
null,
null,
getLevel(),
targetPkg);
assertThatExpectedFilesExists(targetPkg);
assertThatEARProjectIsDeployed();
}
private void assertThatExpectedFilesExists(String targetPkg) {
ResourceNavigator navigator = new ResourceNavigator();
navigator.open();
Project project = navigator.getProject(getWsProjectName());
project.refresh();
String pkg = (targetPkg != null && !"".equals(targetPkg.trim())) ? getWsPackage() :
"com.parasoft.wsdl.calculator";
String src = "src/" + pkg.replace('.', '/') + "/";
String[] expectedFiles = {
src + "ICalculator.java",
src + "Add.java",
src + "AddResponse.java",
src + "Divide.java",
src + "DivideResponse.java",
src + "Multiply.java",
src + "MultiplyResponse.java",
src + "Subtract.java",
src + "SubtractResponse.java",
src + getSampleClientFileName()};
for(String file : expectedFiles) {
assertTrue("File " + file + " was not created", project.containsItem(file.split("/")));
}
}
private void assertThatEARProjectIsDeployed() {
switch (getLevel()) {
/*workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=428982
choosing 'Deploy' should normally deploy the project automatically*/
case DEPLOY:
ServersViewHelper.runProjectOnServer(getEarProjectName());
case TEST:
case START:
case INSTALL:
ServersViewHelper.waitForDeployment(getEarProjectName(), getConfiguredServerName());
if(!WebServiceClientHelper.projectIsDeployed(getConfiguredServerName(), getEarProjectName())) {
fail("Project was not found on the server.");
}
default:
break;
}
}
private void deleteAllPackages() {
PackageExplorer pe = new PackageExplorer();
pe.open();
Project p = pe.getProject(getWsProjectName());
ProjectItem src = p.getProjectItem("src");
try {
for(ProjectItem pkg: src.getChildren()) {
pkg.select();
pkg.delete();
}
} catch(RedDeerException e) {
pe.open();
src = p.getProjectItem("src");
List<ProjectItem> pkgs = src.getChildren();
for(ProjectItem pkg: pkgs) {
pkg.select();
pkg.delete();
}
}
}
}