/* ==================================================================
* SimpleCsvHttpMessageCoverterTest.java - Apr 21, 2014 9:05:31 AM
*
* Copyright 2007-2014 SolarNetwork.net Dev Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA
* ==================================================================
*/
package net.solarnetwork.web.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import net.solarnetwork.test.AbstractTest;
import net.solarnetwork.web.support.SimpleCsvHttpMessageConverter;
import org.junit.Assert;
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.http.server.ServletServerHttpResponse;
import org.springframework.mock.web.MockHttpServletResponse;
/**
* Test cases for the {@link SimpleCsvHttpMessageConverter} class.
*
* @author matt
* @version 1.0
*/
public class SimpleCsvHttpMessageCoverterTest extends AbstractTest {
private static final MediaType CSV_MEDIA_TYPE = MediaType.parseMediaType("text/csv; charset=UTF-8");
private MockHttpServletResponse response;
private HttpOutputMessage output;
@Before
public void setupTest() {
response = new MockHttpServletResponse();
output = new ServletServerHttpResponse(response);
}
@Test
public void testAPIContract() {
HttpMessageConverter<?> hmc = new SimpleCsvHttpMessageConverter();
List<MediaType> supportedTypes = hmc.getSupportedMediaTypes();
Assert.assertEquals("Supports text/csv", Arrays.asList(CSV_MEDIA_TYPE), supportedTypes);
Assert.assertTrue("Can write CSV", hmc.canWrite(Object.class, CSV_MEDIA_TYPE));
}
@Test
public void testEmptyModel() throws Exception {
Map<String, Object> model = new LinkedHashMap<String, Object>();
HttpMessageConverter<Object> hmc = new SimpleCsvHttpMessageConverter();
hmc.write(model, CSV_MEDIA_TYPE, output);
String result = response.getContentAsString();
assertEquals("", result);
}
@Test
public void testSingleRowSingleColumn() throws Exception {
Map<String, Object> model = new LinkedHashMap<String, Object>();
model.put("foo", "bar");
HttpMessageConverter<Object> hmc = new SimpleCsvHttpMessageConverter();
hmc.write(model, CSV_MEDIA_TYPE, output);
String result = response.getContentAsString();
assertEquals("foo\nbar\n", result);
}
@Test
public void testSingleRowMap() throws Exception {
Map<String, Object> row = new LinkedHashMap<String, Object>();
row.put("one", "1");
row.put("two", "2");
row.put("three", "3");
HttpMessageConverter<Object> hmc = new SimpleCsvHttpMessageConverter();
hmc.write(row, CSV_MEDIA_TYPE, output);
String result = response.getContentAsString();
assertEquals("one,two,three\n1,2,3\n", result);
}
@Test
public void testMultiRowMap() throws Exception {
List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
Map<String, Object> row = new LinkedHashMap<String, Object>();
row.put("one", "1");
row.put("two", "2");
row.put("three", "3");
rows.add(row);
row = new LinkedHashMap<String, Object>();
row.put("one", "4");
row.put("two", "5");
row.put("three", "6");
rows.add(row);
HttpMessageConverter<Object> hmc = new SimpleCsvHttpMessageConverter();
hmc.write(rows, CSV_MEDIA_TYPE, output);
String result = response.getContentAsString();
assertEquals("one,two,three\n1,2,3\n4,5,6\n", result);
}
public static final class TestBean {
private final String one;
private final Integer two;
private final String three;
public TestBean(String a, Integer b, String c) {
super();
one = a;
two = b;
three = c;
}
public String getOne() {
return one;
}
public Integer getTwo() {
return two;
}
public String getThree() {
return three;
}
}
@Test
public void testSingleRowBeanNoOrder() throws Exception {
TestBean row = new TestBean("1", 2, "3");
HttpMessageConverter<Object> hmc = new SimpleCsvHttpMessageConverter();
hmc.write(row, CSV_MEDIA_TYPE, output);
String result = response.getContentAsString();
assertFalse("Result should not be empty", result.length() == 0);
assertFalse("Order should not be preserved", "one,two,three\n1,2,3\n".equals(result));
}
@Test
public void testFieldWithDelimiter() throws Exception {
Map<String, Object> row = new LinkedHashMap<String, Object>();
row.put("one", "1,1");
row.put("two", "2");
row.put("three", "3,3");
HttpMessageConverter<Object> hmc = new SimpleCsvHttpMessageConverter();
hmc.write(row, CSV_MEDIA_TYPE, output);
String result = response.getContentAsString();
assertEquals("one,two,three\n\"1,1\",2,\"3,3\"\n", result);
}
}