View Javadoc
1   package fr.ifremer.dali.dao.referential.pmfm;
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 fr.ifremer.dali.service.DaliServiceLocator;
27  import fr.ifremer.quadrige3.core.service.technical.CacheService;
28  import fr.ifremer.quadrige3.core.test.AbstractDaoTest;
29  import fr.ifremer.dali.dao.DaliDatabaseResource;
30  import fr.ifremer.dali.dao.referential.DaliUnitDao;
31  import fr.ifremer.dali.dto.DaliBeans;
32  import fr.ifremer.dali.dto.referential.pmfm.*;
33  import fr.ifremer.dali.service.StatusFilter;
34  import org.apache.commons.lang3.builder.ToStringBuilder;
35  import org.apache.commons.lang3.builder.ToStringStyle;
36  import org.apache.commons.logging.Log;
37  import org.apache.commons.logging.LogFactory;
38  import org.junit.Before;
39  import org.junit.ClassRule;
40  import org.junit.Test;
41  import org.nuiton.util.TimeLog;
42  import org.springframework.dao.DataRetrievalFailureException;
43  
44  import java.util.List;
45  import java.util.Map;
46  
47  import static org.junit.Assert.*;
48  
49  public class PmfmDaoReadTest extends AbstractDaoTest {
50  
51      private static final Log log = LogFactory.getLog(PmfmDaoReadTest.class);
52      private static final TimeLog timeLog = new TimeLog(PmfmDaoReadTest.class, 5000, 1000);
53  
54      @ClassRule
55      public static final DaliDatabaseResource dbResource = DaliDatabaseResource.readDb();
56  
57      private DaliPmfmDao pmfmDao;
58      private DaliParameterDao parameterDao;
59      private DaliMatrixDao matrixDao;
60      private DaliFractionDao fractionDao;
61      private DaliMethodDao methodDao;
62      private DaliUnitDao unitDao;
63      private DaliQualitativeValueDao qualitativeValueDao;
64      private CacheService cacheService;
65  
66      @Before
67      @Override
68      public void setUp() throws Exception {
69          super.setUp();
70          pmfmDao = DaliServiceLocator.instance().getService("daliPmfmDao", DaliPmfmDao.class);
71          parameterDao = DaliServiceLocator.instance().getService("daliParameterDao", DaliParameterDao.class);
72          matrixDao = DaliServiceLocator.instance().getService("daliMatrixDao", DaliMatrixDao.class);
73          fractionDao = DaliServiceLocator.instance().getService("daliFractionDao", DaliFractionDao.class);
74          methodDao = DaliServiceLocator.instance().getService("daliMethodDao", DaliMethodDao.class);
75          unitDao = DaliServiceLocator.instance().getService("daliUnitDao", DaliUnitDao.class);
76          cacheService = DaliServiceLocator.instance().getCacheService();
77          qualitativeValueDao = DaliServiceLocator.instance().getService("daliQualitativeValueDao", DaliQualitativeValueDao.class);
78      }
79  
80      @Test
81      public void getParameterGroup() {
82          List<ParameterGroupDTO> parameterGroups = parameterDao.getAllParameterGroups(StatusFilter.ACTIVE.toStatusCodes());
83          assertNotNull(parameterGroups);
84          assertEquals(8, parameterGroups.size());
85          if (log.isDebugEnabled()) {
86              for (ParameterGroupDTO dto : parameterGroups) {
87                  log.debug(ToStringBuilder.reflectionToString(dto, ToStringStyle.SHORT_PREFIX_STYLE));
88              }
89          }
90  
91          ParameterGroupDTO parameterGroup = parameterDao.getParameterGroupById(3);
92          assertNotNull(parameterGroup);
93          assertEquals("Biologie", parameterGroup.getName());
94  
95          parameterGroup = parameterDao.getParameterGroupById(5);
96          assertNotNull(parameterGroup);
97          assertEquals("Métaux", parameterGroup.getName());
98          assertNotNull(parameterGroup.getParentParameterGroup());
99          assertEquals((Integer) 2, parameterGroup.getParentParameterGroup().getId());
100     }
101 
102     @Test
103     public void getMethod() {
104         List<MethodDTO> methods = methodDao.getAllMethods(StatusFilter.ACTIVE.toStatusCodes());
105         assertNotNull(methods);
106         assertEquals(9, methods.size());
107         if (log.isDebugEnabled()) {
108             for (MethodDTO dto : methods) {
109                 log.debug(ToStringBuilder.reflectionToString(dto, ToStringStyle.SHORT_PREFIX_STYLE));
110             }
111         }
112 
113         MethodDTO method = methodDao.getMethodById(6);
114         assertNotNull(method);
115         assertEquals("Gravimétie 500°C", method.getName());
116 
117         try {
118             methodDao.getMethodById(10);
119             fail("should throw DataRetrievalFailureException");
120         } catch (DataRetrievalFailureException ex) {
121             assertNotNull(ex);
122         }
123 
124     }
125 
126     @Test
127     public void getFraction() {
128         List<FractionDTO> fractions = fractionDao.getAllFractions(StatusFilter.ACTIVE.toStatusCodes());
129         assertNotNull(fractions);
130         assertEquals(5, fractions.size());
131         if (log.isDebugEnabled()) {
132             for (FractionDTO dto : fractions) {
133                 log.debug(ToStringBuilder.reflectionToString(dto, ToStringStyle.SHORT_PREFIX_STYLE));
134             }
135         }
136 
137         FractionDTO fraction = fractionDao.getFractionById(1);
138         assertNotNull(fraction);
139         assertEquals("Aucune", fraction.getName());
140         assertEquals(4, fraction.sizeMatrixes());
141 
142         try {
143             fractionDao.getFractionById(10);
144             fail("should throw DataRetrievalFailureException");
145         } catch (DataRetrievalFailureException ex) {
146             assertNotNull(ex);
147         }
148     }
149 
150     @Test
151     public void testFractionCache() {
152 
153         long startTime = TimeLog.getTime();
154 
155         List<FractionDTO> fractions = fractionDao.getAllFractions(StatusFilter.ACTIVE.toStatusCodes());
156         assertNotNull(fractions);
157         assertEquals(5, fractions.size());
158         startTime = timeLog.log(startTime, "fractions loaded");
159 
160         cacheService.clearAllCaches();
161         startTime = timeLog.log(startTime, "cache cleared");
162         matrixDao.getAllMatrices(StatusFilter.ACTIVE.toStatusCodes());
163         startTime = timeLog.log(startTime, "caches loaded");
164 
165         fractions = fractionDao.getAllFractions(StatusFilter.ACTIVE.toStatusCodes());
166         assertNotNull(fractions);
167         assertEquals(5, fractions.size());
168         startTime = timeLog.log(startTime, "fractions loaded");
169 
170     }
171 
172     @Test
173     public void getMatrix() {
174         List<MatrixDTO> matrices = matrixDao.getAllMatrices(StatusFilter.ACTIVE.toStatusCodes());
175         assertNotNull(matrices);
176         assertEquals(5, matrices.size());
177         if (log.isDebugEnabled()) {
178             for (MatrixDTO dto : matrices) {
179                 log.debug(ToStringBuilder.reflectionToString(dto, ToStringStyle.SHORT_PREFIX_STYLE));
180             }
181         }
182 
183         MatrixDTO matrix = matrixDao.getMatrixById(2);
184         assertNotNull(matrix);
185         assertEquals("Bivalve", matrix.getName());
186 
187         try {
188             matrixDao.getMatrixById(10);
189             fail("should throw DataRetrievalFailureException");
190         } catch (DataRetrievalFailureException ex) {
191             assertNotNull(ex);
192         }
193     }
194 
195     @Test
196     public void getQualitativeValue() {
197         List<QualitativeValueDTO> qualValues = qualitativeValueDao.getQualitativeValuesByParameterCode("SALMOI");
198         assertNotNull(qualValues);
199         assertEquals(3, qualValues.size()); // 2 actives & 1 inactive
200         if (log.isDebugEnabled()) {
201             for (QualitativeValueDTO dto : qualValues) {
202                 log.debug(ToStringBuilder.reflectionToString(dto, ToStringStyle.SHORT_PREFIX_STYLE));
203             }
204         }
205         qualValues = qualitativeValueDao.getQualitativeValuesByParameterCode("BAD");
206         assertNotNull(qualValues);
207         assertEquals(0, qualValues.size());
208 
209         QualitativeValueDTO qualValue = qualitativeValueDao.getQualitativeValueById(1);
210         assertNotNull(qualValue);
211         assertEquals("Présentes", qualValue.getName());
212     }
213 
214     @Test
215     public void getParameter() {
216         List<ParameterDTO> parameters = parameterDao.getAllParameters(StatusFilter.ACTIVE.toStatusCodes());
217         assertNotNull(parameters);
218         assertTrue(parameters.size() >= 10);
219         if (log.isDebugEnabled()) {
220             for (ParameterDTO dto : parameters) {
221                 log.debug(ToStringBuilder.reflectionToString(dto, ToStringStyle.SHORT_PREFIX_STYLE));
222             }
223         }
224 
225         try {
226             parameterDao.getParameterGroupById(10);
227             fail("should throw DataRetrievalFailureException");
228         } catch (DataRetrievalFailureException ex) {
229             assertNotNull(ex);
230         }
231 
232         ParameterDTO parameter = parameterDao.getParameterByCode("AL");
233         assertNotNull(parameter);
234         assertEquals("Aluminium total", parameter.getName());
235         assertNotNull(parameter.getParameterGroup());
236         assertEquals((Integer) 5, parameter.getParameterGroup().getId());
237 
238         try {
239             parameterDao.getParameterByCode("BAD");
240             fail("should throw DataRetrievalFailureException");
241         } catch (DataRetrievalFailureException ex) {
242             assertNotNull(ex);
243         }
244     }
245 
246     @Test
247     public void getPmfm() {
248 
249         List<PmfmDTO> allPmfms = pmfmDao.getAllPmfms(StatusFilter.ACTIVE.toStatusCodes());
250         assertNotNull(allPmfms);
251         assertTrue(allPmfms.size() >= 25);
252         if (log.isDebugEnabled()) {
253             for (PmfmDTO dto : allPmfms) {
254                 log.debug(ToStringBuilder.reflectionToString(dto, ToStringStyle.SHORT_PREFIX_STYLE));
255             }
256         }
257 
258         try {
259             pmfmDao.getPmfmById(1000);
260             fail("should throw a DataRetrievalFailureException");
261         } catch (DataRetrievalFailureException ex) {
262             assertNotNull(ex);
263         }
264 
265         PmfmDTO pmfm = pmfmDao.getPmfmById(13);
266         assertNotNull(pmfm);
267         assertEquals("BIOMZOO", pmfm.getParameter().getCode());
268         assertNotNull(pmfm.getParameter().getParameterGroup());
269         assertEquals((Integer) 6, pmfm.getParameter().getParameterGroup().getId());
270         assertNotNull(pmfm.getParameter().getParameterGroup().getParentParameterGroup());
271         assertEquals((Integer) 3, pmfm.getParameter().getParameterGroup().getParentParameterGroup().getId());
272         assertEquals((Integer) 3, pmfm.getMatrix().getId());
273         assertEquals((Integer) 2, pmfm.getFraction().getId());
274         assertEquals((Integer) 6, pmfm.getMethod().getId());
275         if (log.isDebugEnabled()) {
276             log.debug(ToStringBuilder.reflectionToString(pmfm, ToStringStyle.SHORT_PREFIX_STYLE));
277         }
278 
279         pmfm = pmfmDao.getPmfmById(29);
280         assertNotNull(pmfm);
281         assertEquals("ASTAXO", pmfm.getParameter().getCode());
282         assertEquals((Integer) 1, pmfm.getMatrix().getId());
283         assertEquals((Integer) 1, pmfm.getFraction().getId());
284         assertEquals((Integer) 3, pmfm.getMethod().getId());
285         if (log.isDebugEnabled()) {
286             log.debug(ToStringBuilder.reflectionToString(pmfm, ToStringStyle.SHORT_PREFIX_STYLE));
287         }
288 
289         // find by criteria
290         List<PmfmDTO> pmfms = pmfmDao.findPmfms(null, null, null, null, null, null, StatusFilter.ACTIVE.toStatusCodes());
291         assertNotNull(pmfms);
292         assertEquals(allPmfms.size(), pmfms.size());
293 
294         // TODO rewrite tests with new method
295 
296 //        pmfms = pmfmDao.findPmfms(null, null, null, null, null, StatusFilter.ACTIVE.toStatusCodes());
297 //        assertNotNull(pmfms);
298 //        assertEquals(6, pmfms.size());
299 //
300 //        pmfms = pmfmDao.findPmfms(StatusFilter.ACTIVE.toStatusCodes(), 4, "ACEPHTE", false, false, false, 2, 1, 2);
301 //        assertNotNull(pmfms);
302 //        assertEquals(1, pmfms.size());
303 //        assertEquals((Integer) 146, pmfms.get(0).getId());
304 //
305 //        pmfms = pmfmDao.findPmfms(StatusFilter.ACTIVE.toStatusCodes(), null, null, true, null, null, null, null, null);
306 //        assertNotNull(pmfms);
307 //        assertEquals(12, pmfms.size());
308 //
309 //        pmfms = pmfmDao.findPmfms(StatusFilter.ACTIVE.toStatusCodes(), null, null, true, false, null, null, null, null);
310 //        assertNotNull(pmfms);
311 //        assertEquals(9, pmfms.size());
312 //
313 //        pmfms = pmfmDao.findPmfms(StatusFilter.ACTIVE.toStatusCodes(), null, null, true, true, null, null, null, null);
314 //        assertNotNull(pmfms);
315 //        assertEquals(3, pmfms.size());
316 //
317 //        pmfms = pmfmDao.findPmfms(StatusFilter.ACTIVE.toStatusCodes(), null, null, true, true, true, null, null, null);
318 //        assertNotNull(pmfms);
319 //        assertEquals(0, pmfms.size());
320 //
321 //        pmfms = pmfmDao.findPmfms(StatusFilter.ALL.intersect(StatusCode.DISABLE.getValue()), null, "BIOMZOOTAXO", true, false, false, null, 2, null);
322 //        assertNotNull(pmfms);
323 //        assertEquals(1, pmfms.size());
324 //        assertEquals((Integer) 166, pmfms.get(0).getId());
325 
326     }
327 
328     @Test
329     public void getPmfmWithTranscribing() {
330 
331         List<PmfmDTO> allPmfms = pmfmDao.getAllPmfms(StatusFilter.ACTIVE.toStatusCodes());
332         assertNotNull(allPmfms);
333 
334         Map<Integer, PmfmDTO> pmfmByIds = DaliBeans.mapById(allPmfms);
335         PmfmDTO pmfmWithTranscribing = pmfmByIds.get(dbResource.getFixtures().getPmfmIdWithTranscribing());
336         assertNotNull(pmfmWithTranscribing);
337         assertNotNull(pmfmWithTranscribing.getName());
338         assertNotNull(pmfmWithTranscribing.getParameter());
339         assertNotNull(pmfmWithTranscribing.getParameter().getName());
340 
341         boolean nameStartWithParameterName = pmfmWithTranscribing.getName().startsWith(pmfmWithTranscribing.getParameter().getName());
342         boolean isTranscribing = !nameStartWithParameterName;
343         assertTrue(isTranscribing);
344     }
345 
346     @Test
347     public void testPmfmCache() {
348 
349         long startTime = TimeLog.getTime();
350 
351         // clear cache
352         cacheService.clearAllCaches();
353         startTime = timeLog.log(startTime, "cache cleared");
354 
355         // load all pmfms by query way using caches (3 time)
356         List<PmfmDTO> pmfms = pmfmDao.getAllPmfms(StatusFilter.ACTIVE.toStatusCodes());
357         startTime = timeLog.log(startTime, "pmfms loaded");
358         pmfms = pmfmDao.getAllPmfms(StatusFilter.ACTIVE.toStatusCodes());
359         startTime = timeLog.log(startTime, "pmfms loaded");
360         pmfms = pmfmDao.getAllPmfms(StatusFilter.ACTIVE.toStatusCodes());
361         startTime = timeLog.log(startTime, "pmfms loaded");
362 
363         // clear cache
364         cacheService.clearAllCaches();
365         startTime = timeLog.log(startTime, "cache cleared");
366 
367         // load caches
368         parameterDao.getAllParameterGroups(StatusFilter.ACTIVE.toStatusCodes());
369         parameterDao.getAllParameters(StatusFilter.ACTIVE.toStatusCodes());
370         matrixDao.getAllMatrices(StatusFilter.ACTIVE.toStatusCodes());
371         fractionDao.getAllFractions(StatusFilter.ACTIVE.toStatusCodes());
372         methodDao.getAllMethods(StatusFilter.ACTIVE.toStatusCodes());
373         unitDao.getAllUnits(StatusFilter.ACTIVE.toStatusCodes());
374         startTime = timeLog.log(startTime, "caches loaded");
375 
376         // load all pmfms by query way using caches (3 time)
377         pmfms = pmfmDao.getAllPmfms(StatusFilter.ACTIVE.toStatusCodes());
378         startTime = timeLog.log(startTime, "pmfms loaded");
379         pmfms = pmfmDao.getAllPmfms(StatusFilter.ACTIVE.toStatusCodes());
380         startTime = timeLog.log(startTime, "pmfms loaded");
381         pmfms = pmfmDao.getAllPmfms(StatusFilter.ACTIVE.toStatusCodes());
382         startTime = timeLog.log(startTime, "pmfms loaded");
383 
384     }
385 
386 }