/* ==================================================================
* SimpleCsvViewTest.java - Feb 11, 2012 7:08:42 PM
*
* Copyright 2007-2012 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
* ==================================================================
* $Id$
* ==================================================================
*/
package net.solarnetwork.web.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import net.solarnetwork.test.AbstractTest;
import net.solarnetwork.web.support.SimpleCsvView;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
/**
* Test case for the {@link SimpleCsvView} class.
*
* @author matt
* @version $Revision$
*/
public class SimpleCsvViewTest extends AbstractTest {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
@Before
public void setupTest() {
request = new MockHttpServletRequest("GET", "/csv");
response = new MockHttpServletResponse();
}
@Test
public void testEmptyModel() throws Exception {
Map<String, Object> model = new LinkedHashMap<String, Object>();
SimpleCsvView view = new SimpleCsvView();
view.render(model, request, response);
String result = response.getContentAsString();
assertEquals("", result);
}
@Test
public void testMissingDataFallbackToModel() throws Exception {
Map<String, Object> model = new LinkedHashMap<String, Object>();
model.put("foo", "bar");
SimpleCsvView view = new SimpleCsvView();
view.setDataModelKey("data");
view.render(model, request, response);
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");
Map<String, Object> model = new LinkedHashMap<String, Object>();
model.put("data", row);
SimpleCsvView view = new SimpleCsvView();
view.setDataModelKey("data");
view.render(model, request, response);
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);
Map<String, Object> model = new LinkedHashMap<String, Object>();
model.put("data", rows);
SimpleCsvView view = new SimpleCsvView();
view.setDataModelKey("data");
view.render(model, request, response);
String result = response.getContentAsString();
assertEquals("one,two,three\n1,2,3\n4,5,6\n", result);
}
public static final class TestBean {
private String one;
private Integer two;
private 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");
Map<String, Object> model = new LinkedHashMap<String, Object>();
model.put("data", row);
SimpleCsvView view = new SimpleCsvView();
view.setDataModelKey("data");
view.render(model, request, response);
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 testSingleRowBeanWithOrder() throws Exception {
TestBean row = new TestBean("1", 2, "3");
Collection<String> fieldOrder = new ArrayList<String>(3);
fieldOrder.add("one");
fieldOrder.add("two");
fieldOrder.add("three");
Map<String, Object> model = new LinkedHashMap<String, Object>();
model.put("data", row);
model.put("fieldOrder", fieldOrder);
SimpleCsvView view = new SimpleCsvView();
view.setDataModelKey("data");
view.setFieldOrderKey("fieldOrder");
view.render(model, request, response);
String result = response.getContentAsString();
assertEquals("one,two,three\n1,2,3\n", result);
}
@Test
public void testMultiRowBeanWithOrder() throws Exception {
Collection<TestBean> rows = new ArrayList<SimpleCsvViewTest.TestBean>(2);
rows.add(new TestBean("1", 2, "3"));
rows.add(new TestBean("4", 5, "6"));
Collection<String> fieldOrder = new ArrayList<String>(3);
fieldOrder.add("one");
fieldOrder.add("two");
fieldOrder.add("three");
Map<String, Object> model = new LinkedHashMap<String, Object>();
model.put("data", rows);
model.put("fieldOrder", fieldOrder);
SimpleCsvView view = new SimpleCsvView();
view.setDataModelKey("data");
view.setFieldOrderKey("fieldOrder");
view.render(model, request, response);
String result = response.getContentAsString();
assertEquals("one,two,three\n1,2,3\n4,5,6\n", 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");
Map<String, Object> model = new LinkedHashMap<String, Object>();
model.put("data", row);
SimpleCsvView view = new SimpleCsvView();
view.setDataModelKey("data");
view.render(model, request, response);
String result = response.getContentAsString();
assertEquals("one,two,three\n\"1,1\",2,\"3,3\"\n", result);
}
}