/* This file is part of Delivery Pipeline Plugin. Delivery Pipeline Plugin is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Delivery Pipeline Plugin is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Delivery Pipeline Plugin. If not, see <http://www.gnu.org/licenses/>. */ package se.diabol.jenkins.pipeline.domain.status.promotion; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyObject; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import hudson.model.AbstractBuild; import hudson.model.BooleanParameterValue; import hudson.model.BuildBadgeAction; import hudson.model.FileParameterValue; import hudson.model.ParameterValue; import hudson.model.StringParameterValue; import hudson.plugins.promoted_builds.Promotion; import hudson.plugins.promoted_builds.Status; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import java.util.ArrayList; import java.util.Collections; import java.util.List; @RunWith(PowerMockRunner.class) @PrepareForTest(Status.class) public class PromotionStatusProviderTest { @SuppressWarnings("unchecked") @Test public void testIsBuildPromotedWhenThereAreNoPromotions() { final AbstractBuild<?, ?> mockBuild = mock(AbstractBuild.class); when(mockBuild.getAction(any(Class.class))).thenReturn(mock(BuildBadgeAction.class)); final PromotionStatusProvider.PromotedBuildActionWrapper mockPromotedBuildActionWrapper = mock(PromotionStatusProvider.PromotedBuildActionWrapper.class); when(mockPromotedBuildActionWrapper.getPromotions(mockBuild)).thenReturn(Collections.<Status>emptyList()); final PromotionStatusProvider promotionStatusProvider = new PromotionStatusProvider(); promotionStatusProvider.setPromotedBuildActionWrapper(mockPromotedBuildActionWrapper); final boolean isPromoted = promotionStatusProvider.isBuildPromoted(mockBuild); assertFalse(isPromoted); } @SuppressWarnings("unchecked") @Test public void testIsBuildPromotedWhenThereArePromotions() { final AbstractBuild<?, ?> mockBuild = mock(AbstractBuild.class); when(mockBuild.getAction(any(Class.class))).thenReturn(mock(BuildBadgeAction.class)); final List<Status> mockPromotionList = new ArrayList<Status>(); PowerMockito.mockStatic(Status.class); mockPromotionList.add(mock(Status.class)); final PromotionStatusProvider.PromotedBuildActionWrapper mockPromotedBuildActionWrapper = mock(PromotionStatusProvider.PromotedBuildActionWrapper.class); when(mockPromotedBuildActionWrapper.getPromotions(anyObject())).thenReturn(mockPromotionList); final PromotionStatusProvider promotionStatusProvider = new PromotionStatusProvider(); promotionStatusProvider.setPromotedBuildActionWrapper(mockPromotedBuildActionWrapper); final boolean isPromoted = promotionStatusProvider.isBuildPromoted(mockBuild); assertTrue(isPromoted); } @SuppressWarnings("unchecked") @Test public void testGetPromotionStatusList() { final String stringParamName = "StringParamName"; final String stringParamValue = "Param Value"; final String booleanParamName = "BooleanParamName"; final boolean booleanParamValue = true; final String fileParamValue = "File Path"; final String promotionUserName = "User"; final String promotionIcon = "16x16-icon"; final String promotion1Name = "Promotion-1"; final long promotionStartTime = 0L; final long promotionDuration = 0L; final String promotion2Name = "Promotion-2"; final List<ParameterValue> mockParameterValues = new ArrayList<ParameterValue>(); mockParameterValues.add(new StringParameterValue(stringParamName, stringParamValue)); mockParameterValues.add(new BooleanParameterValue(booleanParamName, booleanParamValue)); final FileParameterValue mockFileParam = mock(FileParameterValue.class); when(mockFileParam.getLocation()).thenReturn(fileParamValue); mockParameterValues.add(mockFileParam); final Promotion mockPromotionFirst = mock(Promotion.class); when(mockPromotionFirst.getUserName()).thenReturn(promotionUserName); when(mockPromotionFirst.getParameterValues()).thenReturn(mockParameterValues); final Promotion mockPromotionSecond = mock(Promotion.class); when(mockPromotionSecond.getParameterValues()).thenReturn(mockParameterValues); final List<Promotion> mockPromotions = new ArrayList<Promotion>(); mockPromotions.add(mockPromotionFirst); final PromotionStatusProvider.PromotionStatusWrapper mockPromotionStatusWrapper = mock(PromotionStatusProvider.PromotionStatusWrapper.class); when(mockPromotionStatusWrapper.getPromotionBuilds(anyObject())).thenReturn(mockPromotions); final List<Status> mockStatusList = new ArrayList<Status>(); PowerMockito.mockStatic(Status.class); final Status mockStatusObject1 = mock(Status.class); mockStatusList.add(mockStatusObject1); final Status mockStatusObject2 = mock(Status.class); mockStatusList.add(mockStatusObject2); when(mockPromotionStatusWrapper.getName(mockStatusObject1)).thenReturn(promotion1Name); when(mockPromotionStatusWrapper .getIcon(mockStatusObject1, PromotionStatusProvider.DEFAULT_ICON_SIZE)).thenReturn(promotionIcon); when(mockPromotionStatusWrapper.getStartTime(mockStatusObject1)).thenReturn(promotionStartTime); when(mockPromotionStatusWrapper.getDuration(mockStatusObject1)).thenReturn(promotionDuration); when(mockPromotionStatusWrapper.getName(mockStatusObject2)).thenReturn(promotion2Name); when(mockPromotionStatusWrapper .getIcon(mockStatusObject2, PromotionStatusProvider.DEFAULT_ICON_SIZE)).thenReturn(promotionIcon); when(mockPromotionStatusWrapper.getStartTime(mockStatusObject2)).thenReturn(promotionStartTime); when(mockPromotionStatusWrapper.getDuration(mockStatusObject2)).thenReturn(promotionDuration); final AbstractBuild<?, ?> mockBuild = mock(AbstractBuild.class); when(mockBuild.getAction(any(Class.class))).thenReturn(mock(BuildBadgeAction.class)); final PromotionStatusProvider.PromotedBuildActionWrapper mockPromotedBuildActionWrapper = mock(PromotionStatusProvider.PromotedBuildActionWrapper.class); when(mockPromotedBuildActionWrapper.getPromotions(anyObject())).thenReturn(mockStatusList); final PromotionStatusProvider promotionStatusProvider = new PromotionStatusProvider(); promotionStatusProvider.setPromotedBuildActionWrapper(mockPromotedBuildActionWrapper); promotionStatusProvider.setPromotionStatusWrapper(mockPromotionStatusWrapper); final List<PromotionStatus> promotionStatusList = promotionStatusProvider.getPromotionStatusList(mockBuild); assertNotNull(promotionStatusList); assertEquals(2, promotionStatusList.size()); // list should be in desc sorted by start time final PromotionStatus promotionStatus1 = promotionStatusList.get(0); assertEquals(promotion1Name, promotionStatus1.getName()); assertEquals(promotionUserName, promotionStatus1.getUser()); assertEquals(promotionIcon, promotionStatus1.getIcon()); assertEquals(promotionDuration, promotionStatus1.getDuration()); assertEquals(promotionStartTime, promotionStatus1.getStartTime()); final List<String> promotionStatus1Params = promotionStatus1.getParams(); assertNotNull(promotionStatus1Params); assertEquals(3, promotionStatus1Params.size()); assertEquals("<strong>StringParamName</strong>: Param Value", promotionStatus1Params.get(0)); assertEquals("<strong>BooleanParamName</strong>: true", promotionStatus1Params.get(1)); assertEquals("<strong>null</strong>: File Path", promotionStatus1Params.get(2)); final PromotionStatus promotionStatus2 = promotionStatusList.get(1); assertEquals(promotion2Name, promotionStatus2.getName()); assertEquals(promotionUserName, promotionStatus2.getUser()); assertEquals(promotionIcon, promotionStatus2.getIcon()); final List<String> promotionStatus2Params = promotionStatus2.getParams(); assertNotNull(promotionStatus2Params); assertEquals(3, promotionStatus2Params.size()); assertEquals("<strong>StringParamName</strong>: Param Value", promotionStatus2Params.get(0)); assertEquals("<strong>BooleanParamName</strong>: true", promotionStatus2Params.get(1)); assertEquals("<strong>null</strong>: File Path", promotionStatus2Params.get(2)); } }