0

Given below code for Controller, when I start the spring boot application, I am able to make http calls to the resource /foo/id/{id} to fetch data.

However the same call from an Integration test is returning 404. Call did not trigger rest controller method. Test is not forwarding the http calls to the rest controller. What am I missing?

@RestController
@RequestMapping(“/foo”)
class FooResource {
@RequestMapping(method = RequestMethod.GET, path = “/id/{id}”)
String getData(@PathVariable int id) {
    logger.error("===== FooResource.getData called with {}", id)
     // more code
}
//more code

//Spock test case
@ContextConfiguration
@SpringBootTest(
        webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT
)
@EnableWebMvc
@AutoConfigureWebClient
@TestPropertySource(locations = "classpath:application-test.properties")
class IntegrationTest extends Specification {

    @Autowired
    RestTemplate restTemplate 


   @Configuration
   @ImportResource(["classpath*:/test-properties.xml", "classpath*:/springintegration-config.xml"])
   static class Beans {
        @Bean
        MessagingTemplate messagingTemplate() { new MessagingTemplate() }

        @Bean
        ServletWebServerFactory servletWebServerFactory() {
            return new TomcatServletWebServerFactory(9010);
        }

        @Bean
        public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
            return restTemplateBuilder
              .setConnectTimeout(30 * 1000)
                .setReadTimeout(30 * 1000)
               .build();
        }
   }

   def ‘foo resource returns the expected data for Id'() {
    given:
    int id = new SecureRandom().nextInt()
    TestRestTemplate restTemplate = new TestRestTemplate();

    when:
    ResponseEntity<String> response = restTemplate.getForEntity("http://localhost:9010/foo/id/1234", String.class)

    then:
    assert response.statusCode == HttpStatus.OK
}

Test case run log includes the below mappings already available

s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped “{[/foo/id/{Id}],methods=[GET]}" onto public java.lang.String com.foo.bar.rest.FooResource.getData(int)
2018-06-15 13:54:38.680 DEBUG 20710 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Finished creating instance of bean 'requestMappingHandlerMapping'
2018-06-15 13:54:38.680 DEBUG 20710 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Creating shared instance of singleton bean 'mvcPathMatcher'
2018-06-15 13:54:38.681 DEBUG 20710 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Creating instance of bean 'mvcPathMatcher'
suman j
  • 6,710
  • 11
  • 58
  • 109

1 Answers1

0

Changing the Annotations on IntegrationTest class resolved the issue.

//Spock test case
@SpringBootTest(
        classes = TestConfig.class,
        webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT
)
@AutoConfigureWebClient
@TestPropertySource(locations = "classpath:application-test.properties")
class IntegrationTest extends Specification {

    @Autowired
    RestTemplate restTemplate 


   @Configuration
   @ImportResource(["classpath*:/test-properties.xml", "classpath*:/springintegration-config.xml"])
   static class Beans {
        @Bean
        MessagingTemplate messagingTemplate() { new MessagingTemplate() }

        @Bean
        ServletWebServerFactory servletWebServerFactory() {
            return new TomcatServletWebServerFactory(9010);
        }

        @Bean
        public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
            return restTemplateBuilder
              .setConnectTimeout(30 * 1000)
                .setReadTimeout(30 * 1000)
               .build();
        }
   }

   def ‘foo resource returns the expected data for Id'() {
    given:
    int id = new SecureRandom().nextInt()
    TestRestTemplate restTemplate = new TestRestTemplate();

    when:
    ResponseEntity<String> response = restTemplate.getForEntity("http://localhost:9010/foo/id/1234", String.class)

    then:
    assert response.statusCode == HttpStatus.OK
}
suman j
  • 6,710
  • 11
  • 58
  • 109