diff options
Diffstat (limited to 'sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java')
-rw-r--r-- | sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java new file mode 100644 index 00000000000..6777aaa7333 --- /dev/null +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scm/ScmChangedFilesProviderTest.java @@ -0,0 +1,125 @@ +/* + * SonarQube + * Copyright (C) 2009-2017 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.scanner.scm; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Collections; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.sonar.api.batch.fs.internal.DefaultInputModule; +import org.sonar.api.batch.fs.internal.InputModuleHierarchy; +import org.sonar.api.batch.scm.ScmBranchProvider; +import org.sonar.api.batch.scm.ScmProvider; +import org.sonar.scanner.scan.branch.BranchConfiguration; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; + +public class ScmChangedFilesProviderTest { + @Mock + private ScmConfiguration scmConfiguration; + @Mock + private BranchConfiguration branchConfiguration; + @Mock + private InputModuleHierarchy inputModuleHierarchy; + @Mock + private ScmBranchProvider scmProvider; + + private Path rootBaseDir = Paths.get("root"); + private ScmChangedFilesProvider provider; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + DefaultInputModule root = mock(DefaultInputModule.class); + when(root.getBaseDir()).thenReturn(rootBaseDir); + when(inputModuleHierarchy.root()).thenReturn(root); + provider = new ScmChangedFilesProvider(); + } + + @Test + public void testNoScmProvider() { + when(branchConfiguration.isShortLivingBranch()).thenReturn(true); + ScmChangedFiles scmChangedFiles = provider.provide(scmConfiguration, branchConfiguration, inputModuleHierarchy); + + assertThat(scmChangedFiles.get()).isNull(); + verify(scmConfiguration).provider(); + } + + @Test + public void testProviderDoesntSupport() { + when(branchConfiguration.branchTarget()).thenReturn("target"); + when(branchConfiguration.isShortLivingBranch()).thenReturn(true); + when(scmConfiguration.provider()).thenReturn(scmProvider); + when(scmProvider.branchChangedFiles("target", rootBaseDir)).thenReturn(null); + ScmChangedFiles scmChangedFiles = provider.provide(scmConfiguration, branchConfiguration, inputModuleHierarchy); + + assertThat(scmChangedFiles.get()).isNull(); + verify(scmProvider).branchChangedFiles("target", rootBaseDir); + } + + @Test + public void testNoOpInNonShortLivedBranch() { + when(branchConfiguration.isShortLivingBranch()).thenReturn(false); + ScmChangedFiles scmChangedFiles = provider.provide(scmConfiguration, branchConfiguration, inputModuleHierarchy); + + assertThat(scmChangedFiles.get()).isNull(); + verifyZeroInteractions(scmConfiguration); + } + + @Test + public void testLegacyScmProvider() { + ScmProvider legacy = mock(ScmProvider.class); + when(scmConfiguration.provider()).thenReturn(legacy); + when(branchConfiguration.isShortLivingBranch()).thenReturn(true); + + ScmChangedFiles scmChangedFiles = provider.provide(scmConfiguration, branchConfiguration, inputModuleHierarchy); + + assertThat(scmChangedFiles.get()).isNull(); + verify(scmConfiguration).provider(); + verifyZeroInteractions(legacy); + } + + @Test + public void testReturnChangedFiles() { + when(branchConfiguration.branchTarget()).thenReturn("target"); + when(branchConfiguration.isShortLivingBranch()).thenReturn(true); + when(scmConfiguration.provider()).thenReturn(scmProvider); + when(scmProvider.branchChangedFiles("target", rootBaseDir)).thenReturn(Collections.singletonList(Paths.get("changedFile"))); + ScmChangedFiles scmChangedFiles = provider.provide(scmConfiguration, branchConfiguration, inputModuleHierarchy); + + assertThat(scmChangedFiles.get()).containsOnly(Paths.get("changedFile")); + verify(scmProvider).branchChangedFiles("target", rootBaseDir); + } + + @Test + public void testCacheObject() { + provider.provide(scmConfiguration, branchConfiguration, inputModuleHierarchy); + provider.provide(scmConfiguration, branchConfiguration, inputModuleHierarchy); + verify(branchConfiguration).isShortLivingBranch(); + } + +} |