/sigmah/src/test/java/org/sigmah/server/report/generator/PivotTableGeneratorTest.java

http://sigma-h.googlecode.com/ · Java · 156 lines · 95 code · 44 blank · 17 comment · 1 complexity · 973f94fea442c60936ae85b973fe5796 MD5 · raw file

  1. /*
  2. * All Sigmah code is released under the GNU General Public License v3
  3. * See COPYRIGHT.txt and LICENSE.txt.
  4. */
  5. package org.sigmah.server.report.generator;
  6. import org.easymock.EasyMock;
  7. import org.junit.Assert;
  8. import org.junit.Test;
  9. import org.sigmah.server.dao.PivotDAO;
  10. import org.sigmah.shared.dao.Filter;
  11. import org.sigmah.shared.domain.User;
  12. import org.sigmah.shared.report.content.DimensionCategory;
  13. import org.sigmah.shared.report.content.EntityCategory;
  14. import org.sigmah.shared.report.content.PivotTableData;
  15. import org.sigmah.shared.report.model.AdminDimension;
  16. import org.sigmah.shared.report.model.Dimension;
  17. import org.sigmah.shared.report.model.DimensionType;
  18. import org.sigmah.shared.report.model.PivotTableElement;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. import java.util.Set;
  22. import static org.easymock.EasyMock.*;
  23. /**
  24. * @author Alex Bertram (akbertram@gmail.com)
  25. */
  26. public class PivotTableGeneratorTest {
  27. @Test
  28. public void test2x2() {
  29. // test input data: user
  30. User user = new User();
  31. user.setLocale("fr");
  32. // test input data: PivotTableElement
  33. PivotTableElement element = new PivotTableElement();
  34. AdminDimension provinceDim = new AdminDimension(1);
  35. element.addRowDimension(provinceDim);
  36. Dimension partnerDim = new Dimension(DimensionType.Partner);
  37. element.addColDimension(partnerDim);
  38. // test input data: aggregated results
  39. List<PivotDAO.Bucket> buckets = new ArrayList<PivotDAO.Bucket>();
  40. buckets.add(newBucket(433, category(provinceDim, 2, "Sud Kivu"), category(partnerDim, 1, "IRC")));
  41. buckets.add(newBucket(1032, category(provinceDim, 1, "Nord Kivu"), category(partnerDim, 2, "Solidarites")));
  42. buckets.add(newBucket(310, category(provinceDim, 1, "Nord Kivu"), category(partnerDim, 1, "IRC")));
  43. buckets.add(newBucket(926, category(provinceDim, 1, "Nord Kivu"), category(partnerDim, 3, "AVSI")));
  44. // collaborator : PivotDAO
  45. PivotDAO dao = createMock(PivotDAO.class);
  46. expect(dao.aggregate(anyInt(), isA(Filter.class), EasyMock.<Set<Dimension>>anyObject())).andReturn(buckets);
  47. replay(dao);
  48. // CLASS UNDER TEST!!
  49. PivotTableGenerator generator = new PivotTableGenerator(dao);
  50. generator.generate(user, element, null, null);
  51. Assert.assertNotNull("element content", element.getContent());
  52. PivotTableData data = element.getContent().getData();
  53. Assert.assertEquals("rows", 2, data.getRootRow().getChildCount());
  54. Assert.assertEquals("rows sorted", "Nord Kivu", data.getRootRow().getChildren().get(0).getLabel());
  55. Assert.assertEquals("cols", 3, data.getRootColumn().getChildCount());
  56. }
  57. @Test
  58. public void testIndicatorSortOrder() {
  59. // test input data: user
  60. User user = new User();
  61. user.setLocale("fr");
  62. // test input data: PivotTableElement
  63. PivotTableElement element = new PivotTableElement();
  64. Dimension indicatorDim = new Dimension(DimensionType.Indicator);
  65. element.addRowDimension(indicatorDim);
  66. // test input data: aggregated results
  67. List<PivotDAO.Bucket> buckets = new ArrayList<PivotDAO.Bucket>();
  68. buckets.add(newBucket(300, category(indicatorDim, 1, "Nb. menages", 3)));
  69. buckets.add(newBucket(400, category(indicatorDim, 2, "Nb. personnes", 1)));
  70. buckets.add(newBucket(600, category(indicatorDim, 3, "Nb. deplaces", 2)));
  71. // collaborator : PivotDAO
  72. PivotDAO dao = createMock(PivotDAO.class);
  73. expect(dao.aggregate(anyInt(), isA(Filter.class), EasyMock.<Set<Dimension>>anyObject())).andReturn(buckets);
  74. replay(dao);
  75. // CLASS UNDER TEST!!
  76. PivotTableGenerator generator = new PivotTableGenerator(dao);
  77. generator.generate(user, element, null, null);
  78. Assert.assertNotNull("element content", element.getContent());
  79. List<PivotTableData.Axis> rows = element.getContent().getData().getRootRow().getChildren();
  80. Assert.assertEquals(2, ((EntityCategory) rows.get(0).getCategory()).getId());
  81. Assert.assertEquals(3, ((EntityCategory) rows.get(1).getCategory()).getId());
  82. Assert.assertEquals(1, ((EntityCategory) rows.get(2).getCategory()).getId());
  83. }
  84. public class AndCategory {
  85. private Dimension dimension;
  86. private DimensionCategory category;
  87. public AndCategory(Dimension dimension, DimensionCategory category) {
  88. this.dimension = dimension;
  89. this.category = category;
  90. }
  91. public DimensionCategory getCategory() {
  92. return category;
  93. }
  94. public Dimension getDimension() {
  95. return dimension;
  96. }
  97. }
  98. public AndCategory category(Dimension dim, int id, String label) {
  99. return new AndCategory(dim, new EntityCategory(id, label));
  100. }
  101. public AndCategory category(Dimension dim, int id, String label, int sortOrder) {
  102. return new AndCategory(dim, new EntityCategory(id, label, sortOrder));
  103. }
  104. public PivotDAO.Bucket newBucket(double value, AndCategory... pairs) {
  105. PivotDAO.Bucket bucket = new PivotDAO.Bucket();
  106. bucket.setDoubleValue(value);
  107. for (AndCategory pair : pairs) {
  108. bucket.setCategory(pair.getDimension(), pair.getCategory());
  109. }
  110. return bucket;
  111. }
  112. }