public <T> T fromXmlPartial(String partial, Class<T> o) throws Exception {
        return fromXmlPartial(toInputStream(partial, UTF_8), o);
    }
@Test
    void shouldLoadPartialConfigWithPipeline() throws Exception {
        String partialConfigWithPipeline =
                ("""
                        <cruise schemaVersion='%d'>
                        <pipelines group="first">
                        <pipeline name="pipeline">
                          <materials>
                            <hg url="/hgrepo"/>
                          </materials>
                          <stage name="mingle">
                            <jobs>
                              <job name="functional">
                                <artifacts>
                                  <log src="artifact1.xml" dest="cruise-output" />
                                </artifacts>
                              </job>
                            </jobs>
                          </stage>
                        </pipeline>
                        </pipelines>
                        </cruise>
                        """).formatted(CONFIG_SCHEMA_VERSION);
        PartialConfig partialConfig = xmlLoader.fromXmlPartial(partialConfigWithPipeline, PartialConfig.class);
        assertThat(partialConfig.getGroups().size()).isEqualTo(1);
        PipelineConfig pipeline = partialConfig.getGroups().get(0).getPipelines().get(0);
        assertThat(pipeline.name()).isEqualTo(new CaseInsensitiveString("pipeline"));
        assertThat(pipeline.size()).isEqualTo(1);
        assertThat(pipeline.findBy(new CaseInsensitiveString("mingle")).jobConfigByInstanceName("functional", true)).isNotNull();
    }