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));
}
}