@Override public void groups(List<String> allGroup) { for (PipelineConfigs group : groups) { group.add(allGroup); } }
@Override public boolean add(PipelineConfig pipelineConfig) { verifyUniqueName(pipelineConfig); PipelineConfigs part = this.getFirstEditablePartOrNull(); if(part == null) throw bomb("No editable configuration sources"); return part.add(pipelineConfig); } private void verifyUniqueName(PipelineConfig pipelineConfig) {
private void tryAddAndAssertThatFailed(PipelineConfigs group, PipelineConfig p1, int index) { try { group.add(index,p1); } catch (Exception ex) { assertThat(ex.getMessage(),is("Cannot add pipeline to non-editable configuration part")); return; } fail(String.format("should have thrown when adding at %s",index)); }
@Override public void update(String groupName, String pipelineName, PipelineConfig pipeline) { if (groups.isEmpty()) { PipelineConfigs configs = new BasicPipelineConfigs(); configs.add(pipeline); groups.add(configs); } groups.update(groupName, pipelineName, pipeline); }
@Override public void add(int index, PipelineConfig pipelineConfig) { PipelineConfigs part = getPartWithIndexForInsert(index); if(!isEditable(part)) throw bomb("Cannot add pipeline to non-editable configuration part"); int start = getFirstIndexInPart(part); part.add(index - start, pipelineConfig); }
@Test public void shouldAddPipelineAtIndex() { PipelineConfigs group = createWithPipeline(PipelineConfigMother.pipelineConfig("pipeline0")); PipelineConfig p1 = PipelineConfigMother.pipelineConfig("pipeline1"); group.add(1,p1); assertThat(group.get(1),is(p1)); } @Test
@Test public void shouldRemovePipelineAtIndex() { PipelineConfigs group = createWithPipeline(PipelineConfigMother.pipelineConfig("pipeline0")); PipelineConfig p1 = PipelineConfigMother.pipelineConfig("pipeline1"); group.add(1,p1); group.remove(0); assertThat(group.get(0), is(p1)); assertThat(group.size(), is(1)); }
@Test public void shouldRemovePipeline() { PipelineConfig p0 = PipelineConfigMother.pipelineConfig("pipeline0"); PipelineConfigs group = createWithPipeline(p0); PipelineConfig p1 = PipelineConfigMother.pipelineConfig("pipeline1"); group.add(1,p1); group.remove(p0); assertThat(group.get(0),is(p1)); assertThat(group.size(), is(1)); }
@Test public void shouldAddPipelineAtIndex_WhenWouldLandInEditablePart() { PipelineConfig pipeline0 = PipelineConfigMother.pipelineConfig("pipeline0"); PipelineConfig pipeline1 = PipelineConfigMother.pipelineConfig("pipeline1"); PipelineConfig pipeline3 = PipelineConfigMother.pipelineConfig("pipeline3"); PipelineConfig pipeline5 = PipelineConfigMother.pipelineConfig("pipeline5"); PipelineConfig pipeline2 = PipelineConfigMother.pipelineConfig("pipeline2"); PipelineConfig pipeline4 = PipelineConfigMother.pipelineConfig("pipeline4"); BasicPipelineConfigs pipelineConfigsMiddle = new BasicPipelineConfigs(pipeline3); pipelineConfigsMiddle.setOrigin(new FileConfigOrigin()); BasicPipelineConfigs bottom = new BasicPipelineConfigs(pipeline0, pipeline1, pipeline2); BasicPipelineConfigs top = new BasicPipelineConfigs(pipeline4, pipeline5); bottom.setOrigin(new RepoConfigOrigin()); top.setOrigin(new RepoConfigOrigin()); PipelineConfigs group = new MergePipelineConfigs( bottom, pipelineConfigsMiddle, top); PipelineConfig p1 = PipelineConfigMother.pipelineConfig("pipelineToInsert"); group.add(3,p1); assertThat(group, hasItem(p1)); assertThat(pipelineConfigsMiddle, hasItem(p1)); } }
@Test public void shouldAddErrorsToRawCruiseConfigWhenTemplateHasErrors() { CruiseConfig cruiseConfig = GoConfigMother.configWithPipelines("pipeline-1"); cruiseConfig.getTemplates().add( new PipelineTemplateConfig(new CaseInsensitiveString("invalid template name"), new StageConfig(new CaseInsensitiveString("stage-1"), new JobConfigs(new JobConfig("job-1")) ))); PipelineConfig pipelineWithTemplate = new PipelineConfig(new CaseInsensitiveString("pipeline-with-template"), MaterialConfigsMother.defaultMaterialConfigs()); pipelineWithTemplate.setTemplateName(new CaseInsensitiveString("invalid template name")); cruiseConfig.getGroups().get(0).add(pipelineWithTemplate); CruiseConfig rawCruiseConfig = new Cloner().deepClone(cruiseConfig); MagicalGoConfigXmlLoader.validate(cruiseConfig); cruiseConfig.copyErrorsTo(rawCruiseConfig); ConfigErrors templateErrors = rawCruiseConfig.getTemplateByName(new CaseInsensitiveString("invalid template name")).errors(); assertThat(templateErrors.getAll().size(), is(1)); assertThat(templateErrors.getAll().get(0), is("Invalid template name 'invalid template name'. This must be alphanumeric and can contain underscores and periods (however, it cannot start with a period). The maximum allowed length is 255 characters.")); }
@Test public void shouldHandlePipelinesWithTemplates() { CruiseConfig cruiseConfig = GoConfigMother.configWithPipelines("pipeline-1"); cruiseConfig.getTemplates().add( new PipelineTemplateConfig(new CaseInsensitiveString("template-1"), new StageConfig(new CaseInsensitiveString("invalid stage name"), new JobConfigs(new JobConfig("job-1")) ))); PipelineConfig pipelineWithTemplate = new PipelineConfig(new CaseInsensitiveString("pipeline-with-template"), MaterialConfigsMother.defaultMaterialConfigs()); pipelineWithTemplate.setTemplateName(new CaseInsensitiveString("template-1")); cruiseConfig.getGroups().get(0).add(pipelineWithTemplate); CruiseConfig rawCruiseConfig = new Cloner().deepClone(cruiseConfig); MagicalGoConfigXmlLoader.validate(cruiseConfig); cruiseConfig.copyErrorsTo(rawCruiseConfig); assertThat(rawCruiseConfig.pipelineConfigByName(new CaseInsensitiveString("pipeline-with-template")).errors().isEmpty(), is(true)); assertThat(cruiseConfig.pipelineConfigByName(new CaseInsensitiveString("pipeline-with-template")).getStage(new CaseInsensitiveString("invalid stage name")).errors().isEmpty(), is(false)); assertThat(rawCruiseConfig.getTemplateByName(new CaseInsensitiveString("template-1")).errors().isEmpty(), is(true)); }