Merge pull request #1 from myrle-krantz/develop

Validating ApplicationName parameters. 
diff --git a/api/build.gradle b/api/build.gradle
index 681d0c7..8409313 100644
--- a/api/build.gradle
+++ b/api/build.gradle
@@ -20,6 +20,10 @@
             [group: 'io.mifos.core', name: 'api', version: versions.frameworkapi],
             [group: 'org.hibernate', name: 'hibernate-validator', version: versions.validator]
     )
+
+    testCompile(
+            [group: 'io.mifos.core', name: 'test', version: versions.frameworktest],
+    )
 }
 
 publishing {
diff --git a/api/src/main/java/io/mifos/provisioner/api/v1/domain/Application.java b/api/src/main/java/io/mifos/provisioner/api/v1/domain/Application.java
index 4c9bfdb..b3c3ecd 100644
--- a/api/src/main/java/io/mifos/provisioner/api/v1/domain/Application.java
+++ b/api/src/main/java/io/mifos/provisioner/api/v1/domain/Application.java
@@ -15,15 +15,12 @@
  */
 package io.mifos.provisioner.api.v1.domain;
 
-import io.mifos.core.lang.validation.constraints.ValidIdentifier;
+import io.mifos.core.lang.validation.constraints.ValidApplicationName;
 
-import javax.validation.constraints.NotNull;
-
-@SuppressWarnings("unused")
+@SuppressWarnings({"unused", "WeakerAccess"})
 public class Application {
 
-  @NotNull
-  @ValidIdentifier //name should be URL-safe.
+  @ValidApplicationName
   private String name;
   private String description;
   private String vendor;
diff --git a/api/src/main/java/io/mifos/provisioner/api/v1/domain/AssignedApplication.java b/api/src/main/java/io/mifos/provisioner/api/v1/domain/AssignedApplication.java
index 76e1898..afba3e9 100644
--- a/api/src/main/java/io/mifos/provisioner/api/v1/domain/AssignedApplication.java
+++ b/api/src/main/java/io/mifos/provisioner/api/v1/domain/AssignedApplication.java
@@ -15,15 +15,12 @@
  */
 package io.mifos.provisioner.api.v1.domain;
 
-import io.mifos.core.lang.validation.constraints.ValidIdentifier;
+import io.mifos.core.lang.validation.constraints.ValidApplicationName;
 
-import javax.validation.constraints.NotNull;
-
-@SuppressWarnings("unused")
+@SuppressWarnings({"unused", "WeakerAccess"})
 public class AssignedApplication {
 
-  @NotNull
-  @ValidIdentifier
+  @ValidApplicationName
   private String name;
 
   public AssignedApplication() {
diff --git a/api/src/test/java/io/mifos/provisioner/api/v1/domain/ApplicationTest.java b/api/src/test/java/io/mifos/provisioner/api/v1/domain/ApplicationTest.java
new file mode 100644
index 0000000..96f426c
--- /dev/null
+++ b/api/src/test/java/io/mifos/provisioner/api/v1/domain/ApplicationTest.java
@@ -0,0 +1,44 @@
+package io.mifos.provisioner.api.v1.domain;
+
+import io.mifos.core.test.domain.ValidationTest;
+import io.mifos.core.test.domain.ValidationTestCase;
+import org.junit.runners.Parameterized;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * @author Myrle Krantz
+ */
+public class ApplicationTest extends ValidationTest<Application> {
+
+  public ApplicationTest(ValidationTestCase<Application> testCase) {
+    super(testCase);
+  }
+
+  @Override
+  protected Application createValidTestSubject() {
+    final Application ret = new Application();
+    ret.setName("bebop-v3");
+    ret.setHomepage("http://xyz.bebop:2021/v1");
+    ret.setDescription("bebop manager");
+    ret.setVendor("fineract");
+    return ret;
+  }
+
+  @Parameterized.Parameters
+  public static Collection testCases() {
+    final Collection<ValidationTestCase> ret = new ArrayList<>();
+    ret.add(new ValidationTestCase<Application>("basicCase")
+            .adjustment(x -> {})
+            .valid(true));
+    ret.add(new ValidationTestCase<Application>("invalidApplicationName")
+            .adjustment(x -> x.setName("bebop-dowop"))
+            .valid(false));
+    ret.add(new ValidationTestCase<Application>("nullApplicationName")
+            .adjustment(x -> x.setName(null))
+            .valid(false));
+    return ret;
+  }
+
+}
\ No newline at end of file
diff --git a/api/src/test/java/io/mifos/provisioner/api/v1/domain/AssignedApplicationTest.java b/api/src/test/java/io/mifos/provisioner/api/v1/domain/AssignedApplicationTest.java
new file mode 100644
index 0000000..19f4f9f
--- /dev/null
+++ b/api/src/test/java/io/mifos/provisioner/api/v1/domain/AssignedApplicationTest.java
@@ -0,0 +1,41 @@
+package io.mifos.provisioner.api.v1.domain;
+
+import io.mifos.core.test.domain.ValidationTest;
+import io.mifos.core.test.domain.ValidationTestCase;
+import org.junit.runners.Parameterized;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * @author Myrle Krantz
+ */
+public class AssignedApplicationTest extends ValidationTest<AssignedApplication> {
+
+  public AssignedApplicationTest(ValidationTestCase<AssignedApplication> testCase) {
+    super(testCase);
+  }
+
+  @Override
+  protected AssignedApplication createValidTestSubject() {
+    final AssignedApplication ret = new AssignedApplication();
+    ret.setName("bebop-v3");
+    return ret;
+  }
+
+  @Parameterized.Parameters
+  public static Collection testCases() {
+    final Collection<ValidationTestCase> ret = new ArrayList<>();
+    ret.add(new ValidationTestCase<AssignedApplication>("basicCase")
+            .adjustment(x -> {})
+            .valid(true));
+    ret.add(new ValidationTestCase<AssignedApplication>("invalidApplicationName")
+            .adjustment(x -> x.setName("bebop-dowop"))
+            .valid(false));
+    ret.add(new ValidationTestCase<AssignedApplication>("nullApplicationName")
+            .adjustment(x -> x.setName(null))
+            .valid(false));
+    return ret;
+  }
+
+}
\ No newline at end of file
diff --git a/shared.gradle b/shared.gradle
index 4535a5d..8a2c8dc 100644
--- a/shared.gradle
+++ b/shared.gradle
@@ -10,6 +10,7 @@
         frameworkcassandra   : '0.1.0-BUILD-SNAPSHOT',
         frameworkmariadb     : '0.1.0-BUILD-SNAPSHOT',
         frameworkcrypto      : '0.1.0-BUILD-SNAPSHOT',
+        frameworktest        : '0.1.0-BUILD-SNAPSHOT',
         validator            : '5.3.0.Final'
 ]