public Mono<ConfigMap> getConfigMap() {
        Mono<ConfigMap> mapMono =
            extensionClient.fetch(ConfigMap.class, SystemSetting.SYSTEM_CONFIG_DEFAULT);
        if (mapMono == null) {
            return Mono.empty();
        }
        return mapMono.flatMap(systemDefault ->
                extensionClient.fetch(ConfigMap.class, SystemSetting.SYSTEM_CONFIG)
                    .map(system -> {
                        Map<String, String> defaultData = systemDefault.getData();
                        Map<String, String> data = system.getData();
                        Map<String, String> mergedData = mergeData(defaultData, data);
                        system.setData(mergedData);
                        return system;
                    })
                    .switchIfEmpty(Mono.just(systemDefault)));
    }
@Test
    void getConfigMap() {
        environmentFetcher.getConfigMap()
            .as(StepVerifier::create)
            .consumeNextWith(configMap -> {
                assertThat(configMap.getMetadata().getName())
                    .isEqualTo(SystemSetting.SYSTEM_CONFIG);
                try {
                    JSONAssert.assertEquals(expectedJson(),
                        JsonUtils.objectToJson(configMap),
                        true);
                } catch (JSONException e) {
                    throw new RuntimeException(e);
                }
            })
            .verifyComplete();
    }