package org.cloudfoundry.identity.uaa.web; import org.cloudfoundry.identity.uaa.web.ExceptionReport; import org.cloudfoundry.identity.uaa.web.ExceptionReportHttpMessageConverter; import org.junit.Before; import org.junit.Test; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.mock.http.MockHttpOutputMessage; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.springframework.http.MediaType.APPLICATION_JSON; public class ExceptionReportHttpMessageConverterTest { private ExceptionReportHttpMessageConverter exceptionReportHttpMessageConverter; private HttpMessageConverter httpMessageConverter; private HttpOutputMessage httpOutputMessage; @Before public void setUp() throws Exception { exceptionReportHttpMessageConverter = new ExceptionReportHttpMessageConverter(); httpMessageConverter = mock(HttpMessageConverter.class); httpOutputMessage = new MockHttpOutputMessage(); exceptionReportHttpMessageConverter.setMessageConverters( new HttpMessageConverter<?>[]{httpMessageConverter}); when(httpMessageConverter.canWrite(any(Class.class), any(MediaType.class))).thenReturn(true); when(httpMessageConverter.getSupportedMediaTypes()).thenReturn(Arrays.asList(APPLICATION_JSON)); } @Test public void testWriteInternal() throws Exception { ExceptionReport report = new ExceptionReport(new Exception("oh noes!")); exceptionReportHttpMessageConverter.writeInternal(report, httpOutputMessage); Map<String, String> expectedFields = new HashMap<>(); expectedFields.put("error", "exception"); expectedFields.put("message", "oh noes!"); expectedFields.put("error_description", "oh noes!"); verify(httpMessageConverter).write(eq(expectedFields), eq(APPLICATION_JSON), eq(httpOutputMessage)); } @Test public void testWriteInteralWithExtraInfo() throws Exception { Map<String, Object> extraInfo = new HashMap<>(); extraInfo.put("user_id", "cba09242-aa43-4247-9aa0-b5c75c281f94"); extraInfo.put("active", true); extraInfo.put("verified", false); ExceptionReport report = new ExceptionReport(new Exception("oh noes!"), false, extraInfo); exceptionReportHttpMessageConverter.writeInternal(report, httpOutputMessage); Map<String, Object> expectedFields = new HashMap<>(); expectedFields.put("error", "exception"); expectedFields.put("message", "oh noes!"); expectedFields.put("error_description", "oh noes!"); expectedFields.putAll(extraInfo); verify(httpMessageConverter).write(eq(expectedFields), eq(APPLICATION_JSON), eq(httpOutputMessage)); } }