Skip to content

Commit b120719

Browse files
author
Ravi Nadahar
committed
Create tests for "YAML module" rule templates
Signed-off-by: Ravi Nadahar <[email protected]>
1 parent 5e14f4c commit b120719

File tree

5 files changed

+838
-12
lines changed

5 files changed

+838
-12
lines changed

bundles/org.openhab.core.model.yaml/src/main/java/org/openhab/core/model/yaml/internal/rules/YamlRuleTemplateDTO.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,14 @@
4141
import com.fasterxml.jackson.databind.ObjectMapper;
4242

4343
/**
44-
* The {@link YamlRuleTemplateDTO} is a data transfer object used to serialize a rule template in a YAML configuration file.
44+
* The {@link YamlRuleTemplateDTO} is a data transfer object used to serialize a rule template in a YAML configuration
45+
* file.
4546
*
4647
* @author Ravi Nadahar - Initial contribution
4748
*/
4849
@YamlElementName("ruleTemplates")
49-
public class YamlRuleTemplateDTO implements ModularDTO<YamlRuleTemplateDTO, ObjectMapper, JsonNode>, YamlElement, Cloneable {
50+
public class YamlRuleTemplateDTO
51+
implements ModularDTO<YamlRuleTemplateDTO, ObjectMapper, JsonNode>, YamlElement, Cloneable {
5052

5153
protected static final Pattern UID_SEGMENT_PATTERN = Pattern.compile("[a-zA-Z0-9_][a-zA-Z0-9_-]*");
5254

@@ -243,8 +245,9 @@ public boolean isValid(@Nullable List<@NonNull String> errors, @Nullable List<@N
243245
String[] segments = uid.split(AbstractUID.SEPARATOR);
244246
for (String segment : segments) {
245247
if (!UID_SEGMENT_PATTERN.matcher(segment).matches()) {
246-
addToList(errors, "invalid rule template \"%s\": segment \"%s\" in the uid doesn't match the expected syntax %s"
247-
.formatted(uid, segment, UID_SEGMENT_PATTERN.pattern()));
248+
addToList(errors,
249+
"invalid rule template \"%s\": segment \"%s\" in the uid doesn't match the expected syntax %s"
250+
.formatted(uid, segment, UID_SEGMENT_PATTERN.pattern()));
248251
ok = false;
249252
}
250253
}
@@ -256,8 +259,8 @@ public boolean isValid(@Nullable List<@NonNull String> errors, @Nullable List<@N
256259
}
257260

258261
// Check that the rule template has at least one module
259-
if ((triggers == null || triggers.isEmpty())
260-
&& (conditions == null || conditions.isEmpty()) && (actions == null || actions.isEmpty())) {
262+
if ((triggers == null || triggers.isEmpty()) && (conditions == null || conditions.isEmpty())
263+
&& (actions == null || actions.isEmpty())) {
261264
addToList(errors, "invalid rule template \"%s\": the template is empty".formatted(uid));
262265
ok = false;
263266
}
@@ -307,8 +310,8 @@ private void addToList(@Nullable List<@NonNull String> list, String value) {
307310

308311
@Override
309312
public int hashCode() {
310-
return Objects.hash(actions, conditions, configDescriptions, description, label, tags,
311-
triggers, uid, visibility);
313+
return Objects.hash(actions, conditions, configDescriptions, description, label, tags, triggers, uid,
314+
visibility);
312315
}
313316

314317
@Override
@@ -323,9 +326,8 @@ public boolean equals(Object obj) {
323326
return Objects.equals(actions, other.actions) && Objects.equals(conditions, other.conditions)
324327
&& Objects.equals(configDescriptions, other.configDescriptions)
325328
&& Objects.equals(description, other.description) && Objects.equals(label, other.label)
326-
&& Objects.equals(tags, other.tags)
327-
&& Objects.equals(triggers, other.triggers) && Objects.equals(uid, other.uid)
328-
&& visibility == other.visibility;
329+
&& Objects.equals(tags, other.tags) && Objects.equals(triggers, other.triggers)
330+
&& Objects.equals(uid, other.uid) && visibility == other.visibility;
329331
}
330332

331333
@Override
@@ -364,7 +366,7 @@ public String toString() {
364366
}
365367

366368
/**
367-
* A data transfer object for partial deserialization of a template.
369+
* A data transfer object for partial deserialization of a template.
368370
*/
369371
protected static class YamlPartialRuleTemplateDTO {
370372
public String uid;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
/*
2+
* Copyright (c) 2010-2025 Contributors to the openHAB project
3+
*
4+
* See the NOTICE file(s) distributed with this work for additional
5+
* information.
6+
*
7+
* This program and the accompanying materials are made available under the
8+
* terms of the Eclipse Public License 2.0 which is available at
9+
* http://www.eclipse.org/legal/epl-2.0
10+
*
11+
* SPDX-License-Identifier: EPL-2.0
12+
*/
13+
package org.openhab.core.model.yaml.internal.rules;
14+
15+
import static org.junit.jupiter.api.Assertions.*;
16+
17+
import java.io.IOException;
18+
import java.util.ArrayList;
19+
import java.util.HashSet;
20+
21+
import org.eclipse.jdt.annotation.NonNullByDefault;
22+
import org.junit.jupiter.api.Test;
23+
import org.openhab.core.automation.Visibility;
24+
25+
/**
26+
* The {@link YamlRuleTemplateDTOTest} contains tests for the {@link YamlRuleTemplateDTO} class.
27+
*
28+
* @author Ravi Nadahar - Initial contribution
29+
*/
30+
@NonNullByDefault
31+
public class YamlRuleTemplateDTOTest {
32+
33+
@Test
34+
public void testIsValid() throws IOException {
35+
YamlRuleTemplateDTO template = new YamlRuleTemplateDTO();
36+
assertFalse(template.isValid(null, null));
37+
38+
template.uid = " ";
39+
assertFalse(template.isValid(null, null));
40+
41+
template.label = "Test";
42+
43+
template.uid = "id";
44+
template.triggers = new ArrayList<>();
45+
template.triggers.add(new YamlModuleDTO());
46+
assertTrue(template.isValid(null, null));
47+
48+
template.uid = "template:id";
49+
assertTrue(template.isValid(null, null));
50+
51+
template.uid = "template:type:@id";
52+
assertFalse(template.isValid(null, null));
53+
54+
template.uid = "template:type:id";
55+
assertTrue(template.isValid(null, null));
56+
57+
template.uid = "template:type:$subType:id";
58+
assertFalse(template.isValid(null, null));
59+
60+
template.uid = "template:type:subType:id";
61+
assertTrue(template.isValid(null, null));
62+
63+
template.label = null;
64+
assertFalse(template.isValid(null, null));
65+
66+
template.label = "\t";
67+
assertFalse(template.isValid(null, null));
68+
69+
template.label = "Test";
70+
assertTrue(template.isValid(null, null));
71+
72+
template.triggers = new ArrayList<>();
73+
assertFalse(template.isValid(null, null));
74+
75+
template.triggers.add(new YamlModuleDTO());
76+
assertTrue(template.isValid(null, null));
77+
78+
template.triggers.clear();
79+
template.conditions = new ArrayList<>();
80+
assertFalse(template.isValid(null, null));
81+
82+
template.conditions.add(new YamlConditionDTO());
83+
assertTrue(template.isValid(null, null));
84+
85+
template.conditions.clear();
86+
template.actions = new ArrayList<>();
87+
assertFalse(template.isValid(null, null));
88+
89+
template.actions.add(new YamlActionDTO());
90+
assertTrue(template.isValid(null, null));
91+
92+
YamlModuleDTO trigger = new YamlModuleDTO();
93+
trigger.id = "1";
94+
template.triggers.add(trigger);
95+
YamlModuleDTO trigger2 = new YamlModuleDTO();
96+
trigger2.id = "1";
97+
template.triggers.add(trigger2);
98+
assertFalse(template.isValid(null, null));
99+
100+
trigger2.id = "3";
101+
assertTrue(template.isValid(null, null));
102+
103+
YamlConditionDTO condition = new YamlConditionDTO();
104+
condition.id = "3";
105+
template.conditions.add(condition);
106+
assertFalse(template.isValid(null, null));
107+
108+
condition.id = "2";
109+
assertTrue(template.isValid(null, null));
110+
111+
YamlActionDTO action = new YamlActionDTO();
112+
action.id = "script";
113+
template.actions.add(action);
114+
assertTrue(template.isValid(null, null));
115+
116+
action = new YamlActionDTO();
117+
action.id = "script";
118+
template.actions.add(action);
119+
assertFalse(template.isValid(null, null));
120+
121+
action.id = "1";
122+
assertFalse(template.isValid(null, null));
123+
124+
action.id = "2";
125+
assertFalse(template.isValid(null, null));
126+
127+
action.id = "3";
128+
assertFalse(template.isValid(null, null));
129+
130+
action.id = "4";
131+
assertTrue(template.isValid(null, null));
132+
}
133+
134+
@Test
135+
public void testEquals() throws IOException {
136+
YamlRuleTemplateDTO template1 = new YamlRuleTemplateDTO();
137+
YamlRuleTemplateDTO template2 = new YamlRuleTemplateDTO();
138+
139+
assertNotNull(template1);
140+
assertTrue(template1.equals(template1));
141+
assertEquals(template1.hashCode(), template2.hashCode());
142+
143+
template1.uid = "template:id";
144+
template2.uid = "template:id2";
145+
assertFalse(template1.equals(template2));
146+
assertNotEquals(template1.hashCode(), template2.hashCode());
147+
148+
template2.uid = "template:id";
149+
assertTrue(template1.equals(template2));
150+
assertEquals(template1.hashCode(), template2.hashCode());
151+
152+
template1.label = "A label";
153+
template2.label = "Another label";
154+
assertFalse(template1.equals(template2));
155+
assertNotEquals(template1.hashCode(), template2.hashCode());
156+
157+
template2.label = "A label";
158+
assertTrue(template1.equals(template2));
159+
160+
template1.description = "A description";
161+
assertFalse(template1.equals(template2));
162+
163+
template2.description = "Another description";
164+
assertFalse(template1.equals(template2));
165+
166+
template2.description = "A description";
167+
assertTrue(template1.equals(template2));
168+
169+
template1.visibility = Visibility.VISIBLE.name();
170+
assertFalse(template1.equals(template2));
171+
172+
template2.visibility = Visibility.EXPERT.name();
173+
assertFalse(template1.equals(template2));
174+
175+
template1.visibility = Visibility.EXPERT.name();
176+
assertTrue(template1.equals(template2));
177+
178+
template1.tags = new HashSet<>();
179+
assertFalse(template1.equals(template2));
180+
181+
template1.tags.add("Tag1");
182+
assertFalse(template1.equals(template2));
183+
184+
template2.tags = new HashSet<>();
185+
assertFalse(template1.equals(template2));
186+
187+
template2.tags.add("Tag2");
188+
assertFalse(template1.equals(template2));
189+
190+
template2.tags.add("Tag1");
191+
assertFalse(template1.equals(template2));
192+
193+
template2.tags.remove("Tag2");
194+
assertTrue(template1.equals(template2));
195+
196+
template1.actions = new ArrayList<>();
197+
assertFalse(template1.equals(template2));
198+
199+
YamlActionDTO action1 = new YamlActionDTO();
200+
template1.actions.add(action1);
201+
assertFalse(template1.equals(template2));
202+
203+
template2.actions = new ArrayList<>();
204+
assertFalse(template1.equals(template2));
205+
206+
YamlActionDTO action2 = new YamlActionDTO();
207+
template2.actions.add(action2);
208+
assertTrue(template1.equals(template2));
209+
210+
action1.id = "action1";
211+
assertFalse(template1.equals(template2));
212+
213+
action2.id = "action2";
214+
assertFalse(template1.equals(template2));
215+
216+
action2.id = "action1";
217+
assertTrue(template1.equals(template2));
218+
219+
template1.conditions = new ArrayList<>();
220+
assertFalse(template1.equals(template2));
221+
222+
YamlConditionDTO condition1 = new YamlConditionDTO();
223+
template1.conditions.add(condition1);
224+
assertFalse(template1.equals(template2));
225+
226+
template2.conditions = new ArrayList<>();
227+
assertFalse(template1.equals(template2));
228+
229+
YamlConditionDTO condition2 = new YamlConditionDTO();
230+
template2.conditions.add(condition2);
231+
assertTrue(template1.equals(template2));
232+
233+
condition1.id = "condition1";
234+
assertFalse(template1.equals(template2));
235+
236+
condition2.id = "condition2";
237+
assertFalse(template1.equals(template2));
238+
239+
condition2.id = "condition1";
240+
assertTrue(template1.equals(template2));
241+
242+
template1.triggers = new ArrayList<>();
243+
assertFalse(template1.equals(template2));
244+
245+
YamlModuleDTO trigger1 = new YamlModuleDTO();
246+
template1.triggers.add(trigger1);
247+
assertFalse(template1.equals(template2));
248+
249+
template2.triggers = new ArrayList<>();
250+
assertFalse(template1.equals(template2));
251+
252+
YamlModuleDTO trigger2 = new YamlModuleDTO();
253+
template2.triggers.add(trigger2);
254+
assertTrue(template1.equals(template2));
255+
256+
trigger1.id = "trigger1";
257+
assertFalse(template1.equals(template2));
258+
259+
trigger2.id = "trigger2";
260+
assertFalse(template1.equals(template2));
261+
262+
trigger2.id = "trigger1";
263+
assertTrue(template1.equals(template2));
264+
assertEquals(template1.hashCode(), template2.hashCode());
265+
}
266+
}

0 commit comments

Comments
 (0)