From e7f4e49a1548e83b666030eacb5c43f67ab50db3 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 9 Jun 2016 13:54:23 +0000 Subject: [PATCH] CCM NG: - Infrastructure for integration tests in ccm-shortcuts now works (may serve as an example of other modules) - Integration tests for ShortcutRepository and ShortcutManager - Fixed some bugs in the database migration scripts git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4148 8810af33-2d31-482b-a856-94f89814c4df --- ccm-shortcuts/pom.xml | 34 ++- .../java/org/libreccm/shortcuts/Shortcut.java | 6 +- .../libreccm/shortcuts/ShortcutManager.java | 70 +++-- .../shortcuts/ShortcutRepository.java | 4 +- .../h2/V7_0_0_0__create_tables.sql | 9 + .../pgsql/V7_0_0_0__create_tables.sql | 9 + .../org/libreccm/shortcuts/DatasetsTest.java | 81 +++++ .../shortcuts/ShortcutManagerTest.java | 286 ++++++++++++++++++ .../shortcuts/ShortcutRepositoryTest.java | 158 +++++++--- .../scripts/create_ccm_shortcuts_schema.sql | 5 +- .../scripts/create_ccm_shortcuts_schema.sql | 4 +- .../ShortcutManagerTest/after-create.xml | 19 ++ .../shortcuts/ShortcutManagerTest/data.xml | 15 + .../shortcuts/ShortcutRepositoryTest/data.xml | 15 + .../libreccm/testutils/DatasetsVerifier.java | 5 +- 15 files changed, 645 insertions(+), 75 deletions(-) create mode 100644 ccm-shortcuts/src/main/resources/db/migrations/org/libreccm/ccm_shortcuts/h2/V7_0_0_0__create_tables.sql create mode 100644 ccm-shortcuts/src/main/resources/db/migrations/org/libreccm/ccm_shortcuts/pgsql/V7_0_0_0__create_tables.sql create mode 100644 ccm-shortcuts/src/test/java/org/libreccm/shortcuts/DatasetsTest.java create mode 100644 ccm-shortcuts/src/test/java/org/libreccm/shortcuts/ShortcutManagerTest.java create mode 100644 ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutManagerTest/after-create.xml create mode 100644 ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml create mode 100644 ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutRepositoryTest/data.xml diff --git a/ccm-shortcuts/pom.xml b/ccm-shortcuts/pom.xml index 692cd0629..26695911a 100644 --- a/ccm-shortcuts/pom.xml +++ b/ccm-shortcuts/pom.xml @@ -130,14 +130,30 @@ ccm-shortcuts + + + src/main/resources + true + + + + + + src/test/resources + + + ${project.build.directory}/generated-resources + + + org.apache.maven.plugins maven-compiler-plugin 3.3 - 1.7 - 1.7 + 1.8 + 1.8 true true ${project.build.sourceEncoding} @@ -219,13 +235,6 @@ - - - src/main/resources - true - - - @@ -347,7 +356,7 @@ wildfly-remote-h2-mem - test + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-impl-maven + test + org.jacoco org.jacoco.core diff --git a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/Shortcut.java b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/Shortcut.java index 9d19ae56a..08d3fd588 100644 --- a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/Shortcut.java +++ b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/Shortcut.java @@ -44,14 +44,16 @@ import javax.persistence.Table; query = "SELECT s FROM Shortcut s WHERE s.urlKey = :urlKey"), @NamedQuery( name = "Shortcut.findByRedirect", - query = "SELECT s FROM Shortcut s WHERE s.redirect = :redirect") + query = "SELECT s FROM Shortcut s " + + "WHERE s.redirect = :redirect " + + "ORDER BY s.urlKey") }) public class Shortcut implements Serializable { private static final long serialVersionUID = -5674633339633714327L; @Id - @Column(name = "SHORTCUTS_ID") + @Column(name = "SHORTCUT_ID") @GeneratedValue(strategy = GenerationType.AUTO) private long shortcutId; diff --git a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutManager.java b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutManager.java index ddee0beab..dfe8ad1a9 100644 --- a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutManager.java +++ b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutManager.java @@ -32,7 +32,7 @@ import javax.inject.Inject; */ @RequestScoped public class ShortcutManager { - + /** * {@link ShortcutRepository} for interacting with the database. */ @@ -42,11 +42,21 @@ public class ShortcutManager { /** * Creates a Shortcut * - * @param url - * @param redirect + * @param url The URL of the Shortcut. Can't be null. + * @param redirect The URL to which the Shortcut redirects. Can't be null. * @return the new Shortcut */ public Shortcut createShortcut(final String url, final String redirect) { + if (url == null || url.trim().isEmpty()) { + throw new IllegalArgumentException( + "The URL key of a Shortcut can't be empty"); + } + + if (redirect == null || redirect.trim().isEmpty()) { + throw new IllegalArgumentException( + "The redirect target of a Shortcut can't be empty"); + } + Shortcut shortcut = new Shortcut(); shortcut.setUrlKey(url); shortcut.setRedirect(redirect); @@ -56,30 +66,50 @@ public class ShortcutManager { /** * Creates a Shortcut * - * @param url - * @param redirect + * @param url The URL of the Shortcut. Can't be null. + * @param redirect The URL to which the Shortcut redirects. Can't be null. * @return the new Shortcut */ - public Shortcut createShortcut(final URL url, final URL redirect) { - Shortcut shortcut = new Shortcut(); - shortcut.setUrlKey(url.toString()); - shortcut.setRedirect(redirect.toString()); - return shortcut; - } +// public Shortcut createShortcut(final URL url, final URL redirect) { +// if (url == null) { +// throw new IllegalArgumentException( +// "The URL key of a Shortcut can't be empty"); +// } +// +// if (redirect == null) { +// throw new IllegalArgumentException( +// "The redirect target of a Shortcut can't be empty"); +// } +// +// Shortcut shortcut = new Shortcut(); +// shortcut.setUrlKey(url.toString()); +// shortcut.setRedirect(redirect.toString()); +// return shortcut; +// } /** * Creates a Shortcut * - * @param uri - * @param redirect + * @param uri The URI of the Shortcut. Can't be null. + * @param redirect The URI to which the Shortcut redirects. Can't be null. * @return the new Shortcut */ - public Shortcut createShortcut(final URI uri, final URI redirect) { - Shortcut shortcut = new Shortcut(); - shortcut.setUrlKey(uri.toString()); - shortcut.setRedirect(redirect.toString()); - return shortcut; - } +// public Shortcut createShortcut(final URI uri, final URI redirect) { +// if (uri == null) { +// throw new IllegalArgumentException( +// "The URL key of a Shortcut can't be empty"); +// } +// +// if (redirect == null) { +// throw new IllegalArgumentException( +// "The redirect target of a Shortcut can't be empty"); +// } +// +// Shortcut shortcut = new Shortcut(); +// shortcut.setUrlKey(uri.toString()); +// shortcut.setRedirect(redirect.toString()); +// return shortcut; +// } /** * checks if the Shortcut exists. @@ -87,6 +117,7 @@ public class ShortcutManager { * @return true if the Shortcut exists */ private boolean testShortcut(final Shortcut shortcut) { + //ToDo return true; } @@ -103,5 +134,4 @@ public class ShortcutManager { } - } diff --git a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutRepository.java b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutRepository.java index 778efe123..b9314fb53 100644 --- a/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutRepository.java +++ b/ccm-shortcuts/src/main/java/org/libreccm/shortcuts/ShortcutRepository.java @@ -49,7 +49,7 @@ public class ShortcutRepository extends AbstractEntityRepository * * @param urlKey the wanted urlKey * - * @return The shortcut with the specified urlKey if there is any. + * @return The shortcut with the specified {@code urlKey} if there is any. */ public Optional findByUrlKey(final String urlKey) { final TypedQuery query = getEntityManager().createNamedQuery( @@ -68,7 +68,7 @@ public class ShortcutRepository extends AbstractEntityRepository * Finds all shortcuts which redirect to the provided target. * * @param redirect the wanted redirect - * @return List a List of Shortcuts with the specified redirect + * @return a List of Shortcuts with the specified {@code redirect} */ public List findByRedirect(final String redirect) { final TypedQuery query = getEntityManager().createNamedQuery( diff --git a/ccm-shortcuts/src/main/resources/db/migrations/org/libreccm/ccm_shortcuts/h2/V7_0_0_0__create_tables.sql b/ccm-shortcuts/src/main/resources/db/migrations/org/libreccm/ccm_shortcuts/h2/V7_0_0_0__create_tables.sql new file mode 100644 index 000000000..e24a0df37 --- /dev/null +++ b/ccm-shortcuts/src/main/resources/db/migrations/org/libreccm/ccm_shortcuts/h2/V7_0_0_0__create_tables.sql @@ -0,0 +1,9 @@ +create table SHORTCUTS ( + shortcut_id bigint generated by default as identity, + redirect varchar(1024), + url_key varchar(1024), + primary key (shortcut_id) +); + +alter table CCM_SHORTCUTS.SHORTCUTS + add constraint UK_4otuwtog6qqdbg4e6p8xdpw8h unique (URL_KEY); diff --git a/ccm-shortcuts/src/main/resources/db/migrations/org/libreccm/ccm_shortcuts/pgsql/V7_0_0_0__create_tables.sql b/ccm-shortcuts/src/main/resources/db/migrations/org/libreccm/ccm_shortcuts/pgsql/V7_0_0_0__create_tables.sql new file mode 100644 index 000000000..51d267114 --- /dev/null +++ b/ccm-shortcuts/src/main/resources/db/migrations/org/libreccm/ccm_shortcuts/pgsql/V7_0_0_0__create_tables.sql @@ -0,0 +1,9 @@ +create table SHORTCUTS ( + shortcut_id int8 not null, + redirect varchar(1024), + url_key varchar(1024), + primary key (shortcut_id) +); + +alter table CCM_SHORTCUTS.SHORTCUTS + add constraint UK_4otuwtog6qqdbg4e6p8xdpw8h unique (URL_KEY); diff --git a/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/DatasetsTest.java b/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/DatasetsTest.java new file mode 100644 index 000000000..4a1d70b40 --- /dev/null +++ b/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/DatasetsTest.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.shortcuts; + +import java.util.Arrays; +import java.util.Collection; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.libreccm.tests.categories.UnitTest; +import org.libreccm.testutils.DatasetType; +import org.libreccm.testutils.DatasetsVerifier; + +/** + * + * @author Jens Pelzetter + */ +@RunWith(Parameterized.class) +@Category(UnitTest.class) +public class DatasetsTest extends DatasetsVerifier { + + @Parameterized.Parameters(name = "Dataset {0}") + public static Collection data() { + return Arrays.asList(new String[]{ + "/datasets/org/libreccm/shortcuts/ShortcutRepositoryTest/data.xml", + "/datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml", + "/datasets/org/libreccm/shortcuts/ShortcutManagerTest/after-create.xml" + }); + } + + public DatasetsTest(final String datasetPath) { + super(datasetPath); + } + + @Override + public String[] getSchemas() { + return new String[]{"ccm_core", "ccm_shortcuts"}; + } + + @Override + public DatasetType getDatasetType() { + return DatasetType.FLAT_XML; + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + +} diff --git a/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/ShortcutManagerTest.java b/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/ShortcutManagerTest.java new file mode 100644 index 000000000..ed4b5d7a6 --- /dev/null +++ b/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/ShortcutManagerTest.java @@ -0,0 +1,286 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * 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. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.shortcuts; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.IntStream; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.ShouldThrowException; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.arquillian.junit.InSequence; +import org.jboss.arquillian.persistence.CreateSchema; +import org.jboss.arquillian.persistence.PersistenceTest; +import org.jboss.arquillian.persistence.ShouldMatchDataSet; +import org.jboss.arquillian.persistence.UsingDataSet; +import org.jboss.arquillian.transaction.api.annotation.TransactionMode; +import org.jboss.arquillian.transaction.api.annotation.Transactional; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; +import org.jboss.shrinkwrap.resolver.api.maven.ScopeType; +import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependencies; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.libreccm.tests.categories.IntegrationTest; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; + +/** + * + * @author Jens Pelzetter + */ +@Category(IntegrationTest.class) +@RunWith(Arquillian.class) +@PersistenceTest +@Transactional(TransactionMode.COMMIT) +@CreateSchema({"create_ccm_shortcuts_schema.sql"}) +public class ShortcutManagerTest { + + @Inject + private ShortcutManager shortcutManager; + + @PersistenceContext + private EntityManager entityManager; + + public ShortcutManagerTest() { + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + @Deployment + public static WebArchive createDeployment() { + final PomEquippedResolveStage pom = Maven + .resolver() + .loadPomFromFile("pom.xml"); + final PomEquippedResolveStage dependencies = pom + .importCompileAndRuntimeDependencies(); + dependencies.addDependency(MavenDependencies.createDependency( + "org.libreccm:ccm-core", ScopeType.RUNTIME, false)); + dependencies.addDependency(MavenDependencies.createDependency( + "org.libreccm:ccm-testutils", ScopeType.RUNTIME, false)); + dependencies.addDependency(MavenDependencies.createDependency( + "net.sf.saxon:Saxon-HE", ScopeType.RUNTIME, false)); + dependencies.addDependency(MavenDependencies.createDependency( + "org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven", + ScopeType.RUNTIME, false)); + final File[] libsWithCcmCore = dependencies.resolve().withTransitivity(). + asFile(); + + final List libsList = new ArrayList<>(libsWithCcmCore.length - 1); + IntStream.range(0, libsWithCcmCore.length).forEach(i -> { + final File lib = libsWithCcmCore[i]; + if (!lib.getName().startsWith("ccm-core")) { + libsList.add(lib); + } + }); + final File[] libs = libsList.toArray(new File[libsList.size()]); + + for (File lib : libs) { + System.err.printf("Adding file '%s' to test archive...%n", + lib.getName()); + } + + return ShrinkWrap.create( + WebArchive.class, + "LibreCCM-org.libreccm.shortcuts.ShortcutTest-web.war") + .addPackage(org.libreccm.categorization.Categorization.class + .getPackage()) + .addPackage(org.libreccm.configuration.Configuration.class + .getPackage()) + .addPackage(org.libreccm.core.CcmCore.class.getPackage()) + .addPackage(org.libreccm.jpa.EntityManagerProducer.class + .getPackage()) + .addPackage(org.libreccm.l10n.LocalizedString.class + .getPackage()) + .addPackage(org.libreccm.security.Permission.class.getPackage()) + .addPackage(org.libreccm.shortcuts.Shortcuts.class.getPackage()) + .addPackage(org.libreccm.web.CcmApplication.class.getPackage()) + .addPackage(org.libreccm.workflow.Workflow.class.getPackage()) + .addAsLibraries(libs) + .addAsResource("test-persistence.xml", + "META-INF/persistence.xml") + .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml") + .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml"); + } + + @Test + @InSequence(1) + public void managerIsInjected() { + assertThat(shortcutManager, is(not(nullValue()))); + } + + @Test + @InSequence(2) + public void entityManagerIsInjected() { + assertThat(entityManager, is(not((nullValue())))); + } + + @Test + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") + @ShouldMatchDataSet( + value = "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml", + excludeColumns = {"shortcut_id"}) + @InSequence(100) + public void createShortcutStringParams() { + shortcutManager.createShortcut("datenschutz", + "/ccm/navigation/privacy"); + } + + @Test(expected = IllegalArgumentException.class) + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(110) + public void createShortcutStringParamsNullUrlKey() { + shortcutManager.createShortcut(null, "http://www.example.org"); + } + + @Test(expected = IllegalArgumentException.class) + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(120) + public void createShortcutStringParamsNullRedirect() { + shortcutManager.createShortcut("example", null); + } + + @Test(expected = IllegalArgumentException.class) + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(140) + public void createShortcutStringParamsEmptyUrlKey() { + shortcutManager.createShortcut(" ", "http://www.example.org"); + } + + @Test(expected = IllegalArgumentException.class) + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(150) + public void createShortcutStringParamsEmptyRedirect() { + shortcutManager.createShortcut("example", " "); + } + + @Test(expected = IllegalArgumentException.class) + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(160) + public void createShortcutStringParamsEmptyParams() { + shortcutManager.createShortcut("", ""); + } + +// @Test +// @UsingDataSet( +// "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") +// @ShouldMatchDataSet( +// value = "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml", +// excludeColumns = {"shortcut_id"}) +// @InSequence(200) +// public void createShortcutUrlParams() throws MalformedURLException { +// final URL urlKey = new URL("datenschutz"); +// final URL redirect = new URL("/ccm/navigation/privacy"); +// +// shortcutManager.createShortcut(urlKey, redirect); +// } +// +// @Test(expected = IllegalArgumentException.class) +// @UsingDataSet( +// "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") +// @ShouldThrowException(IllegalArgumentException.class) +// @InSequence(210) +// public void createShortcutUrlParamsNullUrlKey() throws MalformedURLException { +// shortcutManager.createShortcut(null, new URL("http://www.example.org")); +// } +// +// @Test(expected = IllegalArgumentException.class) +// @UsingDataSet( +// "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") +// @ShouldThrowException(IllegalArgumentException.class) +// @InSequence(220) +// public void createShortcutUrlParamsNullRedirect() throws +// MalformedURLException { +// shortcutManager.createShortcut(new URL("example"), null); +// } +// +// @Test +// @UsingDataSet( +// "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") +// @ShouldMatchDataSet( +// value = "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml", +// excludeColumns = {"shortcut_id"}) +// @InSequence(300) +// public void createShortcutUriParams() throws URISyntaxException { +// final URI urlKey = new URI("datenschutz"); +// final URI redirect = new URI("/ccm/navigation/privacy"); +// +// shortcutManager.createShortcut(urlKey, redirect); +// } +// +// @Test(expected = IllegalArgumentException.class) +// @UsingDataSet( +// "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") +// @ShouldThrowException(IllegalArgumentException.class) +// @InSequence(310) +// public void createShortcutUriParamsNullUrlKey() throws URISyntaxException { +// shortcutManager.createShortcut(null, new URI("http://www.example.org")); +// } +// +// @Test(expected = IllegalArgumentException.class) +// @UsingDataSet( +// "datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml") +// @ShouldThrowException(IllegalArgumentException.class) +// @InSequence(320) +// public void createShortcutUriParamsNullRedirect() throws URISyntaxException { +// shortcutManager.createShortcut(new URI("example"), null); +// } +} diff --git a/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/ShortcutRepositoryTest.java b/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/ShortcutRepositoryTest.java index b81397183..1cb7d20d0 100644 --- a/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/ShortcutRepositoryTest.java +++ b/ccm-shortcuts/src/test/java/org/libreccm/shortcuts/ShortcutRepositoryTest.java @@ -27,14 +27,11 @@ import org.jboss.arquillian.transaction.api.annotation.TransactionMode; import org.jboss.arquillian.transaction.api.annotation.Transactional; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.EmptyAsset; -import org.jboss.shrinkwrap.api.spec.EnterpriseArchive; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; import org.jboss.shrinkwrap.resolver.api.maven.ScopeType; import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependencies; -import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenDependency; -import org.jboss.shrinkwrap.resolver.impl.maven.coordinate.MavenDependencyImpl; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -45,10 +42,15 @@ import org.junit.runner.RunWith; import org.libreccm.tests.categories.IntegrationTest; import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.IntStream; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; +import org.jboss.arquillian.persistence.UsingDataSet; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; @@ -90,51 +92,59 @@ public class ShortcutRepositoryTest { } @Deployment - public static EnterpriseArchive createDeployment() { + public static WebArchive createDeployment() { final PomEquippedResolveStage pom = Maven - .resolver() - .loadPomFromFile("pom.xml"); + .resolver() + .loadPomFromFile("pom.xml"); final PomEquippedResolveStage dependencies = pom - .importCompileAndRuntimeDependencies(); + .importCompileAndRuntimeDependencies(); dependencies.addDependency(MavenDependencies.createDependency( - "org.libreccm:ccm-core", ScopeType.RUNTIME, false)); + "org.libreccm:ccm-core", ScopeType.RUNTIME, false)); dependencies.addDependency(MavenDependencies.createDependency( - "org.libreccm:ccm-testutils", ScopeType.RUNTIME, false)); + "org.libreccm:ccm-testutils", ScopeType.RUNTIME, false)); dependencies.addDependency(MavenDependencies.createDependency( - "net.sf.saxon:Saxon-HE", ScopeType.RUNTIME, false)); - final File[] libs = dependencies.resolve().withTransitivity().asFile(); + "net.sf.saxon:Saxon-HE", ScopeType.RUNTIME, false)); + dependencies.addDependency(MavenDependencies.createDependency( + "org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven", + ScopeType.RUNTIME, false)); + final File[] libsWithCcmCore = dependencies.resolve().withTransitivity(). + asFile(); + + final List libsList = new ArrayList<>(libsWithCcmCore.length - 1); + IntStream.range(0, libsWithCcmCore.length).forEach(i -> { + final File lib = libsWithCcmCore[i]; + if (!lib.getName().startsWith("ccm-core")) { + libsList.add(lib); + } + }); + final File[] libs = libsList.toArray(new File[libsList.size()]); for (File lib : libs) { System.err.printf("Adding file '%s' to test archive...%n", lib.getName()); } - final WebArchive webArchive = ShrinkWrap.create( - WebArchive.class, - "LibreCCM-org.libreccm.shortcuts.ShortcutTest-web.war") - // .addPackage(org.libreccm.categorization.Categorization.class - // .getPackage()) - // .addPackage(org.libreccm.configuration.Configuration.class - // .getPackage()) - // .addPackage(org.libreccm.core.CcmCore.class.getPackage()) - // .addPackage(org.libreccm.jpa.EntityManagerProducer.class - // .getPackage()) - // .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()) - // .addPackage(org.libreccm.security.Permission.class.getPackage()) - .addPackage(org.libreccm.shortcuts.Shortcuts.class.getPackage()) - // .addPackage(org.libreccm.web.CcmApplication.class.getPackage()) - // .addPackage(org.libreccm.workflow.Workflow.class.getPackage()) - .addAsLibraries(libs) - .addAsResource("test-persistence.xml", - "META-INF/persistence.xml") - .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml") - .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml"); - return ShrinkWrap.create( - EnterpriseArchive.class, - "LibreCCM-org.libreccm.shortcuts.ShortcutRepositoryTest.ear") - .addAsModule(webArchive) - .addAsResource("application.xml", "application.xml"); + WebArchive.class, + "LibreCCM-org.libreccm.shortcuts.ShortcutTest-web.war") + .addPackage(org.libreccm.categorization.Categorization.class + .getPackage()) + .addPackage(org.libreccm.configuration.Configuration.class + .getPackage()) + .addPackage(org.libreccm.core.CcmCore.class.getPackage()) + .addPackage(org.libreccm.jpa.EntityManagerProducer.class + .getPackage()) + .addPackage(org.libreccm.l10n.LocalizedString.class + .getPackage()) + .addPackage(org.libreccm.security.Permission.class.getPackage()) + .addPackage(org.libreccm.shortcuts.Shortcuts.class.getPackage()) + .addPackage(org.libreccm.web.CcmApplication.class.getPackage()) + .addPackage(org.libreccm.workflow.Workflow.class.getPackage()) + .addAsLibraries(libs) + .addAsResource("test-persistence.xml", + "META-INF/persistence.xml") + .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml") + .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml"); } @Test @@ -149,4 +159,80 @@ public class ShortcutRepositoryTest { assertThat(entityManager, is(not((nullValue())))); } + @Test + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutRepositoryTest/data.xml") + @InSequence(10) + public void findByUrlKey() { + + final Optional members = shortcutRepository.findByUrlKey( + "members"); + final Optional mitglieder = shortcutRepository.findByUrlKey( + "mitglieder"); + final Optional shop = shortcutRepository.findByUrlKey("shop"); + + assertThat(members.isPresent(), is(true)); + assertThat(members.get().getUrlKey(), is(equalTo("members"))); + assertThat(members.get().getRedirect(), + is(equalTo("/ccm/navigation/members"))); + + assertThat(mitglieder.isPresent(), is(true)); + assertThat(mitglieder.get().getUrlKey(), is(equalTo("mitglieder"))); + assertThat(mitglieder.get().getRedirect(), + is(equalTo("/ccm/navigation/members"))); + + assertThat(shop.isPresent(), is(true)); + assertThat(shop.get().getUrlKey(), + is(equalTo("shop"))); + assertThat(shop.get().getRedirect(), + is(equalTo("http://www.example.com"))); + } + + @Test + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutRepositoryTest/data.xml") + @InSequence(10) + public void findByUrlKeyNotExisting() { + final Optional result = shortcutRepository.findByUrlKey( + "foo"); + + assertThat(result, is(not(nullValue()))); + assertThat(result.isPresent(), is(false)); + } + + @Test + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutRepositoryTest/data.xml") + @InSequence(30) + public void findByRedirect() { + + final List toMembers = shortcutRepository.findByRedirect( + "/ccm/navigation/members"); + assertThat(toMembers.size(), is(2)); + assertThat(toMembers.get(0).getUrlKey(), is(equalTo("members"))); + assertThat(toMembers.get(0).getRedirect(), + is(equalTo("/ccm/navigation/members"))); + assertThat(toMembers.get(1).getUrlKey(), is(equalTo("mitglieder"))); + assertThat(toMembers.get(1).getRedirect(), + is(equalTo("/ccm/navigation/members"))); + + final List toExampleCom = shortcutRepository.findByRedirect( + "http://www.example.com"); + assertThat(toExampleCom.size(), is(1)); + assertThat(toExampleCom.get(0).getUrlKey(), is(equalTo("shop"))); + assertThat(toExampleCom.get(0).getRedirect(), + is(equalTo("http://www.example.com"))); + } + + @Test + @UsingDataSet( + "datasets/org/libreccm/shortcuts/ShortcutRepositoryTest/data.xml") + @InSequence(30) + public void findByRedirectNotExisting() { + final List result = shortcutRepository.findByRedirect( + "http://www.example.org"); + + assertThat(result, is(not(nullValue()))); + assertThat(result.isEmpty(), is(true)); + } } diff --git a/ccm-shortcuts/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_shortcuts_schema.sql b/ccm-shortcuts/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_shortcuts_schema.sql index ffd4970f0..7847a8945 100644 --- a/ccm-shortcuts/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_shortcuts_schema.sql +++ b/ccm-shortcuts/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_shortcuts_schema.sql @@ -624,14 +624,15 @@ CREATE SCHEMA ccm_shortcuts; add constraint UK5whinfxdaepqs09e5ia9y71uk unique (CONFIGURATION_CLASS, NAME); create table CCM_SHORTCUTS.SHORTCUTS ( - SHORTCUTS_ID bigint not null, + SHORTCUT_ID bigint not null, REDIRECT varchar(1024), URL_KEY varchar(1024), - primary key (SHORTCUTS_ID) + primary key (SHORTCUT_ID) ); alter table CCM_SHORTCUTS.SHORTCUTS add constraint UK_4otuwtog6qqdbg4e6p8xdpw8h unique (URL_KEY); + create sequence hibernate_sequence start with 1 increment by 1; alter table CCM_CORE.APPLICATIONS diff --git a/ccm-shortcuts/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_shortcuts_schema.sql b/ccm-shortcuts/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_shortcuts_schema.sql index a39e1f8b3..494f66b01 100644 --- a/ccm-shortcuts/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_shortcuts_schema.sql +++ b/ccm-shortcuts/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_shortcuts_schema.sql @@ -624,10 +624,10 @@ CREATE SCHEMA ccm_shortcuts; add constraint UK5whinfxdaepqs09e5ia9y71uk unique (CONFIGURATION_CLASS, NAME); create table CCM_SHORTCUTS.SHORTCUTS ( - SHORTCUTS_ID int8 not null, + SHORTCUT_ID int8 not null, REDIRECT varchar(1024), URL_KEY varchar(1024), - primary key (SHORTCUTS_ID) + primary key (SHORTCUT_ID) ); alter table CCM_SHORTCUTS.SHORTCUTS diff --git a/ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutManagerTest/after-create.xml b/ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutManagerTest/after-create.xml new file mode 100644 index 000000000..4d6919d68 --- /dev/null +++ b/ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutManagerTest/after-create.xml @@ -0,0 +1,19 @@ + + + + + + + + + diff --git a/ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml b/ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml new file mode 100644 index 000000000..420534b49 --- /dev/null +++ b/ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutManagerTest/data.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutRepositoryTest/data.xml b/ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutRepositoryTest/data.xml new file mode 100644 index 000000000..420534b49 --- /dev/null +++ b/ccm-shortcuts/src/test/resources/datasets/org/libreccm/shortcuts/ShortcutRepositoryTest/data.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/ccm-testutils/src/main/java/org/libreccm/testutils/DatasetsVerifier.java b/ccm-testutils/src/main/java/org/libreccm/testutils/DatasetsVerifier.java index 9000d22e0..c3d86aba0 100644 --- a/ccm-testutils/src/main/java/org/libreccm/testutils/DatasetsVerifier.java +++ b/ccm-testutils/src/main/java/org/libreccm/testutils/DatasetsVerifier.java @@ -108,7 +108,10 @@ public class DatasetsVerifier { if (getSchemas().length > 0) { buffer.append(";INIT="); for (final String schema : getSchemas()) { - buffer.append(String.format("CREATE SCHEMA IF NOT EXISTS %s;", + if (buffer.length() > 0) { + buffer.append("\\;"); + } + buffer.append(String.format("CREATE SCHEMA IF NOT EXISTS %s", schema)); } }