1 package fr.ifremer.dali.dao.data.survey;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
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
104 survey = surveyDao.save(survey);
105
106 assertNotNull(survey);
107 assertNotNull(survey.getId());
108 testSurveyId = survey.getId();
109
110
111 assertSurveyEquals(surveyBase, survey, false);
112
113
114 survey = getSurveyTest();
115 assertNotNull(survey);
116
117
118 assertSurveyEquals(surveyBase, survey, false);
119
120
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
128
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
145 survey = surveyDao.save(survey);
146
147 assertNotNull(survey);
148 assertNotNull(survey.getId());
149 assertEquals(testSurveyId, survey.getId());
150
151
152 assertSurveyEquals(surveyBase, survey, false);
153
154
155 survey = getSurveyTest();
156 assertNotNull(survey);
157
158
159 assertSurveyEquals(surveyBase, survey, true);
160
161
162
163
164 SurveyDTO surveyDetail = surveyDao.getSurveyById(testSurveyId, false);
165 assertNotNull(surveyDetail);
166 assertEquals(testSurveyId, surveyDetail.getId());
167
168
169 assertSurveyEquals(surveyBase, surveyDetail, true);
170
171
172 surveyDetail.setPositioningComment("positioning comment");
173
174
175 surveyDetail.setCoordinate(null);
176 surveyDetail.setPositioning(null);
177
178
179 SurveyDTO surveyDetailBase = DaliBeans.clone(surveyDetail);
180
181
182 surveyDetail = surveyDao.save(surveyDetail);
183 assertNotNull(surveyDetail);
184 assertNotNull(surveyDetail.getId());
185 assertEquals(testSurveyId, surveyDetail.getId());
186
187
188 assertSurveyEquals(surveyDetailBase, surveyDetail, false);
189
190
191 surveyDetail = surveyDao.getSurveyById(testSurveyId, false);
192
193 assertSurveyEquals(surveyDetailBase, surveyDetail, false);
194
195
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
203
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
213 surveyDetailBase = DaliBeans.clone(surveyDetail);
214
215
216 surveyDao.save(surveyDetail);
217 surveyDetail = surveyDao.getSurveyById(testSurveyId, false);
218 assertSurveyEquals(surveyDetailBase, surveyDetail, false);
219
220
221 surveyDetail.setControlDate(null);
222 surveyDetail.setPositioningComment(null);
223
224
225 surveyDetailBase = DaliBeans.clone(surveyDetail);
226 surveyDao.save(surveyDetail);
227 surveyDetail = surveyDao.getSurveyById(testSurveyId, false);
228 assertSurveyEquals(surveyDetailBase, surveyDetail, false);
229
230
231 surveyDao.remove(Lists.newArrayList(testSurveyId));
232
233
234 assertNull(getSurveyTest());
235 }
236
237 private SurveyDTO getSurveyTest() {
238
239
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 }