package feign.jackson.jaxb; import org.junit.Test; import java.util.Collection; import java.util.Collections; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import feign.RequestTemplate; import feign.Response; import static feign.Util.UTF_8; import static feign.assertj.FeignAssertions.assertThat; public class JacksonJaxbCodecTest { @Test public void encodeTest() { JacksonJaxbJsonEncoder encoder = new JacksonJaxbJsonEncoder(); RequestTemplate template = new RequestTemplate(); encoder.encode(new MockObject("Test"), MockObject.class, template); assertThat(template).hasBody("{\"value\":\"Test\"}"); } @Test public void decodeTest() throws Exception { Response response = Response.builder() .status(200) .reason("OK") .headers(Collections.<String, Collection<String>>emptyMap()) .body("{\"value\":\"Test\"}", UTF_8) .build(); JacksonJaxbJsonDecoder decoder = new JacksonJaxbJsonDecoder(); assertThat(decoder.decode(response, MockObject.class)) .isEqualTo(new MockObject("Test")); } /** Enabled via {@link feign.Feign.Builder#decode404()} */ @Test public void notFoundDecodesToEmpty() throws Exception { Response response = Response.builder() .status(404) .reason("NOT FOUND") .headers(Collections.<String, Collection<String>>emptyMap()) .build(); assertThat((byte[]) new JacksonJaxbJsonDecoder().decode(response, byte[].class)).isEmpty(); } @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) static class MockObject { @XmlElement private String value; MockObject() { } MockObject(String value) { this.value = value; } @Override public boolean equals(Object obj) { if (obj instanceof MockObject) { MockObject other = (MockObject) obj; return value.equals(other.value); } return false; } @Override public int hashCode() { return value != null ? value.hashCode() : 0; } } }