1   package com.atlassian.maven.plugins.amps;
2   
3   import org.apache.maven.model.Build;
4   import org.apache.maven.plugin.MojoExecutionException;
5   import org.apache.maven.plugin.MojoFailureException;
6   import org.apache.maven.plugin.PluginManager;
7   import org.apache.maven.project.MavenProject;
8   import org.junit.Test;
9   
10  import java.io.File;
11  import java.util.Collections;
12  import java.util.HashMap;
13  import java.util.Map;
14  
15  import static java.util.Arrays.asList;
16  import static org.junit.Assert.assertEquals;
17  import static org.mockito.Mockito.mock;
18  import static org.mockito.Mockito.when;
19  
20  public class TestAbstractProductHandlerMojo
21  {
22      @Test
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      @Test
45      public void testMakeProductsInheritDefaultConfigurationDifferentInstanceIds() throws Exception
46      {
47          SomeMojo mojo = new SomeMojo("baz");
48  
49          Product fooProd = new Product();
50          fooProd.setInstanceId("foo");
51          fooProd.setVersion("1.0");
52  
53          Product barProd = new Product();
54          barProd.setInstanceId("bar");
55          barProd.setVersion("2.0");
56  
57          Map<String,Product> prodMap = new HashMap<String, Product>();
58          mojo.makeProductsInheritDefaultConfiguration(asList(fooProd, barProd), prodMap);
59          assertEquals(3, prodMap.size());
60          assertEquals("1.0", prodMap.get("foo").getVersion());
61          assertEquals("/foo", prodMap.get("foo").getContextPath());
62          assertEquals("2.0", prodMap.get("bar").getVersion());
63          assertEquals("/foo", prodMap.get("bar").getContextPath());
64          assertEquals(null, prodMap.get("baz").getVersion());
65          assertEquals("/foo", prodMap.get("baz").getContextPath());
66      }
67  
68      @Test
69      public void testMakeProductsInheritDefaultConfigurationNoProducts() throws Exception
70      {
71          SomeMojo mojo = new SomeMojo("foo");
72  
73          Map<String,Product> prodMap = new HashMap<String, Product>();
74          mojo.makeProductsInheritDefaultConfiguration(Collections.<Product>emptyList(), prodMap);
75          assertEquals(1, prodMap.size());
76          assertEquals("/foo", prodMap.get("foo").getContextPath());
77      }
78  
79      public static class SomeMojo extends AbstractProductHandlerMojo
80      {
81          private final String defaultProductId;
82  
83          public SomeMojo(String defaultProductId)
84          {
85              this.defaultProductId = defaultProductId;
86              contextPath = "/foo";
87          }
88  
89          @Override
90          protected String getDefaultProductId() throws MojoExecutionException
91          {
92              return defaultProductId;
93          }
94  
95          @Override
96          protected void doExecute() throws MojoExecutionException, MojoFailureException
97          {
98  
99          }
100 
101         @Override
102         protected MavenContext getMavenContext()
103         {
104             MavenProject project = mock(MavenProject.class);
105             Build build = mock(Build.class);
106             when(build.getTestOutputDirectory()).thenReturn(".");
107             when(project.getBuild()).thenReturn(build);
108             when(project.getBasedir()).thenReturn(new File("."));
109             return new MavenContext(project, null, null, (PluginManager) null, null);
110         }
111 
112         @Override
113         protected PluginInformation getPluginInformation() {
114             return new PluginInformation("test-product", "Test SDK Version");
115         }
116     }
117 }