1+ package ru.remmintan.simple.exceptions
2+
3+ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
4+ import org.assertj.core.api.Assertions.assertThat
5+ import org.junit.jupiter.api.Test
6+ import org.springframework.beans.factory.annotation.Autowired
7+ import org.springframework.boot.test.context.SpringBootTest
8+ import org.springframework.boot.test.web.client.TestRestTemplate
9+ import org.springframework.http.*
10+ import ru.remmintan.simple.exceptions.dtos.ErrorDto
11+ import ru.remmintan.simple.exceptions.testapp.TestApplication
12+
13+ @SpringBootTest(classes = [TestApplication ::class ], webEnvironment = SpringBootTest .WebEnvironment .DEFINED_PORT )
14+ class HttpProtocolExceptionsTest {
15+
16+ @Autowired
17+ private lateinit var rest: TestRestTemplate
18+
19+ private val mapper = jacksonObjectMapper()
20+
21+ @Test
22+ fun methodNotAllowedTest () {
23+ val message = " Method POST not allowed. Allowed methods: GET."
24+
25+ val result = rest.postForEntity(" /test/badrequest" , null , String ::class .java)
26+ assertThat(result.statusCode).isEqualTo(HttpStatus .METHOD_NOT_ALLOWED )
27+ assertThat(result.hasBody()).isTrue
28+ val error = mapper.readValue(result.body, ErrorDto ::class .java)
29+ assertThat(error.message).isEqualTo(message)
30+ }
31+
32+ @Test
33+ fun notFoundTest () {
34+ val result = rest.getForEntity(" /path/that/doesnt/exist" , String ::class .java)
35+ assertThat(result.statusCode).isEqualTo(HttpStatus .NOT_FOUND )
36+ }
37+
38+ @Test
39+ fun mediaTypeNotSupportedTest () {
40+ val invalidHeaders = HttpHeaders ()
41+ invalidHeaders.contentType = MediaType .TEXT_PLAIN
42+ val invalidEntity = HttpEntity (" " , invalidHeaders);
43+
44+ val errorMessage = " Content type 'text/plain;charset=UTF-8' not supported"
45+
46+ val result = rest.postForEntity(" /validation/mapping" , invalidEntity, String ::class .java)
47+ assertThat(result.statusCode).isEqualTo(HttpStatus .UNSUPPORTED_MEDIA_TYPE )
48+ assertThat(result.hasBody()).isTrue
49+ val error = mapper.readValue(result.body, ErrorDto ::class .java)
50+ assertThat(error.message).isEqualTo(errorMessage)
51+ }
52+
53+ }
0 commit comments