/******************************************************************************* * Copyright (c) 2016 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.portlet.bot.test; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.List; import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerReqType; import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerRequirement; import org.jboss.ide.eclipse.as.reddeer.server.requirement.ServerRequirement.JBossServer; import org.jboss.reddeer.common.exception.WaitTimeoutExpiredException; import org.jboss.reddeer.common.wait.TimePeriod; import org.jboss.reddeer.common.wait.WaitUntil; import org.jboss.reddeer.eclipse.condition.ConsoleHasText; import org.jboss.reddeer.eclipse.jdt.ui.ProjectExplorer; import org.jboss.reddeer.eclipse.jst.servlet.ui.WebProjectWizard; import org.jboss.reddeer.eclipse.ui.console.ConsoleView; import org.jboss.reddeer.eclipse.ui.views.log.LogMessage; import org.jboss.reddeer.eclipse.ui.views.log.LogView; import org.jboss.reddeer.eclipse.wst.server.ui.view.Server; import org.jboss.reddeer.eclipse.wst.server.ui.view.ServersView; import org.jboss.reddeer.eclipse.wst.server.ui.wizard.ModifyModulesDialog; import org.jboss.reddeer.eclipse.wst.server.ui.wizard.ModifyModulesPage; import org.jboss.reddeer.junit.requirement.inject.InjectRequirement; import org.jboss.reddeer.junit.runner.RedDeerSuite; import org.jboss.reddeer.requirements.server.ServerReqState; import org.jboss.reddeer.workbench.impl.editor.TextEditor; import org.jboss.tools.common.reddeer.utils.StackTraceUtils; import org.jboss.tools.portlet.bot.test.wizard.NewPortletClassOptionsWizardPage; import org.jboss.tools.portlet.bot.test.wizard.NewPortletClassOptionsWizardPage.Methods; import org.jboss.tools.portlet.bot.test.wizard.NewPortletClassWizardPage; import org.jboss.tools.portlet.bot.test.wizard.NewPortletWizard; import org.jboss.tools.portlet.bot.test.wizard.PortletFacetInstallPage; import org.jboss.tools.portlet.bot.test.wizard.WebProjectFirstPage2; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(RedDeerSuite.class) @JBossServer(type = ServerReqType.EAP6_1plus, state = ServerReqState.RUNNING) public class CreateAndDeployPortletTest { private final String PROJECT_NAME = "JavaPortletProject"; private final String PORTLET_CLASS_NAME = "PortletClass"; private final static String JPP62_STARTED_TEXT = "JBoss Portal 6.2.0.GA (AS 7.5.0.Final-redhat-21) started"; private final String PROJECT_SUCCESFULLY_DEPLOYED = "Deployed \"JavaPortletProject.war\""; @InjectRequirement ServerRequirement req; private static LogView logView; @BeforeClass public static void setupClass() { // JPP takes a bit longer to start waitForJPPToStart(); clearLogView(); } private static void waitForJPPToStart() { ConsoleView consoleView = new ConsoleView(); consoleView.open(); new WaitUntil(new ConsoleHasText(JPP62_STARTED_TEXT), TimePeriod.LONG); } private static void clearLogView() { logView = new LogView(); logView.open(); logView.clearLog(); } @Test public void createAndDeployPortletProjectTest() { createDynamicWebProjectWithPortletFacet(); deployPortletProject(); // check logs assertErrorLogIsEmpty(); cleanup(); } @Test public void createAndDeployPortletTest() { createDynamicWebProjectWithPortletFacet(); createPortletClass(); assertErrorLogIsEmpty(); assertPortletIsCreated(); deployPortletProject(); cleanup(); } private void assertPortletIsCreated() { TextEditor editor = new TextEditor(PORTLET_CLASS_NAME + ".java"); assertTrue(editor.isActive()); String text = editor.getText(); System.out.println(text); assertTrue(text.contains("protected void doView")); assertTrue(text.contains("protected void doEdit")); assertTrue(text.contains("public void processAction")); } private void createPortletClass() { NewPortletWizard portletWizard = new NewPortletWizard(); portletWizard.open(); new NewPortletClassWizardPage().setClassName(PORTLET_CLASS_NAME); assertTrue(portletWizard.isFinishEnabled()); portletWizard.next(); NewPortletClassOptionsWizardPage optionsPage = new NewPortletClassOptionsWizardPage(); optionsPage.setMethods(Methods.DO_VIEW, Methods.DO_EDIT, Methods.PROCESS_ACTION); portletWizard.next(); portletWizard.finish(); } private void assertErrorLogIsEmpty() { logView.open(); List<LogMessage> errorMessages = logView.getErrorMessages(); assertTrue("There is something in error log:\n" + errorMessages.toString(), errorMessages.isEmpty()); } private void cleanup() { // undeploy project handleAddModulesWizard(false); // delete project ProjectExplorer projectExplorer = new ProjectExplorer(); projectExplorer.getProject(PROJECT_NAME).delete(true); } private void deployPortletProject() { handleAddModulesWizard(true); assertProjectIsDeployedSuccesfully(); } private void assertProjectIsDeployedSuccesfully() { try { new WaitUntil(new ConsoleHasText(PROJECT_SUCCESFULLY_DEPLOYED)); } catch (WaitTimeoutExpiredException ex) { fail("Project was not succesfully deployed.\n" + StackTraceUtils.stackTraceToString(ex)); } } /** * * @param deploy * deploys if true. Otherwise undeploys */ private void handleAddModulesWizard(boolean deploy) { Server server = new ServersView().getServer(getServerName()); ModifyModulesDialog mmDialog = server.addAndRemoveModules(); ModifyModulesPage mmPage = new ModifyModulesPage(); if (deploy) { mmPage.add(PROJECT_NAME); } else { mmPage.remove(PROJECT_NAME); } mmDialog.finish(); } private String getServerName() { return req.getServerNameLabelText(req.getConfig()); } protected void createDynamicWebProjectWithPortletFacet() { WebProjectWizard webProjectWizard = new WebProjectWizard(); webProjectWizard.open(); WebProjectFirstPage2 webProjectFirstPage = new WebProjectFirstPage2(); webProjectFirstPage.setProjectName(PROJECT_NAME); webProjectFirstPage.setTargetRuntime(req.getRuntimeNameLabelText(req.getConfig())); webProjectFirstPage.activateFacet("2.0", "JBoss Portlets", "JBoss Core Portlet"); webProjectWizard.next(); webProjectWizard.next(); webProjectWizard.next(); new PortletFacetInstallPage().selectPortletImplementationLibrary("Portlet Target Runtime Provider"); webProjectWizard.finish(); } }