package br.com.caelum.vraptor.validator; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.isEmptyString; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.el.ELProcessor; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; public class MessagesTest { @Rule public ExpectedException exception = ExpectedException.none(); private Messages messages; @Before public void setUp() { messages = new Messages(); } @Test public void shouldThrowExceptionIfMessagesHasUnhandledErrors() { exception.expect(ValidationFailedException.class); exception.expectMessage(containsString("There are validation errors and you forgot to specify where to go.")); messages.add(new SimpleMessage("Test", "Test message")); messages.assertAbsenceOfErrors(); } @Test public void shouldNotThrowExceptionIfMessagesHasNoUnhandledErrors() { messages.add(new SimpleMessage("Test", "Test message")); messages.handleErrors(); messages.assertAbsenceOfErrors(); } @Test public void shouldNotThrowExceptionIfMessagesHasNoErrorsAndHasOtherSeverityMessages() { messages.add(new SimpleMessage("Test", "Test warn message", Severity.WARN)); messages.add(new SimpleMessage("Test", "Test info message", Severity.INFO)); messages.add(new SimpleMessage("Test", "Test success message", Severity.SUCCESS)); messages.assertAbsenceOfErrors(); } @Test public void shouldNotThrowExceptionIfMessagesHasNoErrors() { messages.assertAbsenceOfErrors(); } @Test public void shouldGroupMessagesInMapFromSameCategory() { messages.add(new SimpleMessage("client.name", "not null")); messages.add(new SimpleMessage("client.name", "not empty")); messages.add(new SimpleMessage("client.email", "not null")); MessageList messageList = (MessageList) messages.getErrors(); List<Message> messagesName = new ArrayList<>(messageList.getGrouped().get("client.name")); assertThat(messagesName, hasSize(2)); assertThat(messagesName, contains(messageList.get(0), messageList.get(1))); List<Message> messagesEmail = new ArrayList<>(messageList.getGrouped().get("client.email")); assertThat(messagesEmail, hasSize(1)); assertThat(messagesEmail, contains(messageList.get(2))); } @Test public void shouldGroupMessagesFromSameCategory() { messages.add(new SimpleMessage("client.name", "not null")); messages.add(new SimpleMessage("client.name", "not empty")); messages.add(new SimpleMessage("client.email", "is not valid e-mail")); Collection<String> errors = ((MessageList) messages.getErrors()).from("client.name"); assertThat(errors, hasSize(2)); assertThat(errors, hasItem("not null")); assertThat(errors, hasItem("not empty")); assertThat(errors, not(hasItem("is not valid e-mail"))); } @Test public void shouldDisplayMessagesJoiningWithCommas() { messages.add(new SimpleMessage("client.name", "not null")); messages.add(new SimpleMessage("client.name", "not empty")); Collection<String> errors = ((MessageList) messages.getErrors()).from("client.name"); assertThat(errors.toString(), equalTo("not null, not empty")); } @Test public void testReturnMessagesBySeverity() { Message message0 = new SimpleMessage("client.id", "not null", Severity.ERROR); Message message1 = new SimpleMessage("client.name", "not null", Severity.ERROR); Message message2 = new SimpleMessage("client.email", "is valid", Severity.INFO); Message message3 = new SimpleMessage("client.email", "was not checked", Severity.WARN); messages.add(message0); messages.add(message1); messages.add(message2); messages.add(message3); assertThat(messages.getErrors(), contains(message0, message1)); assertThat(messages.getInfo(), contains(message2)); assertThat(messages.getWarnings(), contains(message3)); assertThat(messages.getSuccess(), empty()); } @Test public void testElExpressionGettingMessagesByCaegory() { messages.add(new SimpleMessage("client.id", "will generated", Severity.INFO)); messages.add(new SimpleMessage("client.name", "not null")); messages.add(new SimpleMessage("client.name", "not empty")); ELProcessor el = new ELProcessor(); el.defineBean("messages", messages); String result = el.eval("messages.errors.from('client.name')").toString(); assertThat(result, is("not null, not empty")); result = el.eval("messages.errors.from('client.name').join(' - ')").toString(); assertThat(result, is("not null - not empty")); result = el.eval("messages.errors.from('client.id')").toString(); assertThat(result, isEmptyString()); result = el.eval("messages.info.from('client.id')").toString(); assertThat(result, is("will generated")); } }