This is an automated email from the ASF dual-hosted git repository.

davidb pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-slingfeature-maven-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new 8879c83  SLING-7860 Enhance slingfeature-maven-plugin to aggregate 
multiple features into a single feature
8879c83 is described below

commit 8879c83fdf84078d399456ed7b16d74ef192e7c3
Author: David Bosschaert <[email protected]>
AuthorDate: Wed Aug 29 09:47:06 2018 +0100

    SLING-7860 Enhance slingfeature-maven-plugin to aggregate multiple features 
into a single feature
    
    Additional unit test
---
 .../feature/maven/mojos/AggregateFeaturesTest.java | 69 +++++++++++++++++++++-
 .../resources/aggregate-features/dir/test_y.json   |  9 +++
 .../resources/aggregate-features/dir/test_z.json   | 12 ++++
 3 files changed, 87 insertions(+), 3 deletions(-)

diff --git 
a/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesTest.java 
b/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesTest.java
index c468b24..3b04ede 100644
--- 
a/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesTest.java
+++ 
b/src/test/java/org/apache/sling/feature/maven/mojos/AggregateFeaturesTest.java
@@ -44,7 +44,11 @@ import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Dictionary;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
@@ -102,6 +106,66 @@ public class AggregateFeaturesTest {
     }
 
     @Test
+    public void testAggregateFeaturesFromDirectory() throws Exception {
+        File featuresDir = new File(
+                getClass().getResource("/aggregate-features/dir").getFile());
+
+        FeatureConfig fc = new FeatureConfig();
+        fc.location = featuresDir.getAbsolutePath();
+
+        Build mockBuild = Mockito.mock(Build.class);
+        Mockito.when(mockBuild.getDirectory()).thenReturn(tempDir.toString());
+
+        MavenProject mockProj = Mockito.mock(MavenProject.class);
+        Mockito.when(mockProj.getBuild()).thenReturn(mockBuild);
+        Mockito.when(mockProj.getGroupId()).thenReturn("org.foo");
+        Mockito.when(mockProj.getArtifactId()).thenReturn("org.foo.bar");
+        Mockito.when(mockProj.getVersion()).thenReturn("1.2.3-SNAPSHOT");
+
+        AggregateFeatures af = new AggregateFeatures();
+        af.classifier = "aggregated";
+        af.features = Collections.singletonList(fc);
+        af.project = mockProj;
+
+        af.execute();
+
+        File expectedFile = new File(tempDir.toFile(), 
FeatureConstants.FEATURE_PROCESSED_LOCATION + "/aggregated.json");
+        try (Reader fr = new FileReader(expectedFile)) {
+            Feature genFeat = FeatureJSONReader.read(fr, null, 
FeatureJSONReader.SubstituteVariables.NONE);
+            ArtifactId id = genFeat.getId();
+
+            assertEquals("org.foo", id.getGroupId());
+            assertEquals("org.foo.bar", id.getArtifactId());
+            assertEquals("1.2.3-SNAPSHOT", id.getVersion());
+            assertEquals("slingfeature", id.getType());
+            assertEquals("aggregated", id.getClassifier());
+
+            int numBundlesFound = 0;
+            for (org.apache.sling.feature.Artifact art : genFeat.getBundles()) 
{
+                numBundlesFound++;
+
+                ArtifactId expectedBundleCoords =
+                        new ArtifactId("org.apache.aries", 
"org.apache.aries.util", "1.1.3", null, null);
+                assertEquals(expectedBundleCoords, art.getId());
+            }
+            assertEquals("Expected only one bundle", 1, numBundlesFound);
+
+            Map<String, Dictionary<String, Object>> expectedConfigs = new 
HashMap<>();
+            expectedConfigs.put("some.pid", new 
Hashtable<>(Collections.singletonMap("x", "y")));
+            Dictionary<String, Object> dict = new Hashtable<>();
+            dict.put("foo", 123L);
+            dict.put("bar", Boolean.TRUE);
+            expectedConfigs.put("another.pid", dict);
+
+            Map<String, Dictionary<String, Object>> actualConfigs = new 
HashMap<>();
+            for (org.apache.sling.feature.Configuration conf : 
genFeat.getConfigurations()) {
+                actualConfigs.put(conf.getPid(), conf.getProperties());
+            }
+            assertEquals(expectedConfigs, actualConfigs);
+        }
+    }
+
+    @Test
     public void testReadFeatureFromArtifact() throws Exception {
         File featureFile = new File(
                 
getClass().getResource("/aggregate-features/test_x.json").getFile());
@@ -168,15 +232,14 @@ public class AggregateFeaturesTest {
             assertEquals("mynewfeature", id.getClassifier());
 
             int numFound = 0;
-            for (org.apache.sling.feature.Artifact art :
-                (Iterable<org.apache.sling.feature.Artifact>) () -> 
genFeat.getBundles().iterator()) {
+            for (org.apache.sling.feature.Artifact art : genFeat.getBundles()) 
{
                 numFound++;
 
                 ArtifactId expectedBundleCoords =
                         new ArtifactId("mygroup", "org.apache.aries.util", 
"1.1.3", null, null);
                 assertEquals(expectedBundleCoords, art.getId());
             }
-            assertEquals("Expectec only one bundle", 1, numFound);
+            assertEquals("Expected only one bundle", 1, numFound);
         }
     }
 
diff --git a/src/test/resources/aggregate-features/dir/test_y.json 
b/src/test/resources/aggregate-features/dir/test_y.json
new file mode 100644
index 0000000..08c5416
--- /dev/null
+++ b/src/test/resources/aggregate-features/dir/test_y.json
@@ -0,0 +1,9 @@
+{
+  "id":"test:y:9.9.9",
+  "bundles":[
+    {
+      "id":"org.apache.aries:org.apache.aries.util:1.1.3",
+      "start-level":"20"
+    }
+  ]
+}
diff --git a/src/test/resources/aggregate-features/dir/test_z.json 
b/src/test/resources/aggregate-features/dir/test_z.json
new file mode 100644
index 0000000..9ad87e5
--- /dev/null
+++ b/src/test/resources/aggregate-features/dir/test_z.json
@@ -0,0 +1,12 @@
+{
+  "id":"test:z:1.0.1",
+  "configurations": {
+    "some.pid": {
+      "x": "y"
+    },
+    "another.pid": {
+      "foo": 123,
+      "bar": true
+    }
+  }
+}

Reply via email to