1 package fr.ifremer.dali.dao.data.measurement;
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.ImmutableList;
27 import com.google.common.collect.Lists;
28 import fr.ifremer.dali.dao.DaliDatabaseResource;
29 import fr.ifremer.dali.dao.referential.pmfm.DaliPmfmDao;
30 import fr.ifremer.dali.dao.referential.pmfm.DaliQualitativeValueDao;
31 import fr.ifremer.dali.dao.referential.taxon.DaliTaxonGroupDao;
32 import fr.ifremer.dali.dao.referential.taxon.DaliTaxonNameDao;
33 import fr.ifremer.dali.dto.DaliBeanFactory;
34 import fr.ifremer.dali.dto.DaliBeans;
35 import fr.ifremer.dali.dto.data.measurement.MeasurementDTO;
36 import fr.ifremer.dali.dto.referential.TaxonDTO;
37 import fr.ifremer.dali.dto.referential.TaxonGroupDTO;
38 import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
39 import fr.ifremer.dali.dto.referential.pmfm.QualitativeValueDTO;
40 import fr.ifremer.dali.service.DaliServiceLocator;
41 import fr.ifremer.quadrige3.core.test.AbstractDaoTest;
42 import org.apache.commons.collections4.ListUtils;
43 import org.junit.Before;
44 import org.junit.ClassRule;
45 import org.junit.FixMethodOrder;
46 import org.junit.Test;
47 import org.junit.runners.MethodSorters;
48
49 import java.math.BigDecimal;
50 import java.time.LocalDate;
51 import java.util.List;
52 import java.util.Map;
53 import java.util.function.Predicate;
54
55 import static org.junit.Assert.*;
56
57 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
58 public class MeasurementDaoWriteTest extends AbstractDaoTest {
59
60 @ClassRule
61 public static final DaliDatabaseResource dbResource = DaliDatabaseResource.writeDb();
62
63 private DaliPmfmDao pmfmDao;
64 private DaliMeasurementDao measurementDao;
65 private DaliTaxonGroupDao taxonGroupDao;
66 private DaliTaxonNameDao taxonNameDao;
67 private DaliQualitativeValueDao qualitativeValueDao;
68
69 private static final int SURVEY_ID = 101;
70
71 @Before
72 @Override
73 public void setUp() throws Exception {
74 super.setUp();
75 pmfmDao = DaliServiceLocator.instance().getService("daliPmfmDao", DaliPmfmDao.class);
76 measurementDao = DaliServiceLocator.instance().getService("daliMeasurementDao", DaliMeasurementDao.class);
77 taxonGroupDao = DaliServiceLocator.instance().getService("daliTaxonGroupDao", DaliTaxonGroupDao.class);
78 taxonNameDao = DaliServiceLocator.instance().getService("daliTaxonNameDao", DaliTaxonNameDao.class);
79 qualitativeValueDao = DaliServiceLocator.instance().getService("daliQualitativeValueDao", DaliQualitativeValueDao.class);
80 setCommitOnTearDown(true);
81 }
82
83 @Test
84 public void createUpdateSurveyMeasurement() {
85
86
87 taxonGroupDao.getAllTaxonGroups();
88
89 List<MeasurementDTO> measurements = Lists.newArrayList();
90
91
92 PmfmDTO pmfm1 = pmfmDao.getPmfmById(11);
93 assertNotNull(pmfm1);
94 MeasurementDTO m1 = DaliBeanFactory.newMeasurementDTO();
95 m1.setNumericalValue(BigDecimal.valueOf(2.5));
96 m1.setPrecision(2);
97 m1.setDigitNb(1);
98 m1.setComment("(m1) numeric measurement on pmfm 151");
99 MeasurementDTO m2 = DaliBeanFactory.newMeasurementDTO();
100 m2.setNumericalValue(BigDecimal.valueOf(1.28));
101 m2.setPrecision(3);
102 m2.setDigitNb(2);
103 m2.setComment("(m2) numeric measurement 2 on pmfm 151");
104 m1.setPmfm(pmfm1);
105 m2.setPmfm(pmfm1);
106 measurements.add(m1);
107 measurements.add(m2);
108
109
110 PmfmDTO pmfm2 = pmfmDao.getPmfmById(4);
111 assertNotNull(pmfm2);
112 MeasurementDTO m3 = DaliBeanFactory.newMeasurementDTO();
113 assertEquals(1, pmfm2.sizeQualitativeValues());
114 QualitativeValueDTO qualVal1 = pmfm2.getQualitativeValues(0);
115 assertNotNull(qualVal1);
116 m3.setQualitativeValue(qualVal1);
117 m3.setComment("(m3) qualitative measurement on pmfm 144");
118 m3.setPmfm(pmfm2);
119 measurements.add(m3);
120
121
122 PmfmDTO pmfm3 = pmfmDao.getPmfmById(23);
123 assertNotNull(pmfm3);
124 MeasurementDTO m4 = DaliBeanFactory.newMeasurementDTO();
125 m4.setNumericalValue(BigDecimal.valueOf(17.35));
126 m4.setPrecision(4);
127 m4.setDigitNb(2);
128 m4.setComment("(m4) numeric measurement on individual pmfm 157");
129 TaxonGroupDTO taxonGroup1 = taxonGroupDao.getTaxonGroupById(3);
130 assertNotNull(taxonGroup1);
131 m4.setTaxonGroup(taxonGroup1);
132 m4.setPmfm(pmfm3);
133 m4.setIndividualId(4);
134 measurements.add(m4);
135
136
137 PmfmDTO pmfm4 = pmfmDao.getPmfmById(24);
138 assertNotNull(pmfm4);
139 assertEquals(2, pmfm4.sizeQualitativeValues());
140 QualitativeValueDTO qualVal2 = pmfm4.getQualitativeValues(0);
141 assertNotNull(qualVal2);
142 MeasurementDTO m5 = DaliBeanFactory.newMeasurementDTO();
143 m5.setQualitativeValue(qualVal2);
144 m5.setComment("(m5) qualitative measurement 1 on pmfm 158");
145 TaxonDTO taxon1 = taxonNameDao.getTaxonNameByReferenceId(7);
146 assertNotNull(taxon1);
147 m5.setTaxon(taxon1);
148 m5.setPmfm(pmfm4);
149 m5.setIndividualId(6);
150 measurements.add(m5);
151
152 MeasurementDTO m6 = DaliBeanFactory.newMeasurementDTO();
153 QualitativeValueDTO qualVal3 = pmfm4.getQualitativeValues(1);
154 assertNotNull(qualVal3);
155 m6.setQualitativeValue(qualVal3);
156 m6.setComment("(m6) qualitative measurement 2 on pmfm 158");
157 TaxonGroupDTO taxonGroup2 = taxonGroupDao.getTaxonGroupById(9);
158 assertNotNull(taxonGroup2);
159 m6.setTaxonGroup(taxonGroup2);
160 List<TaxonDTO> taxons = (List<TaxonDTO>) taxonNameDao.getAllTaxonNamesMapByTaxonGroupId(LocalDate.now()).get(taxonGroup2.getId());
161 assertNotNull(taxons);
162 assertTrue(taxons.size() > 0);
163 TaxonDTO taxon2 = taxons.get(0);
164 m6.setTaxon(taxon2);
165 m6.setPmfm(pmfm4);
166 m6.setIndividualId(7);
167 measurements.add(m6);
168
169
170 measurementDao.saveMeasurementsBySurveyId(SURVEY_ID, measurements);
171
172
173 List<MeasurementDTO> reloadedMeasurements = measurementDao.getMeasurementsBySurveyId(SURVEY_ID);
174 assertNotNull(reloadedMeasurements);
175
176
177 assertMeasurementsEquals(measurements, reloadedMeasurements);
178
179
180 m1.setNumericalValue(BigDecimal.valueOf(12.3));
181 m1.setDigitNb(null);
182 m2.setPrecision(null);
183 m2.setNumericalValue(null);
184 m3.setQualitativeValue(qualitativeValueDao.getQualitativeValuesByParameterCode(pmfm2.getParameter().getCode()).get(1));
185 m3.setComment(null);
186 m4.setComment("(m4) new comment");
187 m4.setTaxonGroup(taxonGroupDao.getTaxonGroupById(4));
188 m5.setQualitativeValue(qualitativeValueDao.getQualitativeValuesByParameterCode(pmfm4.getParameter().getCode()).get(1));
189 m5.setTaxonGroup(null);
190 m6.setTaxon(null);
191 m6.setQualitativeValue(null);
192
193
194 measurementDao.saveMeasurementsBySurveyId(SURVEY_ID, measurements);
195
196
197 reloadedMeasurements = measurementDao.getMeasurementsBySurveyId(SURVEY_ID);
198 assertNotNull(reloadedMeasurements);
199
200
201 assertEquals(measurements.size() - 2 , reloadedMeasurements.size());
202
203
204
205 measurements.remove(2);
206
207 measurementDao.saveMeasurementsBySurveyId(SURVEY_ID, measurements);
208
209 reloadedMeasurements = measurementDao.getMeasurementsBySurveyId(SURVEY_ID);
210 assertNotNull(reloadedMeasurements);
211 assertEquals(measurements.size() - 2 , reloadedMeasurements.size());
212
213
214 measurementDao.removeMeasurementsByIds(ImmutableList.of(m1.getId()));
215 measurementDao.removeTaxonMeasurementsByIds(ImmutableList.of(m5.getId()));
216
217
218 reloadedMeasurements = measurementDao.getMeasurementsBySurveyId(SURVEY_ID);
219 assertNotNull(reloadedMeasurements);
220 assertEquals(1, reloadedMeasurements.size());
221
222 }
223
224 private void assertMeasurementsEquals(List<MeasurementDTO> expectedMeasurements, List<MeasurementDTO> measurementsToTest) {
225
226 assertEquals(expectedMeasurements.size(), measurementsToTest.size());
227
228
229 Predicate<MeasurementDTO> individualPredicate = input -> input.getIndividualId() != null;
230 List<MeasurementDTO> expectedIndividualMeasurements = DaliBeans.filterCollection(expectedMeasurements, individualPredicate);
231 List<MeasurementDTO> expectedNonIndividualMeasurements = ListUtils.removeAll(expectedMeasurements, expectedIndividualMeasurements);
232 List<MeasurementDTO> individualMeasurementsToTest = DaliBeans.filterCollection(measurementsToTest, individualPredicate);
233 List<MeasurementDTO> nonIndividualMeasurementsToTest = ListUtils.removeAll(measurementsToTest, individualMeasurementsToTest);
234
235 assertEquals(expectedIndividualMeasurements.size(), individualMeasurementsToTest.size());
236 assertEquals(expectedNonIndividualMeasurements.size(), nonIndividualMeasurementsToTest.size());
237
238
239 Map<Integer, MeasurementDTO> measurementToTestMap = DaliBeans.mapById(individualMeasurementsToTest);
240 for (MeasurementDTO expectedMeasurement : expectedIndividualMeasurements) {
241 assertNotNull(expectedMeasurement.getId());
242 MeasurementDTO measurementToTest = measurementToTestMap.get(expectedMeasurement.getId());
243 assertNotNull(measurementToTest);
244 assertMeasurementEquals(expectedMeasurement, measurementToTest);
245 }
246
247
248 measurementToTestMap = DaliBeans.mapById(nonIndividualMeasurementsToTest);
249 for (MeasurementDTO expectedMeasurement : expectedNonIndividualMeasurements) {
250 assertNotNull(expectedMeasurement.getId());
251 MeasurementDTO measurementToTest = measurementToTestMap.get(expectedMeasurement.getId());
252 assertNotNull(measurementToTest);
253 assertMeasurementEquals(expectedMeasurement, measurementToTest);
254 }
255
256 }
257
258 private void assertMeasurementEquals(MeasurementDTO expectedMeasurement, MeasurementDTO measurementToTest) {
259 assertTrue(expectedMeasurement != measurementToTest);
260 assertEquals(expectedMeasurement.getPmfm(), measurementToTest.getPmfm());
261 assertEquals(expectedMeasurement.getId(), measurementToTest.getId());
262 assertEquals(expectedMeasurement.getNumericalValue(), measurementToTest.getNumericalValue());
263 assertEquals(expectedMeasurement.getPrecision(), measurementToTest.getPrecision());
264 assertEquals(expectedMeasurement.getDigitNb(), measurementToTest.getDigitNb());
265 assertEquals(expectedMeasurement.getControlDate(), measurementToTest.getControlDate());
266 assertEquals(expectedMeasurement.getValidationDate(), measurementToTest.getValidationDate());
267 assertEquals(expectedMeasurement.getQualificationDate(), measurementToTest.getQualificationDate());
268 assertEquals(expectedMeasurement.getQualificationComment(), measurementToTest.getQualificationComment());
269 assertEquals(expectedMeasurement.getTaxonGroup(), measurementToTest.getTaxonGroup());
270 assertEquals(expectedMeasurement.getTaxon(), measurementToTest.getTaxon());
271 assertEquals(expectedMeasurement.getComment(), measurementToTest.getComment());
272 assertEquals(expectedMeasurement.getQualitativeValue(), measurementToTest.getQualitativeValue());
273 assertEquals(expectedMeasurement.getIndividualId(), measurementToTest.getIndividualId());
274 }
275
276 @Test
277 public void deleteAllMeasurements() {
278 measurementDao.removeAllMeasurementsBySurveyId(SURVEY_ID);
279 }
280
281 }