/sigmah/src/test/java/org/sigmah/server/endpoint/gwtrpc/LogFrameIntegrationTest.java

http://sigma-h.googlecode.com/ · Java · 327 lines · 208 code · 107 blank · 12 comment · 2 complexity · 02f1d8479279ca9ef4786dd1bb5c7d01 MD5 · raw file

  1. package org.sigmah.server.endpoint.gwtrpc;
  2. import static org.hamcrest.CoreMatchers.equalTo;
  3. import static org.hamcrest.CoreMatchers.not;
  4. import static org.junit.Assert.assertThat;
  5. import java.util.List;
  6. import org.dozer.Mapper;
  7. import org.junit.Test;
  8. import org.junit.runner.RunWith;
  9. import org.sigmah.server.dao.OnDataSet;
  10. import org.sigmah.shared.command.CopyLogFrame;
  11. import org.sigmah.shared.command.GetIndicators;
  12. import org.sigmah.shared.command.GetProject;
  13. import org.sigmah.shared.command.UpdateLogFrame;
  14. import org.sigmah.shared.command.result.IndicatorListResult;
  15. import org.sigmah.shared.command.result.LogFrameResult;
  16. import org.sigmah.shared.domain.Indicator;
  17. import org.sigmah.shared.domain.logframe.IndicatorCopyStrategy;
  18. import org.sigmah.shared.domain.logframe.LogFrame;
  19. import org.sigmah.shared.domain.logframe.LogFrameGroupType;
  20. import org.sigmah.shared.dto.IndicatorDTO;
  21. import org.sigmah.shared.dto.ProjectDTO;
  22. import org.sigmah.shared.dto.logframe.ExpectedResultDTO;
  23. import org.sigmah.shared.dto.logframe.LogFrameActivityDTO;
  24. import org.sigmah.shared.dto.logframe.LogFrameDTO;
  25. import org.sigmah.shared.dto.logframe.LogFrameGroupDTO;
  26. import org.sigmah.shared.dto.logframe.LogFrameModelDTO;
  27. import org.sigmah.shared.dto.logframe.SpecificObjectiveDTO;
  28. import org.sigmah.shared.exception.CommandException;
  29. import org.sigmah.test.InjectionSupport;
  30. import com.google.inject.Inject;
  31. @RunWith(InjectionSupport.class)
  32. @OnDataSet("/dbunit/project-indicator.db.xml")
  33. public class LogFrameIntegrationTest extends CommandTestCase {
  34. @Test
  35. public void logFrame() throws CommandException {
  36. createNewLogFrameForProject(1);
  37. // now verify that we can reload
  38. ProjectDTO project = execute(new GetProject(1));
  39. }
  40. @Test
  41. public void deleteActivity() throws CommandException {
  42. createNewLogFrameForProject(1);
  43. // now verify that we can reload
  44. ProjectDTO project = execute(new GetProject(1));
  45. project.getLogFrameDTO()
  46. .getSpecificObjectives().get(0)
  47. .getExpectedResults().get(0)
  48. .getActivities().remove(1);
  49. execute(new UpdateLogFrame(project.getLogFrameDTO(), 1));
  50. // reload project
  51. project = execute(new GetProject(1));
  52. assertThat("number of activies", project.getLogFrameDTO()
  53. .getSpecificObjectives().get(0)
  54. .getExpectedResults().get(0)
  55. .getActivities().size(), equalTo(1));
  56. }
  57. @Test
  58. public void saveIndicators() throws CommandException {
  59. createNewLogFrameForProject(1);
  60. // now retrieve the new log frame and the list of indicators
  61. ProjectDTO project = execute(new GetProject(1));
  62. IndicatorListResult indicators = execute(GetIndicators.forDatabase(1));
  63. project.getLogFrameDTO()
  64. .getSpecificObjectives().get(0)
  65. .getIndicators().add( indicators.getData().get(0));
  66. LogFrameResult saved = execute(new UpdateLogFrame(project.getLogFrameDTO(), project.getId()));
  67. // validate the indicator was properly added
  68. project = execute(new GetProject(1));
  69. assertThat( project.getLogFrameDTO()
  70. .getSpecificObjectives().get(0)
  71. .getIndicators().get(0)
  72. .getName(), equalTo( indicators.getData().get(0).getName()) );
  73. }
  74. @Test
  75. public void newIndicator() throws CommandException {
  76. createNewLogFrameForProject(1);
  77. // retrieve the new logframe
  78. ProjectDTO project = execute(new GetProject(1));
  79. IndicatorDTO newInd = addNewIndicatorToLogFrame(project);
  80. // validate the indicator was properly added
  81. project = execute(new GetProject(1));
  82. assertThat( project.getLogFrameDTO()
  83. .getSpecificObjectives().get(0)
  84. .getIndicators().get(0)
  85. .getName(), equalTo( newInd.getName()) );
  86. // .. and validate that the indicator is linked to the database
  87. IndicatorListResult indicators = execute(GetIndicators.forDatabase(1));
  88. IndicatorDTO theNewIndicator = findByName(indicators, newInd.getName());
  89. // now try resaving to make sure that the indicator preserves its relationship with UserDatabase
  90. LogFrameResult afterReSave = execute(new UpdateLogFrame(project.getLogFrameDTO(), project.getId()));
  91. IndicatorDTO theNewIndicatorAfterReSave = afterReSave.getLogFrame()
  92. .getSpecificObjectives().get(0).getIndicators().get(0);
  93. assertThat(theNewIndicatorAfterReSave.getId(), equalTo(theNewIndicator.getId()));
  94. }
  95. @Test
  96. public void copyLogFrame() throws CommandException {
  97. createNewLogFrameForProject(1);
  98. // retrieve the new logframe
  99. ProjectDTO project = execute(new GetProject(1));
  100. IndicatorDTO newInd = addNewIndicatorToLogFrame(project);
  101. LogFrameDTO copiedLogFrame = execute(new CopyLogFrame(project.getLogFrameDTO().getId(), 2));
  102. SpecificObjectiveDTO soCopy = copiedLogFrame.getSpecificObjectives().get(0);
  103. SpecificObjectiveDTO soOriginal = project.getLogFrameDTO().getSpecificObjectives().get(0);
  104. assertThat(soCopy.getCode(), equalTo(soOriginal.getCode()));
  105. assertThat(soCopy.getId(), not(equalTo(soOriginal.getId())));
  106. assertThat(soCopy.getRisksAndAssumptions(), equalTo(soOriginal.getRisksAndAssumptions()));
  107. assertThat(soCopy.getExpectedResults().size(), equalTo(soOriginal.getExpectedResults().size()));
  108. ExpectedResultDTO erCopy = soCopy.getExpectedResults().get(0);
  109. ExpectedResultDTO erOriginal = soOriginal.getExpectedResults().get(0);
  110. assertThat(erCopy.getCode(), equalTo(erOriginal.getCode()));
  111. assertThat(erCopy.getId(), not(equalTo(erOriginal.getId())));
  112. assertThat(erCopy.getActivities().size(), equalTo(erOriginal.getActivities().size()));
  113. LogFrameActivityDTO aCopy = erCopy.getActivities().get(0);
  114. LogFrameActivityDTO aOriginal = erOriginal.getActivities().get(0);
  115. assertThat(aCopy.getId(), not(equalTo(aOriginal.getId())));
  116. assertThat(aCopy.getCode(), equalTo(aOriginal.getCode()));
  117. assertThat(aCopy.getTitle(), equalTo(aOriginal.getTitle()));
  118. List<IndicatorDTO> indicators = copiedLogFrame
  119. .getSpecificObjectives().get(0)
  120. .getIndicators();
  121. assertThat( indicators.size(), equalTo(1));
  122. assertThat( indicators.get(0).getDatabaseId(), equalTo(2));
  123. // assure that the original is unmolested!
  124. IndicatorListResult reloadedIndicators = execute(GetIndicators.forDatabase(1));
  125. assertThat( findByName(reloadedIndicators, newInd.getName()).getDatabaseId(), equalTo(1));
  126. }
  127. @Test
  128. public void replaceLogFrame() throws CommandException {
  129. LogFrameResult result1 = createNewLogFrameForProject(1);
  130. LogFrameResult result2 = createNewLogFrameForProject(2);
  131. execute(new CopyLogFrame(result1.getLogFrame().getId(), 2));
  132. }
  133. @Test
  134. @OnDataSet("/dbunit/project-indicator.db.xml")
  135. public void replaceLogFrameWithIndicatorLinking() throws CommandException {
  136. LogFrameResult result1 = createNewLogFrameForProject(1);
  137. addNewIndicatorToLogFrame(execute(new GetProject(1)));
  138. LogFrameResult result2 = createNewLogFrameForProject(2);
  139. execute(CopyLogFrame.from(result1.getLogFrame().getId())
  140. .to(2)
  141. .with(IndicatorCopyStrategy.DUPLICATE));
  142. }
  143. private IndicatorDTO findByName(IndicatorListResult indicators, String name) {
  144. for(IndicatorDTO indicator : indicators.getData()) {
  145. if(indicator.getName().equals(name)) {
  146. return indicator;
  147. }
  148. }
  149. throw new AssertionError("indicator with name '" + name + "' not found");
  150. }
  151. private LogFrameResult createNewLogFrameForProject(int projectId) throws CommandException {
  152. LogFrameModelDTO model = new LogFrameModelDTO();
  153. model.setName("Generic Model");
  154. LogFrameDTO logFrame = new LogFrameDTO();
  155. logFrame.setMainObjective("Reduce child mortalite");
  156. logFrame.setLogFrameModel(model);
  157. LogFrameGroupDTO soGroup = logFrame.addGroup("S.O. 1", LogFrameGroupType.SPECIFIC_OBJECTIVE);
  158. SpecificObjectiveDTO so1 = logFrame.addSpecificObjective();
  159. so1.setCode(1);
  160. so1.setRisksAndAssumptions("The community is open to vaccinating their children");
  161. so1.setInterventionLogic("Assure that all children are vaccinated");
  162. so1.setParentLogFrame(logFrame);
  163. so1.setGroup(soGroup);
  164. LogFrameGroupDTO resultGroup = logFrame.addGroup("R. 1", LogFrameGroupType.EXPECTED_RESULT);
  165. ExpectedResultDTO result1 = so1.addExpectedResult();
  166. result1.setCode(1);
  167. result1.setLabel("R1");
  168. result1.setInterventionLogic("95% of children are vaccinated");
  169. result1.setGroup(resultGroup);
  170. LogFrameGroupDTO activityGroup = logFrame.addGroup("Community-based", LogFrameGroupType.ACTIVITY);
  171. LogFrameActivityDTO activity = result1.addActivity();
  172. activity.setCode(1);
  173. activity.setLabel("Vaccination");
  174. activity.setAdvancement(0);
  175. activity.setGroup(activityGroup);
  176. LogFrameActivityDTO activity2 = result1.addActivity();
  177. activity2.setCode(2);
  178. activity2.setLabel("Awareness raising");
  179. activity2.setAdvancement(0);
  180. activity2.setGroup(activityGroup);
  181. // verify that is saved without error
  182. return execute(new UpdateLogFrame(logFrame, projectId));
  183. }
  184. private IndicatorDTO addNewIndicatorToLogFrame(ProjectDTO project) throws CommandException {
  185. IndicatorDTO newInd = new IndicatorDTO();
  186. newInd.setDatabaseId(1);
  187. newInd.setName("Number of children vaccinated");
  188. newInd.setAggregation(IndicatorDTO.AGGREGATE_SUM);
  189. newInd.setUnits("children");
  190. newInd.setObjective(1000.0d);
  191. project.getLogFrameDTO()
  192. .getSpecificObjectives().get(0)
  193. .getIndicators().add( newInd );
  194. execute(new UpdateLogFrame(project.getLogFrameDTO(), project.getId()));
  195. return newInd;
  196. }
  197. @Inject
  198. private Mapper mapper;
  199. @Test
  200. public void indicatorIdIsMapped() throws CommandException {
  201. LogFrameModelDTO model = new LogFrameModelDTO();
  202. model.setName("Generic Model");
  203. LogFrameDTO logFrame = new LogFrameDTO();
  204. logFrame.setMainObjective("Reduce child mortalite");
  205. logFrame.setLogFrameModel(model);
  206. LogFrameGroupDTO soGroup = logFrame.addGroup("S.O. 1", LogFrameGroupType.SPECIFIC_OBJECTIVE);
  207. SpecificObjectiveDTO so1 = logFrame.addSpecificObjective();
  208. so1.setCode(1);
  209. so1.setRisksAndAssumptions("The community is open to vaccinating their children");
  210. so1.setInterventionLogic("Assure that all children are vaccinated");
  211. so1.setParentLogFrame(logFrame);
  212. so1.setGroup(soGroup);
  213. IndicatorListResult indicators = execute(GetIndicators.forDatabase(1));
  214. IndicatorDTO anIndicator = indicators.getData().get(0);
  215. so1.getIndicators().add(anIndicator);
  216. LogFrame entity = mapper.map(logFrame, LogFrame.class);
  217. Indicator anIndicatorMapped = entity.getSpecificObjectives().get(0).getIndicators().iterator().next();
  218. assertThat( anIndicatorMapped.getId(), equalTo( anIndicator.getId() ));
  219. }
  220. }