1   package com.atlassian.maven.plugins.amps;
2   
3   import junit.framework.TestCase;
4   import org.apache.maven.model.Build;
5   import org.apache.maven.model.Plugin;
6   import org.apache.maven.plugin.MojoExecutionException;
7   import org.apache.maven.plugin.MojoFailureException;
8   import org.apache.maven.project.MavenProject;
9   
10  import java.io.File;
11  import java.lang.reflect.Field;
12  import java.util.Collections;
13  import java.util.HashMap;
14  import java.util.Map;
15  
16  import static java.util.Arrays.asList;
17  import static java.util.Collections.emptyList;
18  import static org.mockito.Mockito.mock;
19  import static org.mockito.Mockito.when;
20  
21  public class TestAbstractProductHandlerMojo extends TestCase
22  {
23      public void testMakeProductsInheritDefaultConfiguration() throws Exception
24      {
25          SomeMojo mojo = new SomeMojo("foo");
26  
27          Product fooProd = new Product();
28          fooProd.setInstanceId("foo");
29          fooProd.setVersion("1.0");
30  
31          Product barProd = new Product();
32          barProd.setInstanceId("bar");
33          barProd.setVersion("2.0");
34  
35          Map<String,Product> prodMap = new HashMap<String, Product>();
36          mojo.makeProductsInheritDefaultConfiguration(asList(fooProd, barProd), prodMap);
37          assertEquals(2, prodMap.size());
38          assertEquals("1.0", prodMap.get("foo").getVersion());
39          assertEquals("/foo", prodMap.get("foo").getContextPath());
40          assertEquals("2.0", prodMap.get("bar").getVersion());
41          assertEquals("/foo", prodMap.get("bar").getContextPath());
42      }
43  
44      public void testMakeProductsInheritDefaultConfigurationDifferentInstanceIds() throws Exception
45      {
46          SomeMojo mojo = new SomeMojo("baz");
47  
48          Product fooProd = new Product();
49          fooProd.setInstanceId("foo");
50          fooProd.setVersion("1.0");
51  
52          Product barProd = new Product();
53          barProd.setInstanceId("bar");
54          barProd.setVersion("2.0");
55  
56          Map<String,Product> prodMap = new HashMap<String, Product>();
57          mojo.makeProductsInheritDefaultConfiguration(asList(fooProd, barProd), prodMap);
58          assertEquals(3, prodMap.size());
59          assertEquals("1.0", prodMap.get("foo").getVersion());
60          assertEquals("/foo", prodMap.get("foo").getContextPath());
61          assertEquals("2.0", prodMap.get("bar").getVersion());
62          assertEquals("/foo", prodMap.get("bar").getContextPath());
63          assertEquals(null, prodMap.get("baz").getVersion());
64          assertEquals("/foo", prodMap.get("baz").getContextPath());
65      }
66  
67      public void testMakeProductsInheritDefaultConfigurationNoProducts() throws Exception
68      {
69          SomeMojo mojo = new SomeMojo("foo");
70  
71          Map<String,Product> prodMap = new HashMap<String, Product>();
72          mojo.makeProductsInheritDefaultConfiguration(Collections.<Product>emptyList(), prodMap);
73          assertEquals(1, prodMap.size());
74          assertEquals("/foo", prodMap.get("foo").getContextPath());
75      }
76  
77      public static class SomeMojo extends AbstractProductHandlerMojo
78      {
79          private final String defaultProductId;
80  
81          public SomeMojo(String defaultProductId)
82          {
83              this.defaultProductId = defaultProductId;
84              contextPath = "/foo";
85          }
86  
87          @Override
88          protected String getDefaultProductId() throws MojoExecutionException
89          {
90              return defaultProductId;
91          }
92  
93          @Override
94          protected void doExecute() throws MojoExecutionException, MojoFailureException
95          {
96  
97          }
98  
99          @Override
100         protected MavenContext getMavenContext()
101         {
102             MavenProject project = mock(MavenProject.class);
103             Build build = mock(Build.class);
104             when(build.getTestOutputDirectory()).thenReturn(".");
105             when(project.getBuild()).thenReturn(build);
106             MavenContext ctx = new MavenContext(project, null, null, null, null);
107             return ctx;
108         }
109     }
110 }