package org.transgalactica.fwk.web.handlerexceptionresolver;
import static org.junit.Assert.assertEquals;
import java.lang.reflect.Method;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.util.ReflectionUtils;
import org.springframework.web.servlet.ModelAndView;
import org.transgalactica.fwk.validation.MultipleErrors;
import org.transgalactica.fwk.validation.exception.MultipleErrorsException;
import org.transgalactica.fwk.validation.exception.TechnicalException;
import org.transgalactica.fwk.web.handlerexceptionresolver.SimpleMessageExceptionResolver;
public class SimpleMessageFormaterExceptionResolverTest {
@Test
public void testAddMessageTechnicalException() {
TechnicalException exception = new TechnicalException("code");
ModelAndView modelAndView = new ModelAndView();
callAddMessage(modelAndView, exception);
List<MessageSourceResolvable> messages = (List<MessageSourceResolvable>) modelAndView.getModelMap().get(
SimpleMessageExceptionResolver.DEFAULT_EXCEPTION_MESSAGES_ATTRIBUTE);
assertEquals(1, messages.size());
assertEquals("code", ((MessageSourceResolvable) messages.get(0).getArguments()[0]).getCodes()[0]);
}
@Test
public void testAddMessageMultipleErrorsExceptions() {
MultipleErrors errors = new MultipleErrors();
errors.add("message1");
errors.add("message2");
MultipleErrorsException exception = new MultipleErrorsException(errors.getAllErrorMessages());
ModelAndView modelAndView = new ModelAndView();
callAddMessage(modelAndView, exception);
List<MessageSourceResolvable> messages = (List<MessageSourceResolvable>) modelAndView.getModelMap().get(
SimpleMessageExceptionResolver.DEFAULT_EXCEPTION_MESSAGES_ATTRIBUTE);
assertEquals(2, messages.size());
assertEquals("message1", messages.get(0).getCodes()[0]);
assertEquals("message2", messages.get(1).getCodes()[0]);
}
private void callAddMessage(ModelAndView modelAndView, Exception exception) {
SimpleMessageExceptionResolver resolver = BeanUtils.instantiateClass(SimpleMessageExceptionResolver.class);
Method method = BeanUtils.findMethod(SimpleMessageExceptionResolver.class, "addMessages", new Class[] {
ModelAndView.class, Exception.class });
method.setAccessible(true);
ReflectionUtils.invokeMethod(method, resolver, new Object[] { modelAndView, exception });
}
}