package br.com.caelum.vraptor.serialization;
import static br.com.caelum.vraptor.view.Results.json;
import static br.com.caelum.vraptor.view.Results.xml;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.junit.Before;
import org.junit.Test;
import br.com.caelum.vraptor.interceptor.DefaultTypeNameExtractor;
import br.com.caelum.vraptor.ioc.Container;
import br.com.caelum.vraptor.serialization.xstream.XStreamBuilder;
import br.com.caelum.vraptor.serialization.xstream.XStreamBuilderImpl;
import br.com.caelum.vraptor.serialization.xstream.XStreamJSONSerialization;
import br.com.caelum.vraptor.serialization.xstream.XStreamXMLSerialization;
import br.com.caelum.vraptor.util.test.MockLocalization;
import br.com.caelum.vraptor.validator.MessageConverter;
import br.com.caelum.vraptor.validator.SingletonResourceBundle;
public class I18nMessageSerializationTest {
private I18nMessageSerialization serialization;
private ByteArrayOutputStream stream;
@Before
public void setup() throws Exception {
stream = new ByteArrayOutputStream();
HttpServletResponse response = mock(HttpServletResponse.class);
when(response.getWriter()).thenReturn(new PrintWriter(stream));
DefaultTypeNameExtractor extractor = new DefaultTypeNameExtractor();
HibernateProxyInitializer initializer = new HibernateProxyInitializer();
XStreamBuilder builder = XStreamBuilderImpl.cleanInstance(new MessageConverter());
XStreamJSONSerialization jsonSerialization = new XStreamJSONSerialization(response, extractor, initializer, builder);
XStreamXMLSerialization xmlSerialization = new XStreamXMLSerialization(response, extractor, initializer, builder);
Container container = mock(Container.class);
when(container.instanceFor(JSONSerialization.class)).thenReturn(jsonSerialization);
when(container.instanceFor(XMLSerialization.class)).thenReturn(xmlSerialization);
MockLocalization mockLocalization = new MockLocalization(new SingletonResourceBundle("message.cat", "Just another {0} in {1}"));
serialization = new I18nMessageSerialization(container , mockLocalization);
}
@Test
public void shouldCallXStreamJsonSerialization() {
String expectedResult = "{\"message\": {\"message\": \"Just another {0} in {1}\",\"category\": \"success\"}}";
serialization.from("success", "message.cat").as(json());
assertThat(result(), is(equalTo(expectedResult)));
}
@Test
public void shouldCallXStreamXmlSerialization() {
String expectedResult = "<message>\n" +
" <message>Just another {0} in {1}</message>\n" +
" <category>success</category>\n" +
"</message>";
serialization.from("success", "message.cat").as(xml());
assertThat(result(), is(equalTo(expectedResult)));
}
@Test
public void shouldCallXStreamSerializationWithParams() {
String expectedResult = "<message>\n" +
" <message>Just another object in memory</message>\n" +
" <category>success</category>\n" +
"</message>";
Object[] params = {"object", "memory"};
serialization.from("success", "message.cat", params).as(xml());
assertThat(result(), is(equalTo(expectedResult)));
}
private String result() {
return new String(stream.toByteArray());
}
}