package com.baiyue.common.web; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.web.client.RestClientCustomizer; import org.springframework.core.Ordered; import org.springframework.web.client.RestClient; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; class RestClientTracePropagationAutoConfigurationTest { private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(RestClientTracePropagationAutoConfiguration.class)); @Test void registersInterceptorAndIndependentCustomizer() { contextRunner.run(context -> { assertThat(context).hasSingleBean(RestClientTraceInterceptor.class); assertThat(context).hasBean("baiyueTraceRestClientCustomizer"); assertThat(context.getBeansOfType(RestClientCustomizer.class)).hasSize(1); RestClientTraceCustomizer customizer = context.getBean(RestClientTraceCustomizer.class); assertThat(customizer.getOrder()).isEqualTo(Ordered.LOWEST_PRECEDENCE); RestClient.Builder builder = mock(RestClient.Builder.class); customizer.customize(builder); verify(builder).requestInterceptor(context.getBean(RestClientTraceInterceptor.class)); }); } @Test void reusesApplicationProvidedTraceInterceptor() { contextRunner.withBean(RestClientTraceInterceptor.class, RestClientTraceInterceptor::new) .run(context -> assertThat(context).hasSingleBean(RestClientTraceInterceptor.class)); } }