/*************************GO-LICENSE-START********************************* * Copyright 2014 ThoughtWorks, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *************************GO-LICENSE-END***********************************/ package com.thoughtworks.go.domain; import com.thoughtworks.go.config.PipelineConfig; import com.thoughtworks.go.config.materials.svn.SvnMaterial; import com.thoughtworks.go.config.remote.ConfigRepoConfig; import com.thoughtworks.go.config.remote.RepoConfigOrigin; import com.thoughtworks.go.domain.buildcause.BuildCause; import com.thoughtworks.go.domain.buildcause.BuildCauseOutOfDateException; import com.thoughtworks.go.domain.materials.MaterialConfig; import com.thoughtworks.go.domain.materials.Modification; import static com.thoughtworks.go.helper.ModificationsMother.oneModifiedFile; import com.thoughtworks.go.helper.MaterialsMother; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import com.thoughtworks.go.helper.PipelineConfigMother; import org.junit.Test; public class BuildCauseTest { @Test public void shouldReturnTrimBuildCauseIfRevisionIsLongerThan12() { ModificationSummaries summaries1 = new ModificationSummaries(); summaries1.visit( new Modification(null, "comment1", null, null, "This could be a long Hg Revision Number")); assertThat(summaries1.getModification(0).getRevision(), is("This could b...")); } @Test public void differentBuildCausesShouldNotBeTheSame() { assertThat(BuildCause.createWithEmptyModifications().isSameAs(BuildCause.createManualForced()), is(false)); assertThat(BuildCause.createManualForced().isSameAs(BuildCause.createWithEmptyModifications()), is(false)); } @Test public void sameBuildCausesShouldBeSame() { MaterialRevisions first = new MaterialRevisions( new MaterialRevision(MaterialsMother.svnMaterial(), oneModifiedFile("revision1")) ); MaterialRevisions second = new MaterialRevisions( new MaterialRevision(MaterialsMother.svnMaterial(), oneModifiedFile("revision1")) ); assertThat(BuildCause.createWithModifications(first, "").isSameAs(BuildCause.createWithModifications(second, "")), is(true)); } @Test public void shouldSetBuildTriggerOnUpdatingMaterialRevisions() { MaterialRevisions first = new MaterialRevisions( new MaterialRevision(MaterialsMother.svnMaterial(), oneModifiedFile("revision1")) ); BuildCause buildCause = BuildCause.createWithEmptyModifications(); buildCause.setMaterialRevisions(first); assertThat(buildCause.getBuildCauseMessage(), is("modified by lgao")); } @Test public void shouldNotChangeBuildTriggerForForcedBuildCauseWhenUpdatingMaterialRevisions() { MaterialRevisions first = new MaterialRevisions( new MaterialRevision(MaterialsMother.svnMaterial(), oneModifiedFile("revision1")) ); BuildCause buildCause = BuildCause.createManualForced(); buildCause.setMaterialRevisions(first); assertThat(buildCause.getBuildCauseMessage(), is("Forced by anonymous")); } @Test public void shouldNotThrowWhenMaterialAndConfigOriginRevisionDontMatch_WhenManualTrigger() { SvnMaterial material = MaterialsMother.svnMaterial(); MaterialConfig materialConfig = material.config(); MaterialRevisions first = new MaterialRevisions( new MaterialRevision(material, oneModifiedFile("revision1")) ); BuildCause buildCause = BuildCause.createManualForced(); buildCause.setMaterialRevisions(first); PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfigWithStages("pipe1", "build"); pipelineConfig.materialConfigs().clear(); pipelineConfig.materialConfigs().add(materialConfig); pipelineConfig.setOrigin(new RepoConfigOrigin(new ConfigRepoConfig(materialConfig,"plug"),"revision2")); buildCause.assertPipelineConfigAndMaterialRevisionMatch(pipelineConfig); } @Test public void shouldThrowWhenMaterialAndConfigOriginRevisionDontMatch_WhenAutoTrigger() { SvnMaterial material = MaterialsMother.svnMaterial(); MaterialConfig materialConfig = material.config(); MaterialRevisions first = new MaterialRevisions( new MaterialRevision(material, oneModifiedFile("revision1")) ); BuildCause buildCause = BuildCause.createWithModifications(first,""); buildCause.setMaterialRevisions(first); PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfigWithStages("pipe1", "build"); pipelineConfig.materialConfigs().clear(); pipelineConfig.materialConfigs().add(materialConfig); pipelineConfig.setOrigin(new RepoConfigOrigin(new ConfigRepoConfig(materialConfig,"plug"),"revision2")); try { buildCause.assertPipelineConfigAndMaterialRevisionMatch(pipelineConfig); } catch (BuildCauseOutOfDateException ex) { //good return; } fail("should have thrown"); } @Test public void shouldNotThrowWhenMaterialAndConfigOriginRevisionMatch_WhenAutoTrigger() { SvnMaterial material = MaterialsMother.svnMaterial(); MaterialConfig materialConfig = material.config(); MaterialRevisions first = new MaterialRevisions( new MaterialRevision(material, oneModifiedFile("revision1")) ); BuildCause buildCause = BuildCause.createWithModifications(first,""); buildCause.setMaterialRevisions(first); PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfigWithStages("pipe1", "build"); pipelineConfig.materialConfigs().clear(); pipelineConfig.materialConfigs().add(materialConfig); pipelineConfig.setOrigin(new RepoConfigOrigin(new ConfigRepoConfig(materialConfig,"plug"),"revision1")); buildCause.assertPipelineConfigAndMaterialRevisionMatch(pipelineConfig); } }