Package org.jboss.forge.addon.javaee.jpa.ui.setup

Source Code of org.jboss.forge.addon.javaee.jpa.ui.setup.JPASetupWizardTest

/*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/

package org.jboss.forge.addon.javaee.jpa.ui.setup;

import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

import javax.inject.Inject;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.addon.javaee.jpa.JPAFacet;
import org.jboss.forge.addon.javaee.jpa.PersistenceMetaModelFacet;
import org.jboss.forge.addon.javaee.jpa.PersistenceOperations;
import org.jboss.forge.addon.javaee.jpa.containers.CustomJTAContainer;
import org.jboss.forge.addon.javaee.jpa.containers.JBossEAP6Container;
import org.jboss.forge.addon.javaee.jpa.providers.HibernateMetaModelProvider;
import org.jboss.forge.addon.javaee.jpa.providers.JavaEEDefaultProvider;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.projects.ProjectFactory;
import org.jboss.forge.addon.projects.facets.MetadataFacet;
import org.jboss.forge.addon.resource.FileResource;
import org.jboss.forge.addon.ui.command.AbstractCommandExecutionListener;
import org.jboss.forge.addon.ui.command.UICommand;
import org.jboss.forge.addon.ui.context.UIExecutionContext;
import org.jboss.forge.addon.ui.context.UISelection;
import org.jboss.forge.addon.ui.controller.WizardCommandController;
import org.jboss.forge.addon.ui.result.Failed;
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.addon.ui.test.UITestHarness;
import org.jboss.forge.arquillian.AddonDependency;
import org.jboss.forge.arquillian.Dependencies;
import org.jboss.forge.arquillian.archive.ForgeArchive;
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.descriptor.api.persistence.PersistenceCommonDescriptor;
import org.jboss.shrinkwrap.descriptor.api.persistence.PersistenceUnitCommon;
import org.jboss.shrinkwrap.descriptor.api.persistence.PropertiesCommon;
import org.jboss.shrinkwrap.descriptor.api.persistence21.Property;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
@SuppressWarnings({ "rawtypes", "unchecked" })
public class JPASetupWizardTest
{
   @Deployment
   @Dependencies({
            @AddonDependency(name = "org.jboss.forge.addon:ui"),
            @AddonDependency(name = "org.jboss.forge.addon:ui-test-harness"),
            @AddonDependency(name = "org.jboss.forge.addon:javaee"),
            @AddonDependency(name = "org.jboss.forge.addon:maven")
   })
   public static ForgeArchive getDeployment()
   {
      return ShrinkWrap
               .create(ForgeArchive.class)
               .addBeansXML()
               .addAsAddonDependencies(
                        AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi"),
                        AddonDependencyEntry.create("org.jboss.forge.addon:projects"),
                        AddonDependencyEntry.create("org.jboss.forge.addon:javaee"),
                        AddonDependencyEntry.create("org.jboss.forge.addon:maven"),
                        AddonDependencyEntry.create("org.jboss.forge.addon:ui"),
                        AddonDependencyEntry.create("org.jboss.forge.addon:ui-test-harness")
               );
   }

   @Inject
   private JavaEEDefaultProvider defaultProvider;

   @Inject
   private CustomJTAContainer customJTAProvider;

   @Inject
   private JBossEAP6Container eap6Container;

   @Inject
   private ProjectFactory projectFactory;

   @Inject
   private UITestHarness testHarness;

   @Test
   public void testSetup() throws Exception
   {
      Project project = projectFactory.createTempProject();
      WizardCommandController tester = testHarness.createWizardController(JPASetupWizard.class,
               project.getRoot());

      tester.initialize();

      Assert.assertFalse(tester.canMoveToPreviousStep());
      // Setting UI values
      tester.setValueFor("jpaVersion", "2.1");
      tester.setValueFor("provider", defaultProvider);
      tester.setValueFor("container", customJTAProvider);
      Assert.assertTrue(tester.canMoveToNextStep());

      tester.next().initialize();

      Assert.assertFalse(tester.isValid());
      tester.setValueFor("dataSourceName", "java:jboss:jta-ds");
      Assert.assertTrue(tester.isValid());
      final AtomicInteger counter = new AtomicInteger();
      tester.getContext().addCommandExecutionListener(new AbstractCommandExecutionListener()
      {
         @Override
         public void postCommandExecuted(UICommand command, UIExecutionContext context, Result result)
         {
            counter.incrementAndGet();
         }
      });
      tester.execute();

      UISelection<Object> selection = tester.getContext().getSelection();
      Assert.assertFalse(selection.isEmpty());
      Assert.assertTrue(selection.get() instanceof FileResource);
      Assert.assertEquals("persistence.xml", ((FileResource) selection.get()).getName());

      // Ensure that the two pages were invoked
      Assert.assertEquals(2, counter.get());

      // Reload to refresh facets.
      project = projectFactory.findProject(project.getRoot());

      // Check SUT values
      PersistenceCommonDescriptor config = (PersistenceCommonDescriptor) project.getFacet(JPAFacet.class).getConfig();
      List<PersistenceUnitCommon> allUnits = config.getAllPersistenceUnit();
      Assert.assertEquals("java:jboss:jta-ds", allUnits.get(0).getJtaDataSource());
      assertDefaultProviderProperties(allUnits.get(0).getOrCreateProperties(), project.getFacet(MetadataFacet.class)
               .getProjectName());
   }

   @Test
   public void testSetupDuplicateUnitName() throws Exception
   {
      // Execute SUT
      final Project project = projectFactory.createTempProject();
      WizardCommandController tester = testHarness.createWizardController(JPASetupWizard.class,
               project.getRoot());

      tester.initialize();

      Assert.assertFalse(tester.canMoveToPreviousStep());
      // Setting UI values
      tester.setValueFor("provider", defaultProvider);
      tester.setValueFor("container", eap6Container);
      Assert.assertTrue(tester.canMoveToNextStep());

      tester.next().initialize();

      Result result = tester.execute();
      Assert.assertFalse(result instanceof Failed);

      // Check SUT values
      PersistenceCommonDescriptor config = (PersistenceCommonDescriptor) project.getFacet(JPAFacet.class).getConfig();
      List<PersistenceUnitCommon> allUnits = config.getAllPersistenceUnit();
      Assert.assertEquals(project.getFacet(MetadataFacet.class).getProjectName()
               + PersistenceOperations.DEFAULT_UNIT_SUFFIX, allUnits.get(0).getName());
      Assert.assertEquals(1, allUnits.size());

      WizardCommandController tester2 = testHarness.createWizardController(JPASetupWizard.class,
               project.getRoot());

      // Launch
      tester2.initialize();

      Assert.assertFalse(tester2.canMoveToPreviousStep());
      // Setting UI values
      tester2.setValueFor("provider", defaultProvider);
      tester2.setValueFor("container", eap6Container);
      Assert.assertTrue(tester2.canMoveToNextStep());

      tester2.next().initialize();

      result = tester2.execute();
      Assert.assertFalse(result instanceof Failed);

      config = (PersistenceCommonDescriptor) project.getFacet(JPAFacet.class).getConfig();
      allUnits = config.getAllPersistenceUnit();
      Assert.assertEquals(project.getFacet(MetadataFacet.class).getProjectName()
               + PersistenceOperations.DEFAULT_UNIT_SUFFIX, allUnits.get(0).getName());
      Assert.assertEquals(project.getFacet(MetadataFacet.class).getProjectName()
               + PersistenceOperations.DEFAULT_UNIT_SUFFIX + "-1", allUnits.get(1).getName());
      Assert.assertEquals(2, allUnits.size());

      // testing the overwriting of the first persistence unit
      WizardCommandController tester3 = testHarness.createWizardController(JPASetupWizard.class,
               project.getRoot());
      // Launch
      tester3.initialize();
      Assert.assertFalse(tester3.canMoveToPreviousStep());
      // Setting UI values
      tester3.setValueFor("provider", defaultProvider);
      tester3.setValueFor("container", eap6Container);

      Assert.assertTrue(tester3.canMoveToNextStep());
      tester3.next().initialize();
      tester3.setValueFor("persistenceUnitName", project.getFacet(MetadataFacet.class).getProjectName()
               + PersistenceOperations.DEFAULT_UNIT_SUFFIX);
      tester3.setValueFor("overwritePersistenceUnit", true);

      result = tester3.execute();
      Assert.assertFalse(result instanceof Failed);

      // Check SUT values
      config = (PersistenceCommonDescriptor) project.getFacet(JPAFacet.class).getConfig();
      allUnits = config.getAllPersistenceUnit();
      Assert.assertEquals(project.getFacet(MetadataFacet.class).getProjectName()
               + PersistenceOperations.DEFAULT_UNIT_SUFFIX, allUnits.get(0).getName());
      Assert.assertEquals(project.getFacet(MetadataFacet.class).getProjectName()
               + PersistenceOperations.DEFAULT_UNIT_SUFFIX + "-1", allUnits.get(1).getName());
      Assert.assertEquals(2, allUnits.size());
   }

   @Test
   public void testSetupMetadata() throws Exception
   {
      // Execute SUT
      Project project = projectFactory.createTempProject();
      WizardCommandController tester = testHarness.createWizardController(JPASetupWizard.class,
               project.getRoot());

      tester.initialize();

      Assert.assertFalse(tester.canMoveToPreviousStep());
      // Setting UI values
      tester.setValueFor("provider", defaultProvider);
      tester.setValueFor("container", customJTAProvider);
      tester.setValueFor("configureMetadata", Boolean.TRUE);
      Assert.assertTrue(tester.canMoveToNextStep());

      tester.next().initialize();

      tester.setValueFor("dataSourceName", "java:jboss:jta-ds");
      final AtomicInteger counter = new AtomicInteger();
      tester.getContext().addCommandExecutionListener(new AbstractCommandExecutionListener()
      {
         @Override
         public void postCommandExecuted(UICommand command, UIExecutionContext context, Result result)
         {
            counter.incrementAndGet();
         }
      });
      tester.execute();
      // Ensure that the two pages were invoked
      Assert.assertEquals(2, counter.get());

      // Reload to refresh facets.
      project = projectFactory.findProject(project.getRoot());

      // Check SUT values
      PersistenceCommonDescriptor config = (PersistenceCommonDescriptor) project.getFacet(JPAFacet.class).getConfig();
      List<PersistenceUnitCommon> allUnits = config.getAllPersistenceUnit();

      Assert.assertEquals("java:jboss:jta-ds", allUnits.get(0).getJtaDataSource());

      Assert.assertTrue(project.hasFacet(PersistenceMetaModelFacet.class));
      PersistenceMetaModelFacet facet = project.getFacet(PersistenceMetaModelFacet.class);
      Assert.assertEquals(new HibernateMetaModelProvider().getProcessor(), facet.getProcessor());
   }

   private void assertDefaultProviderProperties(PropertiesCommon puProperties, String projectName)
   {
      assertPropertyValue(puProperties, "javax.persistence.schema-generation.database.action", "drop-and-create");
      assertPropertyValue(puProperties, "javax.persistence.schema-generation.scripts.action", "drop-and-create");
      assertPropertyValue(puProperties, "javax.persistence.schema-generation.scripts.create-target", projectName
               + "Create.ddl");
      assertPropertyValue(puProperties, "javax.persistence.schema-generation.scripts.drop-target", projectName
               + "Drop.ddl");
   }

   private void assertPropertyValue(PropertiesCommon puProperties, String name, String expectedValue)
   {
      List<Property<?>> allProperties = puProperties.getAllProperty();
      for (Property property : allProperties)
      {
         if (property.getName().equals(name))
         {
            Assert.assertEquals(expectedValue, property.getValue());
            return;
         }
      }
      Assert.fail("No property with name " + name + " was defined for this persistence unit.");
   }
}
TOP

Related Classes of org.jboss.forge.addon.javaee.jpa.ui.setup.JPASetupWizardTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.