View Javadoc
1   package fr.ifremer.dali.dao.data.survey;
2   
3   /*
4    * #%L
5    * Dali :: Core
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  import com.google.common.collect.Lists;
27  import fr.ifremer.dali.dao.DaliDatabaseResource;
28  import fr.ifremer.dali.dao.administration.program.DaliProgramDao;
29  import fr.ifremer.dali.dao.administration.user.DaliDepartmentDao;
30  import fr.ifremer.dali.dao.referential.DaliReferentialDao;
31  import fr.ifremer.dali.dao.referential.monitoringLocation.DaliMonitoringLocationDao;
32  import fr.ifremer.dali.dao.technical.Geometries;
33  import fr.ifremer.dali.dto.CoordinateDTO;
34  import fr.ifremer.dali.dto.DaliBeanFactory;
35  import fr.ifremer.dali.dto.DaliBeans;
36  import fr.ifremer.dali.dto.data.survey.SurveyDTO;
37  import fr.ifremer.dali.dto.enums.SynchronizationStatusValues;
38  import fr.ifremer.dali.service.DaliServiceLocator;
39  import fr.ifremer.quadrige3.core.test.AbstractDaoTest;
40  import org.junit.Before;
41  import org.junit.ClassRule;
42  import org.junit.Test;
43  
44  import java.sql.Date;
45  import java.time.LocalDate;
46  import java.util.Arrays;
47  import java.util.List;
48  
49  import static org.junit.Assert.*;
50  
51  public class SurveyDaoWriteTest extends AbstractDaoTest {
52  
53      @ClassRule
54      public static final DaliDatabaseResource dbResource = DaliDatabaseResource.writeDb();
55  
56      private DaliSurveyDao surveyDao;
57      private DaliCampaignDao campaignDao;
58      private DaliProgramDao programDao;
59      private DaliMonitoringLocationDao mlDao;
60      private DaliReferentialDao refDao;
61      private DaliDepartmentDao departmentDao;
62  
63      private Integer testSurveyId;
64  
65      @Before
66      @Override
67      public void setUp() throws Exception {
68          super.setUp();
69          surveyDao = DaliServiceLocator.instance().getService("daliSurveyDao", DaliSurveyDao.class);
70          campaignDao = DaliServiceLocator.instance().getService("daliCampaignDao", DaliCampaignDao.class);
71          programDao = DaliServiceLocator.instance().getService("daliProgramDao", DaliProgramDao.class);
72          mlDao = DaliServiceLocator.instance().getService("daliMonitoringLocationDao", DaliMonitoringLocationDao.class);
73          refDao = DaliServiceLocator.instance().getService("daliReferentialDao", DaliReferentialDao.class);
74          departmentDao = DaliServiceLocator.instance().getService("daliDepartmentDao", DaliDepartmentDao.class);
75          setCommitOnTearDown(true);
76      }
77  
78      @Test
79      public void createUpdateSaveSurvey() {
80  
81          // create a survey bean
82          SurveyDTO survey = DaliBeanFactory.newSurveyDTO();
83  
84          survey.setName("test survey");
85          survey.setComment("test survey comment");
86          survey.setDate(LocalDate.of(2015,2,5));
87          survey.setTime(1252);
88          survey.setBottomDepth(15.2);
89          survey.setCampaign(campaignDao.getAllCampaigns().get(0));
90          survey.setProgram(programDao.getProgramByCode("REMIS"));
91          survey.setOccasion(null);
92          survey.setLocation(mlDao.getLocationById(1));
93          survey.setPositioning(refDao.getAllPositioningSystems().get(0));
94          CoordinateDTO surveyCoordinate = DaliBeanFactory.newCoordinateDTO();
95          surveyCoordinate.setMinLongitude(2.3488000);
96          surveyCoordinate.setMinLatitude(48.8534100);
97          survey.setCoordinate(surveyCoordinate);
98          survey.setDepartment(departmentDao.getDepartmentById(1));
99          survey.setSynchronizationStatus(SynchronizationStatusValues.DIRTY.toSynchronizationStatusDTO());
100 
101         SurveyDTO surveyBase = DaliBeans.clone(survey);
102 
103         // save
104         survey = surveyDao.save(survey);
105 
106         assertNotNull(survey);
107         assertNotNull(survey.getId());
108         testSurveyId = survey.getId();
109 
110         // assert all values after save
111         assertSurveyEquals(surveyBase, survey, false);
112 
113         // reload
114         survey = getSurveyTest();
115         assertNotNull(survey);
116 
117         // assert all values
118         assertSurveyEquals(surveyBase, survey, false);
119 
120         // modify all values
121         survey.setName("test survey 2");
122         survey.setComment("test survey comment 2");
123         survey.setDate(LocalDate.of(2015,1,1));
124         survey.setTime(1252);
125         survey.setBottomDepth(15.2);
126         survey.setControlDate(Date.valueOf("2015-03-08"));
127 //        survey.setValidationDate(Date.valueOf("2015-04-16"));
128 //        survey.setQualificationComment("validation date comment 2");
129         survey.setCampaign(campaignDao.getAllCampaigns().get(1));
130         survey.setProgram(programDao.getProgramByCode("REBENT"));
131         survey.setOccasion(null);
132         survey.setLocation(mlDao.getLocationById(2));
133         survey.setPositioning(refDao.getAllPositioningSystems().get(1));
134         surveyCoordinate.setMinLongitude(2.3488000);
135         surveyCoordinate.setMinLatitude(48.8534100);
136         surveyCoordinate.setMaxLongitude(2.3555000);
137         surveyCoordinate.setMaxLatitude(48.8539200);
138         survey.setCoordinate(surveyCoordinate);
139         survey.setDepartment(departmentDao.getDepartmentById(3));
140         survey.setSynchronizationStatus(SynchronizationStatusValues.DIRTY.toSynchronizationStatusDTO());
141 
142         surveyBase = DaliBeans.clone(survey);
143 
144         // update
145         survey = surveyDao.save(survey);
146 
147         assertNotNull(survey);
148         assertNotNull(survey.getId());
149         assertEquals(testSurveyId, survey.getId());
150 
151         // assert all values before save
152         assertSurveyEquals(surveyBase, survey, false);
153 
154         // reload
155         survey = getSurveyTest();
156         assertNotNull(survey);
157 
158         // assert all values
159         assertSurveyEquals(surveyBase, survey, true);
160 
161         /*
162          * DETAILED PART
163          */
164         SurveyDTO surveyDetail = surveyDao.getSurveyById(testSurveyId, false);
165         assertNotNull(surveyDetail);
166         assertEquals(testSurveyId, surveyDetail.getId()); // ça c'est du test ^^
167 
168         // check base fields
169         assertSurveyEquals(surveyBase, surveyDetail, true);
170 
171         // set other detailed fields
172         surveyDetail.setPositioningComment("positioning comment");
173 
174         // coordinate
175         surveyDetail.setCoordinate(null);
176         surveyDetail.setPositioning(null);
177 
178         // clone
179         SurveyDTO surveyDetailBase = DaliBeans.clone(surveyDetail);
180 
181         // save
182         surveyDetail = surveyDao.save(surveyDetail);
183         assertNotNull(surveyDetail);
184         assertNotNull(surveyDetail.getId());
185         assertEquals(testSurveyId, surveyDetail.getId());
186 
187         // compare to base
188         assertSurveyEquals(surveyDetailBase, surveyDetail, false);
189 
190         // reload and compare
191         surveyDetail = surveyDao.getSurveyById(testSurveyId, false);
192 
193         assertSurveyEquals(surveyDetailBase, surveyDetail, false);
194 
195         // modify all fields
196         surveyDetail.setName("test survey 3");
197         surveyDetail.setComment("test survey comment 3");
198         surveyDetail.setDate(LocalDate.of(2015,4,7));
199         surveyDetail.setTime(1953);
200         surveyDetail.setBottomDepth(12.90);
201         surveyDetail.setControlDate(Date.valueOf("2015-05-20"));
202 //        surveyDetail.setValidationDate(Date.valueOf("2015-05-21"));
203 //        surveyDetail.setQualificationComment("validation date comment 3");
204         surveyDetail.setCampaign(campaignDao.getAllCampaigns().get(2));
205         surveyDetail.setProgram(programDao.getProgramByCode("RNOHYD"));
206         surveyDetail.setOccasion(null);
207         surveyDetail.setLocation(mlDao.getLocationById(3));
208         surveyDetail.setPositioning(null);
209         surveyDetail.setCoordinate(null);
210         surveyDetail.setPositioningComment("positioning comment 2");
211 
212         // clone
213         surveyDetailBase = DaliBeans.clone(surveyDetail);
214 
215         // save, reload and compare
216         surveyDao.save(surveyDetail);
217         surveyDetail = surveyDao.getSurveyById(testSurveyId, false);
218         assertSurveyEquals(surveyDetailBase, surveyDetail, false);
219 
220         // some nulls
221         surveyDetail.setControlDate(null);
222         surveyDetail.setPositioningComment(null);
223 
224         // clone, save, reload and compare
225         surveyDetailBase = DaliBeans.clone(surveyDetail);
226         surveyDao.save(surveyDetail);
227         surveyDetail = surveyDao.getSurveyById(testSurveyId, false);
228         assertSurveyEquals(surveyDetailBase, surveyDetail, false);
229         
230         // delete
231         surveyDao.remove(Lists.newArrayList(testSurveyId));
232         
233         // reload survey by loading all surveys
234         assertNull(getSurveyTest());
235     }
236 
237     private SurveyDTO getSurveyTest() {
238 
239         // reload survey by loading all surveys
240         List<SurveyDTO> surveys = surveyDao.getSurveysByCriteria(null, Arrays.asList("REMIS","RNOHYD","REBENT"), null, null, null, null, null, null, null, true);
241         assertNotNull(surveys);
242 
243         SurveyDTO survey = null;
244         for (SurveyDTO s : surveys) {
245             if (testSurveyId.equals(s.getId())) {
246                 survey = s;
247                 break;
248             }
249         }
250         return survey;
251     }
252 
253     private void assertSurveyEquals(SurveyDTO surveyBase, SurveyDTO surveyToControl, boolean exceptDepartment) {
254 
255         assertEquals(surveyBase.getName(), surveyToControl.getName());
256         assertEquals(surveyBase.getComment(), surveyToControl.getComment());
257         assertEquals(surveyBase.getDate(), surveyToControl.getDate());
258         assertEquals(surveyBase.getTime(), surveyToControl.getTime());
259         assertEquals(surveyBase.getBottomDepth(), surveyToControl.getBottomDepth());
260         assertEquals(surveyBase.getControlDate(), surveyToControl.getControlDate());
261         assertEquals(surveyBase.getValidationDate(), surveyToControl.getValidationDate());
262         assertEquals(surveyBase.getQualificationComment(), surveyToControl.getQualificationComment());
263         assertEquals(surveyBase.getCampaign(), surveyToControl.getCampaign());
264         assertEquals(surveyBase.getProgram(), surveyToControl.getProgram());
265         assertEquals(surveyBase.getOccasion(), surveyToControl.getOccasion());
266         assertEquals(surveyBase.getLocation(), surveyToControl.getLocation());
267         assertEquals(surveyBase.getPositioning(), surveyToControl.getPositioning());
268         assertEquals(surveyBase.getPositioningComment(), surveyToControl.getPositioningComment());
269         assertCoordinateEquals(surveyBase.getCoordinate(), surveyToControl.getCoordinate());
270         assertEquals(surveyBase.getSynchronizationStatus(), surveyToControl.getSynchronizationStatus());
271 
272         if (exceptDepartment) {
273             assertNotEquals(surveyBase.getDepartment(), surveyToControl.getDepartment());
274         } else {
275             assertEquals(surveyBase.getDepartment(), surveyToControl.getDepartment());
276         }
277 
278     }
279 
280     private void assertCoordinateEquals(CoordinateDTO coordinateBase, CoordinateDTO coordinateToControl) {
281         if (coordinateBase == null) {
282             assertFalse(Geometries.isValid(coordinateToControl));
283             return;
284         } else {
285             assertNotNull(coordinateToControl);
286         }
287         assertTrue(Geometries.equals(coordinateBase, coordinateToControl));
288     }
289 
290 }