Skip to content

Commit 971c87b

Browse files
committed
HV-2052: add tests for ConstraintViolationImpl, resulting in 98%
1 parent 44cd815 commit 971c87b

File tree

1 file changed

+304
-0
lines changed

1 file changed

+304
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,304 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.validator.test.internal.engine;
6+
7+
import static org.easymock.EasyMock.createMock;
8+
import static org.easymock.EasyMock.replay;
9+
import static org.easymock.EasyMock.verify;
10+
import static org.testng.Assert.*;
11+
12+
import java.util.HashMap;
13+
import java.util.Map;
14+
15+
import jakarta.validation.ConstraintViolation;
16+
import jakarta.validation.Path;
17+
import jakarta.validation.ValidationException;
18+
import jakarta.validation.metadata.ConstraintDescriptor;
19+
20+
import org.hibernate.validator.internal.engine.ConstraintViolationImpl;
21+
import org.hibernate.validator.internal.engine.path.PathImpl;
22+
import org.hibernate.validator.testutil.TestForIssue;
23+
24+
import org.testng.annotations.BeforeMethod;
25+
import org.testng.annotations.Test;
26+
27+
/**
28+
* Test for {@link ConstraintViolationImpl}.
29+
*
30+
* @author Shamkhal Maharramov
31+
*/
32+
public class ConstraintViolationImplTest {
33+
34+
private ConstraintViolation<Object> violation;
35+
private ConstraintDescriptor<?> descriptor;
36+
private PathImpl path;
37+
38+
@BeforeMethod
39+
public void setUp() {
40+
descriptor = createMock( ConstraintDescriptor.class );
41+
path = PathImpl.createPathFromString( "property" );
42+
violation = ConstraintViolationImpl.forBeanValidation(
43+
"Invalid value",
44+
null,
45+
null,
46+
"Invalid value",
47+
Object.class,
48+
null,
49+
null,
50+
null,
51+
path,
52+
descriptor,
53+
Object.class
54+
);
55+
}
56+
57+
@Test
58+
@TestForIssue(jiraKey = "HV-2052")
59+
public void testInitializationCreatesNonNullViolation() {
60+
replay( descriptor );
61+
assertNotNull( violation );
62+
verify( descriptor );
63+
}
64+
65+
@Test
66+
@TestForIssue(jiraKey = "HV-2052")
67+
public void testNullValuesCreateNonNullViolation() {
68+
ConstraintViolation<Object> nullViolation = ConstraintViolationImpl
69+
.forBeanValidation(
70+
null, null, null, null, null, null, null, null, null, null, null );
71+
assertNotNull( nullViolation );
72+
}
73+
74+
@Test
75+
@TestForIssue(jiraKey = "HV-2052")
76+
public void testEqualityAndHashCodeForIdenticalViolations() {
77+
ConstraintViolation<Object> anotherViolation = ConstraintViolationImpl
78+
.forBeanValidation( "Invalid value", null, null, "Invalid value", Object.class, null, null, null, path,
79+
descriptor, null );
80+
replay( descriptor );
81+
assertTrue( violation.equals( anotherViolation ) );
82+
assertEquals( violation.hashCode(), anotherViolation.hashCode() );
83+
verify( descriptor );
84+
}
85+
86+
@Test
87+
@TestForIssue(jiraKey = "HV-2052")
88+
public void testStringRepresentationMatchesExpectedFormat() {
89+
String expectedString = "ConstraintViolationImpl{interpolatedMessage='Invalid value', propertyPath=property, rootBeanClass=class java.lang.Object, messageTemplate='Invalid value'}";
90+
replay( descriptor );
91+
assertEquals( violation.toString(), expectedString );
92+
verify( descriptor );
93+
}
94+
95+
@Test
96+
@TestForIssue(jiraKey = "HV-2052")
97+
public void testDifferentMessageTemplatesAreHandledCorrectly() {
98+
ConstraintViolation<Object> violationWithDifferentMessage = ConstraintViolationImpl.forBeanValidation(
99+
"Another invalid value", null, null, "Another invalid value", Object.class, null, null, null, path,
100+
descriptor, null );
101+
replay( descriptor );
102+
assertEquals( violationWithDifferentMessage.getMessageTemplate(), "Another invalid value" );
103+
verify( descriptor );
104+
}
105+
106+
@Test
107+
@TestForIssue(jiraKey = "HV-2052")
108+
public void testGettersReturnCorrectNonNullValues() {
109+
Object rootBean = new Object();
110+
Object leafBeanInstance = new Object();
111+
Object value = new Object();
112+
ConstraintViolation<Object> nonNullViolation = ConstraintViolationImpl.forBeanValidation(
113+
"Invalid value", null, null, "Invalid value", Object.class, rootBean, leafBeanInstance, value, path,
114+
descriptor, null );
115+
replay( descriptor );
116+
assertNotNull( nonNullViolation.getRootBean() );
117+
assertNotNull( nonNullViolation.getLeafBean() );
118+
assertNotNull( nonNullViolation.getInvalidValue() );
119+
verify( descriptor );
120+
}
121+
122+
@Test
123+
@TestForIssue(jiraKey = "HV-2052")
124+
public void testDynamicPayloadIsRetrievedCorrectly() {
125+
Object dynamicPayload = new Object();
126+
ConstraintViolation<Object> violationWithPayload = ConstraintViolationImpl.forBeanValidation(
127+
"Invalid value", null, null, "Invalid value", Object.class, null, null, null, path, descriptor,
128+
dynamicPayload );
129+
replay( descriptor );
130+
assertEquals( ( (ConstraintViolationImpl<Object>) violationWithPayload ).getDynamicPayload( Object.class ),
131+
dynamicPayload );
132+
verify( descriptor );
133+
}
134+
135+
@Test
136+
@TestForIssue(jiraKey = "HV-2052")
137+
public void testExpressionVariablesAreRetrievedCorrectly() {
138+
Map<String, Object> expressionVariables = new HashMap<>();
139+
expressionVariables.put( "key", "value" );
140+
ConstraintViolation<Object> violationWithExpressionVariables = ConstraintViolationImpl.forBeanValidation(
141+
"Invalid value", null, expressionVariables, "Invalid value", Object.class, null, null, null, path,
142+
descriptor, null );
143+
replay( descriptor );
144+
assertEquals( ( (ConstraintViolationImpl<Object>) violationWithExpressionVariables ).getExpressionVariables(),
145+
expressionVariables );
146+
verify( descriptor );
147+
}
148+
149+
@Test
150+
@TestForIssue(jiraKey = "HV-2052")
151+
public void testMessageParametersAreRetrievedCorrectly() {
152+
Map<String, Object> messageParameters = new HashMap<>();
153+
messageParameters.put( "param", "value" );
154+
ConstraintViolation<Object> violationWithMessageParameters = ConstraintViolationImpl.forBeanValidation(
155+
"Invalid value", messageParameters, null, "Invalid value", Object.class, null, null, null, path,
156+
descriptor, null );
157+
replay( descriptor );
158+
assertEquals( ( (ConstraintViolationImpl<Object>) violationWithMessageParameters ).getMessageParameters(),
159+
messageParameters );
160+
verify( descriptor );
161+
}
162+
163+
@Test
164+
@TestForIssue(jiraKey = "HV-2052")
165+
public void testEqualsMethodForSelfComparison() {
166+
ConstraintViolation<Object> violation = ConstraintViolationImpl.forBeanValidation(
167+
"Invalid value", null, null, "Invalid value", Object.class, null, null, null, path, descriptor, null);
168+
169+
assertEquals(violation, violation);
170+
}
171+
172+
@Test
173+
@TestForIssue(jiraKey = "HV-2052")
174+
public void testEqualsMethodForNullComparison() {
175+
ConstraintViolation<Object> violation = ConstraintViolationImpl.forBeanValidation(
176+
"Invalid value", null, null, "Invalid value", Object.class, null, null, null, path, descriptor, null);
177+
178+
assertNotEquals(violation, null);
179+
}
180+
181+
@Test
182+
@TestForIssue(jiraKey = "HV-2052")
183+
public void testEqualsMethodForDifferentClassComparison() {
184+
ConstraintViolation<Object> violation = ConstraintViolationImpl.forBeanValidation(
185+
"Invalid value", null, null, "Invalid value", Object.class, null, null, null, path, descriptor, null);
186+
Object differentClassObject = new Object();
187+
188+
assertNotEquals(differentClassObject, violation);
189+
}
190+
191+
@Test
192+
@TestForIssue(jiraKey = "HV-2052")
193+
public void testEqualsMethodForInterpolatedMessage() {
194+
ConstraintViolation<Object> violation1 = ConstraintViolationImpl.forBeanValidation(
195+
null, null, null, "InterpolatedMessage1", Object.class, null, null, null, path, descriptor, null);
196+
ConstraintViolation<Object> violation2 = ConstraintViolationImpl.forBeanValidation(
197+
null, null, null, "InterpolatedMessage2", Object.class, null, null, null, path, descriptor, null);
198+
199+
assertNotEquals(violation2, violation1);
200+
}
201+
202+
203+
@Test
204+
@TestForIssue(jiraKey = "HV-2052")
205+
public void testEqualsMethodForMessageTemplate() {
206+
ConstraintViolation<Object> violation1 = ConstraintViolationImpl.forBeanValidation(
207+
"Template1", null, null, "Invalid value", Object.class, null, null, null, path, descriptor, null);
208+
ConstraintViolation<Object> violation2 = ConstraintViolationImpl.forBeanValidation(
209+
"Template2", null, null, "Invalid value", Object.class, null, null, null, path, descriptor, null);
210+
211+
assertNotEquals(violation2, violation1);
212+
}
213+
214+
@Test
215+
@TestForIssue(jiraKey = "HV-2052")
216+
public void testEqualsMethodForPropertyPath() {
217+
Path path1 = PathImpl.createPathFromString( "path1" );
218+
Path path2 = PathImpl.createPathFromString( "path2" );
219+
220+
ConstraintViolation<Object> violation1 = ConstraintViolationImpl.forBeanValidation(
221+
"Invalid value", null, null, "Invalid value", Object.class, null, null, null, path1, descriptor, null);
222+
ConstraintViolation<Object> violation2 = ConstraintViolationImpl.forBeanValidation(
223+
"Invalid value", null, null, "Invalid value", Object.class, null, null, null, path2, descriptor, null);
224+
225+
assertNotEquals(violation2, violation1);
226+
}
227+
228+
@Test
229+
@TestForIssue(jiraKey = "HV-2052")
230+
public void testEqualsMethodForRootBean() {
231+
Object rootBean1 = new Object();
232+
Object rootBean2 = new Object();
233+
234+
ConstraintViolation<Object> violation1 = ConstraintViolationImpl.forBeanValidation(
235+
"Invalid value", null, null, "Invalid value", Object.class, rootBean1, null, null, path, descriptor, null);
236+
ConstraintViolation<Object> violation2 = ConstraintViolationImpl.forBeanValidation(
237+
"Invalid value", null, null, "Invalid value", Object.class, rootBean2, null, null, path, descriptor, null);
238+
239+
assertNotEquals(violation2, violation1);
240+
}
241+
242+
@Test
243+
@TestForIssue(jiraKey = "HV-2052")
244+
public void testEqualsMethodForLeafBeanInstance() {
245+
Object leafBean1 = new Object();
246+
Object leafBean2 = new Object();
247+
248+
ConstraintViolation<Object> violation1 = ConstraintViolationImpl.forBeanValidation(
249+
"Invalid value", null, null, "Invalid value", Object.class, null, leafBean1, null, path, descriptor, null);
250+
ConstraintViolation<Object> violation2 = ConstraintViolationImpl.forBeanValidation(
251+
"Invalid value", null, null, "Invalid value", Object.class, null, leafBean2, null, path, descriptor, null);
252+
253+
assertNotEquals(violation2, violation1);
254+
}
255+
256+
@Test
257+
@TestForIssue(jiraKey = "HV-2052")
258+
public void testEqualsMethodForValue() {
259+
260+
ConstraintViolation<Object> violation1 = ConstraintViolationImpl.forBeanValidation(
261+
null, null, null, null, Object.class, null, null, "value1", path, descriptor, null);
262+
ConstraintViolation<Object> violation2 = ConstraintViolationImpl.forBeanValidation(
263+
null, null, null, null, Object.class, null, null, "value2", path, descriptor, null);
264+
265+
assertNotEquals(violation2, violation1);
266+
}
267+
268+
@Test
269+
@TestForIssue(jiraKey = "HV-2052")
270+
public void testEqualsMethodForConstraintDescriptor() {
271+
ConstraintDescriptor<?> descriptor1 = createMock( ConstraintDescriptor.class );
272+
ConstraintDescriptor<?> descriptor2 = createMock( ConstraintDescriptor.class );
273+
274+
ConstraintViolation<Object> violation1 = ConstraintViolationImpl.forBeanValidation(
275+
null, null, null, null, Object.class, null, null, null, path, descriptor1, null);
276+
ConstraintViolation<Object> violation2 = ConstraintViolationImpl.forBeanValidation(
277+
null, null, null, null, Object.class, null, null, null, path, descriptor2, null);
278+
279+
assertNotEquals(violation2, violation1);
280+
}
281+
282+
@Test
283+
@TestForIssue(jiraKey = "HV-2052")
284+
public void testUnwrapToConstraintViolation() {
285+
ConstraintViolationImpl<Object> violation = (ConstraintViolationImpl<Object>) ConstraintViolationImpl.forBeanValidation(
286+
"Invalid value", null, null, "Invalid value", Object.class, null, null, null, path, descriptor, null);
287+
ConstraintViolation<?> unwrapped = violation.unwrap(ConstraintViolation.class);
288+
assertNotNull(unwrapped);
289+
assertSame(violation, unwrapped);
290+
}
291+
292+
@Test
293+
@TestForIssue(jiraKey = "HV-2052")
294+
public void testUnwrapToUnsupportedType() {
295+
ConstraintViolationImpl<Object> violation = (ConstraintViolationImpl<Object>) ConstraintViolationImpl.forBeanValidation(
296+
"Invalid value", null, null, "Invalid value", Object.class, null, null, null, path, descriptor, null);
297+
try {
298+
violation.unwrap(String.class);
299+
fail("Expected an exception when unwrapping to unsupported type");
300+
} catch (Exception e) {
301+
assertTrue(e instanceof ValidationException);
302+
}
303+
}
304+
}

0 commit comments

Comments
 (0)