1 package fr.ifremer.dali.dao.system.rule;
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 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
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
105 precondition2.getUsedRule().setAllowedValues("5");
106
107
108 ruleListDao.saveRuleList(ruleList, dbResource.getFixtures().getUserIdWithDataForSynchro());
109
110
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
149 reloadedControlRule.removePreconditions(reloadedPrecondition1);
150
151
152 ruleListDao.saveRuleList(reloadedRuleList, dbResource.getFixtures().getUserIdWithDataForSynchro());
153
154
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 }