package org.activityinfo.server.report.renderer.excel;
/*
* #%L
* ActivityInfo Server
* %%
* Copyright (C) 2009 - 2013 UNICEF
* %%
* 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 3 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, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import com.google.common.collect.Maps;
import org.activityinfo.legacy.shared.command.DimensionType;
import org.activityinfo.legacy.shared.reports.content.FilterDescription;
import org.activityinfo.legacy.shared.reports.model.PivotTableReportElement;
import org.activityinfo.server.report.DummyPivotTableData;
import org.activityinfo.server.report.DummyPivotTableData2;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.junit.Assert;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;
/**
* @author Alex Bertram (akbertram@gmail.com)
*/
public class PivotTableRendererTest {
@Test
public void test() {
// input test data : element + content
DummyPivotTableData testData = new DummyPivotTableData();
PivotTableReportElement element = testData.Foobar1612Element();
// Destination book
HSSFWorkbook book = new HSSFWorkbook();
// CLASS under test
ExcelPivotTableRenderer renderer = new ExcelPivotTableRenderer();
renderer.render(book, element);
// VERIFY output
Sheet sheet = book.getSheetAt(0);
Assert.assertEquals("title cell", element.getTitle(),
sheet.getRow(0).getCell(0).getRichStringCellValue().getString());
Assert.assertEquals("last column header", "Abri",
sheet.getRow(4).getCell(5).getRichStringCellValue().getString());
Assert.assertEquals("columns headers indentation", (short) 0,
sheet.getRow(4).getCell(3).getCellStyle().getIndention());
// Write output to disk
try {
File outputFile = new File("target/report-tests");
outputFile.mkdirs();
OutputStream out =
new FileOutputStream(outputFile.getAbsoluteFile()
+ "/PivotTableRendererTest.xls");
book.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testNoColumnDimensions() {
// input test data : element + content
DummyPivotTableData2 testData = new DummyPivotTableData2();
PivotTableReportElement element = testData.testElement();
// Destination book
HSSFWorkbook book = new HSSFWorkbook();
// CLASS under test
ExcelPivotTableRenderer renderer = new ExcelPivotTableRenderer();
renderer.render(book, element);
// Write output to disk
try {
File outputFile = new File("target/report-tests");
outputFile.mkdirs();
OutputStream out =
new FileOutputStream(outputFile.getAbsoluteFile()
+ "/testNoColumnDimensions.xls");
book.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
// VERIFY output
Sheet sheet = book.getSheetAt(0);
Assert.assertEquals(100, (int) sheet.getRow(5).getCell(1)
.getNumericCellValue());
}
@Test
public void veryLongFilter() {
// input test data : element + content
DummyPivotTableData2 testData = new DummyPivotTableData2();
PivotTableReportElement element = testData.testElement();
// Filtering on 4000 indicators....
Map<Integer, String> labelMap = Maps.newHashMap();
for (int i = 1; i != 10000; ++i) {
element.getFilter().addRestriction(DimensionType.Indicator, i);
labelMap.put(i, "Very long indicator name " + i);
}
element.getContent().getFilterDescriptions().add(
new FilterDescription(DimensionType.Indicator, labelMap));
// Destination book
HSSFWorkbook book = new HSSFWorkbook();
// CLASS under test
ExcelPivotTableRenderer renderer = new ExcelPivotTableRenderer();
renderer.render(book, element);
}
}