PageRenderTime 58ms CodeModel.GetById 20ms app.highlight 31ms RepoModel.GetById 1ms app.codeStats 1ms

/maven-amps-plugin/src/test/java/com/atlassian/maven/plugins/amps/product/studio/TestStudioProductHandler.java

https://bitbucket.org/mmeinhold/amps
Java | 191 lines | 163 code | 24 blank | 4 comment | 1 complexity | 0ef729791f1188967b1418c9ab648891 MD5 | raw file
  1package com.atlassian.maven.plugins.amps.product.studio;
  2
  3import com.atlassian.maven.plugins.amps.MavenContext;
  4import com.atlassian.maven.plugins.amps.MavenGoals;
  5import com.atlassian.maven.plugins.amps.Product;
  6import com.google.inject.internal.util.ImmutableMap;
  7import com.google.inject.internal.util.Maps;
  8import org.apache.commons.io.FileUtils;
  9import org.apache.maven.model.Build;
 10import org.apache.maven.model.Model;
 11import org.apache.maven.plugin.MojoExecutionException;
 12import org.apache.maven.plugin.logging.Log;
 13import org.apache.maven.project.MavenProject;
 14import org.junit.After;
 15import org.junit.Before;
 16import org.junit.Ignore;
 17import org.junit.Test;
 18import org.junit.runner.RunWith;
 19import org.mockito.Mock;
 20import org.mockito.runners.MockitoJUnitRunner;
 21
 22import java.io.File;
 23import java.util.Map;
 24
 25import static com.atlassian.maven.plugins.amps.product.ProductHandlerFactory.STUDIO;
 26import static com.atlassian.maven.plugins.amps.product.ProductHandlerFactory.STUDIO_BAMBOO;
 27import static com.atlassian.maven.plugins.amps.product.ProductHandlerFactory.STUDIO_CONFLUENCE;
 28import static com.atlassian.maven.plugins.amps.product.ProductHandlerFactory.STUDIO_CROWD;
 29import static com.atlassian.maven.plugins.amps.product.ProductHandlerFactory.STUDIO_FECRU;
 30import static com.atlassian.maven.plugins.amps.product.ProductHandlerFactory.STUDIO_JIRA;
 31import static org.junit.Assert.assertEquals;
 32import static org.mockito.Mockito.verify;
 33import static org.mockito.Mockito.when;
 34
 35/**
 36 * Test case for {@link com.atlassian.maven.plugins.amps.product.studio.StudioProductHandler}.
 37 *
 38 */
 39@RunWith(MockitoJUnitRunner.class)
 40public class TestStudioProductHandler
 41{
 42    private static final String TEST_ONDEMAND_VERSION = "131";
 43
 44    @Mock private MavenContext mockContext;
 45
 46    @Mock private MavenProject mockProject;
 47
 48    @Mock private Build mockBuild;
 49
 50    @Mock private Log mockLog;
 51
 52    @Mock private MavenGoals mockGoals;
 53
 54    private File mockBuildDir;
 55
 56    @Before
 57    public void initMocks()
 58    {
 59        mockBuildDir = new File(System.getProperty("java.io.tmpdir"), "TestStudioProductHandler");
 60        when(mockBuild.getDirectory()).thenReturn(mockBuildDir.getAbsolutePath());
 61        when(mockProject.getBuild()).thenReturn(mockBuild);
 62        when(mockContext.getProject()).thenReturn(mockProject);
 63        when(mockContext.getLog()).thenReturn(mockLog);
 64    }
 65
 66    @After
 67    public void deleteMockBuildDir()
 68    {
 69        FileUtils.deleteQuietly(mockBuildDir);
 70    }
 71
 72    @Ignore("AMPS-757 - Studio products are disabled")
 73    @Test
 74    public void configureProductsShouldSetCorrectJiraVersionFromOnDemandPom() throws MojoExecutionException
 75    {
 76        final Model model = new Model();
 77        model.addProperty("jira.version", "5.0");
 78        final TestedStudioProductHandler testedHandler = new TestedStudioProductHandler(mockContext, mockGoals, model);
 79        final Product jira = createProduct(STUDIO_JIRA, null);
 80        Map<String,Product> products = createProductsWith(STUDIO_JIRA, jira);
 81        initDefaultValues(products);
 82        testedHandler.configureStudioProducts(products);
 83        assertEquals("5.0", jira.getVersion());
 84    }
 85
 86    @Ignore("AMPS-757 - Studio products are disabled")
 87    @Test
 88    public void configureProductsShouldSetCorrectConfluenceVersionFromOnDemandPom() throws MojoExecutionException
 89    {
 90        final Model model = new Model();
 91        model.addProperty("confluence.version", "4.2");
 92        final TestedStudioProductHandler testedHandler = new TestedStudioProductHandler(mockContext, mockGoals, model);
 93        final Product confluence = createProduct(STUDIO_CONFLUENCE, null);
 94        Map<String,Product> products = createProductsWith(STUDIO_CONFLUENCE, confluence);
 95        initDefaultValues(products);
 96        testedHandler.configureStudioProducts(products);
 97        assertEquals("4.2", confluence.getVersion());
 98    }
 99
100    @Ignore("AMPS-757 - Studio products are disabled")
101    @Test
102    public void configureProductsShouldSetOnDemandFecruVersion() throws MojoExecutionException
103    {
104        final Model model = new Model();
105        model.addProperty("crucible.version", "2.8");
106        final TestedStudioProductHandler testedHandler = new TestedStudioProductHandler(mockContext, mockGoals, model);
107        final Product fecru = createProduct(STUDIO_FECRU, null);
108        Map<String,Product> products = createProductsWith(STUDIO_FECRU, fecru);
109        initDefaultValues(products);
110        testedHandler.configureStudioProducts(products);
111        assertEquals(TEST_ONDEMAND_VERSION, fecru.getVersion());
112    }
113
114    @Ignore("AMPS-757 - Studio products are disabled")
115    @Test
116    public void configureProductsShouldLogWarningIfJiraVersionNotPresentInOnDemandPom() throws MojoExecutionException
117    {
118        final Model model = new Model();
119        model.addProperty("confluence.version", "4.2");
120        final TestedStudioProductHandler testedHandler = new TestedStudioProductHandler(mockContext, mockGoals, model);
121        testedHandler.configureStudioProducts(createDefaultStudioProducts());
122        verify(mockLog).warn("Expected property 'jira.version' in the OnDemand fireball POM (version "
123                        + TEST_ONDEMAND_VERSION + ") not found. OnDemand version will be used instead");
124    }
125
126    @Ignore("AMPS-757 - Studio products are disabled")
127    @Test
128    public void configureProductsShouldLogWarningIfConfluenceVersionNotPresentInOnDemandPom() throws MojoExecutionException
129    {
130        final Model model = new Model();
131        model.addProperty("jira.version", "5.1");
132        final TestedStudioProductHandler testedHandler = new TestedStudioProductHandler(mockContext, mockGoals, model);
133        testedHandler.configureStudioProducts(createDefaultStudioProducts());
134        verify(mockLog).warn("Expected property 'confluence.version' in the OnDemand fireball POM (version "
135                        + TEST_ONDEMAND_VERSION + ") not found. OnDemand version will be used instead");
136    }
137
138    private void initDefaultValues(Map<String,Product> products)
139    {
140        for (Product product : products.values())
141        {
142            StudioProductHandler.setDefaultValues(mockContext, product);
143        }
144    }
145
146    private Map<String,Product> createProductsWith(String productId, Product product)
147    {
148        final Map<String,Product> products = Maps.newHashMap();
149        products.putAll(createDefaultStudioProducts());
150        products.put(productId, product);
151        return ImmutableMap.copyOf(products);
152    }
153
154    private Map<String,Product> createDefaultStudioProducts()
155    {
156        return ImmutableMap.<String,Product>builder()
157            .put(STUDIO, createProduct(STUDIO, TEST_ONDEMAND_VERSION))
158            .put(STUDIO_JIRA, createProduct(STUDIO_JIRA, "5.0"))
159            .put(STUDIO_CROWD, createProduct(STUDIO_CROWD, TEST_ONDEMAND_VERSION))
160            .put(STUDIO_CONFLUENCE, createProduct(STUDIO_CONFLUENCE, "4.1"))
161            .put(STUDIO_BAMBOO, createProduct(STUDIO_BAMBOO, TEST_ONDEMAND_VERSION))
162            .put(STUDIO_FECRU, createProduct(STUDIO_FECRU, TEST_ONDEMAND_VERSION))
163            .build();
164    }
165
166    private Product createProduct(String id, String version)
167    {
168        final Product answer = new Product();
169        answer.setId(id);
170        answer.setInstanceId(id);
171        answer.setVersion(version);
172        return answer;
173    }
174
175    private static class TestedStudioProductHandler extends StudioProductHandler
176    {
177        private final Model onDemandModelMock;
178
179        public TestedStudioProductHandler(MavenContext context, MavenGoals goals, Model onDemandModelMock)
180        {
181            super(context, goals);
182            this.onDemandModelMock = onDemandModelMock;
183        }
184
185        @Override
186        protected Model getOnDemandPomModel(Product ondemand, StudioProperties properties) throws MojoExecutionException
187        {
188            return onDemandModelMock;
189        }
190    }
191}