View Javadoc
1   package fr.ifremer.dali.dao.system.rule;
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.dao.DaliDatabaseResource;
27  import fr.ifremer.dali.dto.DaliBeans;
28  import fr.ifremer.dali.dto.configuration.control.ControlRuleDTO;
29  import fr.ifremer.dali.dto.configuration.control.PreconditionRuleDTO;
30  import fr.ifremer.dali.dto.configuration.control.RuleListDTO;
31  import fr.ifremer.dali.dto.enums.ControlElementValues;
32  import fr.ifremer.dali.dto.enums.ControlFeatureMeasurementValues;
33  import fr.ifremer.dali.dto.enums.ControlFunctionValues;
34  import fr.ifremer.dali.service.DaliServiceLocator;
35  import fr.ifremer.dali.service.referential.ReferentialService;
36  import fr.ifremer.quadrige3.core.test.AbstractDaoTest;
37  import org.apache.commons.logging.Log;
38  import org.apache.commons.logging.LogFactory;
39  import org.junit.Before;
40  import org.junit.ClassRule;
41  import org.junit.Test;
42  
43  import static org.junit.Assert.*;
44  
45  public class RuleListDaoWriteTest extends AbstractDaoTest {
46  
47      private static final Log log = LogFactory.getLog(RuleListDaoWriteTest.class);
48  
49      @ClassRule
50      public static final DaliDatabaseResource dbResource = DaliDatabaseResource.writeDb();
51  
52      private DaliRuleListDao ruleListDao;
53      private ReferentialService referentialService;
54  
55      @Before
56      @Override
57      public void setUp() throws Exception {
58          super.setUp();
59          ruleListDao = DaliServiceLocator.instance().getService("daliRuleListDao", DaliRuleListDao.class);
60          referentialService = DaliServiceLocator.instance().getReferentialService();
61      }
62  
63      @Test
64      public void saveRuleListWithPreconditionedRules() {
65  
66          // RULELIST2 comes from test dataset only
67          RuleListDTO ruleList = ruleListDao.getRuleList(dbResource.getFixtures().getRuleListCode(1));
68          assertNotNull(ruleList);
69          assertEquals("rule list with preconditions", ruleList.getDescription());
70  
71          assertEquals(1, ruleList.sizeControlRules());
72          ControlRuleDTO controlRule = ruleList.getControlRules(0);
73          assertTrue(controlRule.isActive());
74          assertEquals("PRECOND1", controlRule.getCode());
75          assertTrue(ControlFunctionValues.PRECONDITION.equals(controlRule.getFunction()));
76          assertTrue(ControlElementValues.MEASUREMENT.equals(controlRule.getControlElement()));
77          assertTrue(ControlFeatureMeasurementValues.QUALITATIVE_VALUE.equals(controlRule.getControlFeature()));
78  
79          assertEquals(2, controlRule.sizeRulePmfms());
80          assertEquals(4, referentialService.getUniquePmfmIdFromPmfm(controlRule.getRulePmfms(0).getPmfm()).intValue());
81          assertEquals(24, referentialService.getUniquePmfmIdFromPmfm(controlRule.getRulePmfms(1).getPmfm()).intValue());
82  
83          assertEquals(2, controlRule.sizePreconditions());
84          PreconditionRuleDTO precondition1 = DaliBeans.findById(controlRule.getPreconditions(), 1);
85          assertNotNull(precondition1);
86          assertEquals(1, precondition1.getId().intValue());
87          assertTrue(precondition1.isActive());
88          assertTrue(precondition1.isBidirectional());
89          assertEquals("SALMOI1", precondition1.getBaseRule().getCode());
90          assertEquals("2", precondition1.getBaseRule().getAllowedValues());
91          assertEquals("SALMOITAXO1", precondition1.getUsedRule().getCode());
92          assertEquals("4", precondition1.getUsedRule().getAllowedValues());
93  
94          PreconditionRuleDTO precondition2 = DaliBeans.findById(controlRule.getPreconditions(), 2);
95          assertNotNull(precondition2);
96          assertEquals(2, precondition2.getId().intValue());
97          assertTrue(precondition2.isActive());
98          assertFalse(precondition2.isBidirectional());
99          assertEquals("SALMOI2", precondition2.getBaseRule().getCode());
100         assertEquals("3", precondition2.getBaseRule().getAllowedValues());
101         assertEquals("SALMOITAXO2", precondition2.getUsedRule().getCode());
102         assertEquals("5,6", precondition2.getUsedRule().getAllowedValues());
103 
104         // modify the last value
105         precondition2.getUsedRule().setAllowedValues("5");
106 
107         // save
108         ruleListDao.saveRuleList(ruleList, dbResource.getFixtures().getUserIdWithDataForSynchro());
109 
110         // reload
111         RuleListDTO reloadedRuleList = ruleListDao.getRuleList(dbResource.getFixtures().getRuleListCode(1));
112         assertNotNull(reloadedRuleList);
113         assertEquals("rule list with preconditions", reloadedRuleList.getDescription());
114 
115         assertEquals(1, reloadedRuleList.sizeControlRules());
116         ControlRuleDTO reloadedControlRule = reloadedRuleList.getControlRules(0);
117         assertTrue(reloadedControlRule.isActive());
118         assertEquals("PRECOND1", reloadedControlRule.getCode());
119         assertTrue(ControlFunctionValues.PRECONDITION.equals(reloadedControlRule.getFunction()));
120         assertTrue(ControlElementValues.MEASUREMENT.equals(reloadedControlRule.getControlElement()));
121         assertTrue(ControlFeatureMeasurementValues.QUALITATIVE_VALUE.equals(reloadedControlRule.getControlFeature()));
122 
123         assertEquals(2, reloadedControlRule.sizeRulePmfms());
124         assertEquals(4, referentialService.getUniquePmfmIdFromPmfm(reloadedControlRule.getRulePmfms(0).getPmfm()).intValue());
125         assertEquals(24, referentialService.getUniquePmfmIdFromPmfm(reloadedControlRule.getRulePmfms(1).getPmfm()).intValue());
126 
127         assertEquals(2, reloadedControlRule.sizePreconditions());
128         PreconditionRuleDTO reloadedPrecondition1 = DaliBeans.findById(reloadedControlRule.getPreconditions(), 1);
129         assertNotNull(reloadedPrecondition1);
130         assertEquals(1, reloadedPrecondition1.getId().intValue());
131         assertTrue(reloadedPrecondition1.isActive());
132         assertTrue(reloadedPrecondition1.isBidirectional());
133         assertEquals("SALMOI1", reloadedPrecondition1.getBaseRule().getCode());
134         assertEquals("2", reloadedPrecondition1.getBaseRule().getAllowedValues());
135         assertEquals("SALMOITAXO1", reloadedPrecondition1.getUsedRule().getCode());
136         assertEquals("4", reloadedPrecondition1.getUsedRule().getAllowedValues());
137 
138         PreconditionRuleDTO reloadedPrecondition2 = DaliBeans.findById(reloadedControlRule.getPreconditions(), 2);
139         assertNotNull(reloadedPrecondition2);
140         assertEquals(2, reloadedPrecondition2.getId().intValue());
141         assertTrue(reloadedPrecondition2.isActive());
142         assertFalse(reloadedPrecondition2.isBidirectional());
143         assertEquals("SALMOI2", reloadedPrecondition2.getBaseRule().getCode());
144         assertEquals("3", reloadedPrecondition2.getBaseRule().getAllowedValues());
145         assertEquals("SALMOITAXO2", reloadedPrecondition2.getUsedRule().getCode());
146         assertEquals("5", reloadedPrecondition2.getUsedRule().getAllowedValues());
147 
148         // remove a precondition
149         reloadedControlRule.removePreconditions(reloadedPrecondition1);
150 
151         // save
152         ruleListDao.saveRuleList(reloadedRuleList, dbResource.getFixtures().getUserIdWithDataForSynchro());
153 
154         // reload
155         RuleListDTO reloadedRuleListBis = ruleListDao.getRuleList(dbResource.getFixtures().getRuleListCode(1));
156         assertNotNull(reloadedRuleListBis);
157         assertEquals("rule list with preconditions", reloadedRuleListBis.getDescription());
158 
159         assertEquals(1, reloadedRuleListBis.sizeControlRules());
160         ControlRuleDTO reloadedControlRuleBis = reloadedRuleListBis.getControlRules(0);
161         assertTrue(reloadedControlRuleBis.isActive());
162         assertEquals("PRECOND1", reloadedControlRuleBis.getCode());
163         assertTrue(ControlFunctionValues.PRECONDITION.equals(reloadedControlRuleBis.getFunction()));
164         assertTrue(ControlElementValues.MEASUREMENT.equals(reloadedControlRuleBis.getControlElement()));
165         assertTrue(ControlFeatureMeasurementValues.QUALITATIVE_VALUE.equals(reloadedControlRuleBis.getControlFeature()));
166 
167         assertEquals(2, reloadedControlRuleBis.sizeRulePmfms());
168         assertEquals(4, referentialService.getUniquePmfmIdFromPmfm(reloadedControlRuleBis.getRulePmfms(0).getPmfm()).intValue());
169         assertEquals(24, referentialService.getUniquePmfmIdFromPmfm(reloadedControlRuleBis.getRulePmfms(1).getPmfm()).intValue());
170 
171         assertEquals(1, reloadedControlRuleBis.sizePreconditions());
172         PreconditionRuleDTO reloadedPrecondition2Bis = DaliBeans.findById(reloadedControlRuleBis.getPreconditions(), 2);
173         assertNotNull(reloadedPrecondition2Bis);
174         assertEquals(2, reloadedPrecondition2Bis.getId().intValue());
175         assertTrue(reloadedPrecondition2Bis.isActive());
176         assertFalse(reloadedPrecondition2Bis.isBidirectional());
177         assertEquals("SALMOI2", reloadedPrecondition2Bis.getBaseRule().getCode());
178         assertEquals("3", reloadedPrecondition2Bis.getBaseRule().getAllowedValues());
179         assertEquals("SALMOITAXO2", reloadedPrecondition2Bis.getUsedRule().getCode());
180         assertEquals("5", reloadedPrecondition2Bis.getUsedRule().getAllowedValues());
181 
182     }
183 
184 }