public void validateStageConfig(ValidationContext validationContext) { ValidationContext contextForChildren = validationContext.withParent(this); for (StageConfig stageConfig : this) { stageConfig.validateTree(contextForChildren); } }
@Test public void shouldReturnTrueIfAllDescendentsAreValid(){ EnvironmentVariablesConfig variables = mock(EnvironmentVariablesConfig.class); JobConfigs jobConfigs = mock(JobConfigs.class); Approval approval = mock(Approval.class); when(variables.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(true); when(jobConfigs.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(true); when(approval.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(true); StageConfig stageConfig = new StageConfig(new CaseInsensitiveString("p1"), jobConfigs); stageConfig.setVariables(variables); stageConfig.setApproval(approval); boolean isValid = stageConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), stageConfig)); assertTrue(isValid); verify(jobConfigs).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(variables).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(approval).validateTree(any(PipelineConfigSaveValidationContext.class)); }
@Test public void shouldReturnFalseIfAnyDescendentIsInValid(){ EnvironmentVariablesConfig variables = mock(EnvironmentVariablesConfig.class); JobConfigs jobConfigs = mock(JobConfigs.class); Approval approval = mock(Approval.class); when(variables.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(false); when(jobConfigs.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(false); when(approval.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(false); StageConfig stageConfig = new StageConfig(new CaseInsensitiveString("p1"), jobConfigs); stageConfig.setVariables(variables); stageConfig.setApproval(approval); boolean isValid = stageConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), stageConfig)); assertFalse(isValid); verify(jobConfigs).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(variables).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(approval).validateTree(any(PipelineConfigSaveValidationContext.class)); } }
MingleConfig mingleConfig = mock(MingleConfig.class); TimerConfig timerConfig = mock(TimerConfig.class); when(stageConfig.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(true); when(materialConfigs.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(true); when(paramsConfig.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(true); verify(stageConfig).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(materialConfigs).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(paramsConfig).validateTree(any(PipelineConfigSaveValidationContext.class));
MingleConfig mingleConfig = mock(MingleConfig.class); TimerConfig timerConfig = mock(TimerConfig.class); when(stageConfig.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(false); when(materialConfigs.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(false); when(paramsConfig.validateTree(any(PipelineConfigSaveValidationContext.class))).thenReturn(false); verify(stageConfig).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(materialConfigs).validateTree(any(PipelineConfigSaveValidationContext.class)); verify(paramsConfig).validateTree(any(PipelineConfigSaveValidationContext.class));
@Test public void shouldValidateTree(){ EnvironmentVariablesConfig variables = mock(EnvironmentVariablesConfig.class); JobConfigs jobConfigs = mock(JobConfigs.class); Approval approval = mock(Approval.class); StageConfig stageConfig = new StageConfig(new CaseInsensitiveString("stage$"), jobConfigs, approval); stageConfig.setVariables(variables); stageConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", new PipelineConfig(), stageConfig)); assertThat(stageConfig.errors().on(StageConfig.NAME), contains("Invalid stage name 'stage$'")); ArgumentCaptor<PipelineConfigSaveValidationContext> captor = ArgumentCaptor.forClass(PipelineConfigSaveValidationContext.class); verify(jobConfigs).validateTree(captor.capture()); PipelineConfigSaveValidationContext childContext = captor.getValue(); assertThat(childContext.getParent(), is(stageConfig)); verify(approval).validateTree(childContext); verify(variables).validateTree(childContext); }
@Test public void shouldAddValidateTreeErrorsOnStageConfigIfPipelineIsAssociatedToATemplate(){ Approval approval = mock(Approval.class); JobConfigs jobConfigs = mock(JobConfigs.class); ConfigErrors jobErrors = new ConfigErrors(); jobErrors.add("KEY", "ERROR"); when(jobConfigs.errors()).thenReturn(jobErrors); StageConfig stageConfig = new StageConfig(new CaseInsensitiveString("stage$"), jobConfigs, approval); PipelineConfig pipelineConfig = new PipelineConfig(); pipelineConfig.setTemplateName(new CaseInsensitiveString("template")); stageConfig.validateTree(PipelineConfigSaveValidationContext.forChain(true, "group", pipelineConfig, stageConfig)); assertThat(stageConfig.errors().on(StageConfig.NAME), contains("Invalid stage name 'stage$'")); }
isValid = stageConfig.validateTree(contextForChildren) && isValid; if (pipelineConfig.hasTemplateApplied()) { final List<ConfigErrors> allErrors = new ArrayList<>();