package hudson.plugins.pipelinesinktrigger; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.antlr.runtime.RecognitionException; import org.junit.Test; public class TestBuildGraphPipelineSinkTrigger { private static final String DEFAULT_SPEC = "* * * * *"; private static final String DEFAULT_ROOT_PROJECT_NAME = "Mock-Root"; private static final String DEFAULT_SINK_PROJECT_NAME = "Mock-Sink"; private BuildGraphPipelineSinkTrigger newBuildGraphPipelineSinkTrigger(String excludedProjectNames) throws RecognitionException { return new BuildGraphPipelineSinkTrigger(DEFAULT_SPEC, DEFAULT_ROOT_PROJECT_NAME, DEFAULT_SINK_PROJECT_NAME, excludedProjectNames, false, false); } @Test public void onJobRenamedShouldCauseNoChangeWhenRenamedJobIsNotRootProjectNameOrSinkProjectOrPartOfTheExcludedProjectNames() throws RecognitionException { final BuildGraphPipelineSinkTrigger trigger = newBuildGraphPipelineSinkTrigger(""); final boolean changed = trigger.onJobRenamed("Job-1", "Job-1-1"); assertFalse(changed); assertEquals(DEFAULT_ROOT_PROJECT_NAME, trigger.getRootProjectName()); assertEquals(DEFAULT_SINK_PROJECT_NAME, trigger.getSinkProjectName()); assertTrue(trigger.getExcludedProjectNames().isEmpty()); } @Test public void onJobRenamedShouldCauseChangeWhenRenamedJobIsTheRootProjectName() throws RecognitionException { final BuildGraphPipelineSinkTrigger trigger = newBuildGraphPipelineSinkTrigger(""); final String newRootProjectName = DEFAULT_ROOT_PROJECT_NAME.concat("-1"); final boolean changed = trigger.onJobRenamed(DEFAULT_ROOT_PROJECT_NAME, newRootProjectName); assertTrue(changed); assertEquals(newRootProjectName, trigger.getRootProjectName()); assertEquals(DEFAULT_SINK_PROJECT_NAME, trigger.getSinkProjectName()); assertTrue(trigger.getExcludedProjectNames().isEmpty()); } @Test public void onJobRenamedShouldCauseChangeWhenRenamedJobIsTheSinkProjectName() throws RecognitionException { final BuildGraphPipelineSinkTrigger trigger = newBuildGraphPipelineSinkTrigger(""); final String newSinkProjectName = DEFAULT_SINK_PROJECT_NAME.concat("-1"); final boolean changed = trigger.onJobRenamed(DEFAULT_SINK_PROJECT_NAME, newSinkProjectName); assertTrue(changed); assertEquals(DEFAULT_ROOT_PROJECT_NAME, trigger.getRootProjectName()); assertEquals(newSinkProjectName, trigger.getSinkProjectName()); assertTrue(trigger.getExcludedProjectNames().isEmpty()); } @Test public void onJobRenamedShouldCauseChangeWhenRenamedJobIsPartOfTheExcludedProjectNames() throws RecognitionException { final String excludedProjectNames = "Job-1, Job-2, Job-3"; final BuildGraphPipelineSinkTrigger trigger = newBuildGraphPipelineSinkTrigger(excludedProjectNames); final boolean changed = trigger.onJobRenamed("Job-2", "Job-2-2"); assertTrue(changed); assertEquals(DEFAULT_ROOT_PROJECT_NAME, trigger.getRootProjectName()); assertEquals(DEFAULT_SINK_PROJECT_NAME, trigger.getSinkProjectName()); assertEquals("Job-1,Job-2-2,Job-3", trigger.getExcludedProjectNames()); } @Test public void onJobDeletedShouldCauseNoChangesWhenTriggerHasNoEmptyExcludedProjectNames() throws RecognitionException { final BuildGraphPipelineSinkTrigger trigger = newBuildGraphPipelineSinkTrigger(""); final boolean changed = trigger.onJobDeleted("Job-1"); assertFalse(changed); assertTrue(trigger.getExcludedProjectNames().isEmpty()); } @Test public void onJobDeletedShouldCauseChangeWhenDeletedJobMatchesAnExcludedProjectName() throws RecognitionException { final String excludedProjectNames = "Job-1, Job-2, Job-3"; final BuildGraphPipelineSinkTrigger trigger = newBuildGraphPipelineSinkTrigger(excludedProjectNames); boolean changed = trigger.onJobDeleted("Job-1"); assertTrue(changed); assertEquals("Job-2,Job-3", trigger.getExcludedProjectNames()); changed = trigger.onJobDeleted("Job-2"); assertTrue(changed); assertEquals("Job-3", trigger.getExcludedProjectNames()); changed = trigger.onJobDeleted("Job-3"); assertTrue(changed); assertTrue(trigger.getExcludedProjectNames().isEmpty()); } @Test public void onJobDeletedShouldCauseNoChangeWhenDeletedJobIsNotPartOfTheExcludedProjectNames() throws RecognitionException { final String excludedProjectNames = "Job-1, Job-2, Job-3"; final BuildGraphPipelineSinkTrigger trigger = newBuildGraphPipelineSinkTrigger(excludedProjectNames); boolean changed = trigger.onJobDeleted("Job-4"); assertFalse(changed); assertEquals(excludedProjectNames, trigger.getExcludedProjectNames()); } }