Skip to content

Commit cfa40e7

Browse files
committed
HHH-19896 Add test for issue
1 parent 33429e9 commit cfa40e7

File tree

1 file changed

+99
-49
lines changed

1 file changed

+99
-49
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/query/criteria/internal/expression/SearchedCaseExpressionTest.java

Lines changed: 99 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*/
55
package org.hibernate.orm.test.query.criteria.internal.expression;
66

7-
import java.util.List;
87
import jakarta.persistence.Column;
98
import jakarta.persistence.Entity;
109
import jakarta.persistence.EnumType;
@@ -15,107 +14,160 @@
1514
import jakarta.persistence.criteria.Expression;
1615
import jakarta.persistence.criteria.Path;
1716
import jakarta.persistence.criteria.Root;
18-
19-
17+
import org.hibernate.testing.orm.junit.DomainModel;
2018
import org.hibernate.testing.orm.junit.JiraKey;
21-
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
22-
import org.junit.Assert;
23-
import org.junit.Test;
19+
import org.hibernate.testing.orm.junit.SessionFactory;
20+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
21+
import org.junit.jupiter.api.AfterEach;
22+
import org.junit.jupiter.api.Test;
2423

25-
import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate;
26-
import static org.junit.Assert.assertEquals;
24+
import java.util.List;
25+
26+
import static org.assertj.core.api.Assertions.assertThat;
2727

2828
/**
2929
*
3030
* @author Vasyl Danyliuk
3131
*/
32-
public class SearchedCaseExpressionTest extends BaseCoreFunctionalTestCase {
32+
@DomainModel(
33+
annotatedClasses = {
34+
SearchedCaseExpressionTest.Event.class,
35+
SearchedCaseExpressionTest.EventType.class
36+
}
37+
)
38+
@SessionFactory
39+
public class SearchedCaseExpressionTest {
40+
41+
@AfterEach
42+
public void tearDown(SessionFactoryScope scope) {
43+
scope.getSessionFactory().getSchemaManager().truncateMappedObjects();
44+
}
3345

3446
@Test
35-
public void testCaseClause() {
36-
doInHibernate( this::sessionFactory, session -> {
47+
public void testCaseClause(SessionFactoryScope scope) {
48+
scope.inTransaction( session -> {
3749
CriteriaBuilder cb = session.getCriteriaBuilder();
3850

39-
CriteriaQuery<Event> criteria = cb.createQuery(Event.class);
51+
CriteriaQuery<Event> criteria = cb.createQuery( Event.class );
4052

41-
Root<Event> event = criteria.from(Event.class);
42-
Path<EventType> type = event.get("type");
53+
Root<Event> event = criteria.from( Event.class );
54+
Path<EventType> type = event.get( "type" );
4355

44-
Expression<String> caseWhen = cb.<EventType, String>selectCase(type)
45-
.when(EventType.TYPE1, "Admin Event")
46-
.when(EventType.TYPE2, "User Event")
47-
.when(EventType.TYPE3, "Reporter Event")
48-
.otherwise("");
56+
Expression<String> caseWhen = cb.<EventType, String>selectCase( type )
57+
.when( EventType.TYPE1, "Admin Event" )
58+
.when( EventType.TYPE2, "User Event" )
59+
.when( EventType.TYPE3, "Reporter Event" )
60+
.otherwise( "" );
4961

50-
criteria.select(event);
51-
criteria.where(cb.equal(caseWhen, "Admin Event")); // OK when use cb.like() method and others
52-
List<Event> resultList = session.createQuery(criteria).getResultList();
62+
criteria.select( event );
63+
criteria.where( cb.equal( caseWhen, "Admin Event" ) ); // OK when use cb.like() method and others
64+
List<Event> resultList = session.createQuery( criteria ).getResultList();
5365

54-
Assert.assertNotNull(resultList);
66+
assertThat( resultList ).isNotNull();
5567
} );
5668
}
5769

5870
@Test
59-
public void testEqualClause() {
60-
doInHibernate( this::sessionFactory, session -> {
71+
public void testEqualClause(SessionFactoryScope scope) {
72+
scope.inTransaction( session -> {
6173
CriteriaBuilder cb = session.getCriteriaBuilder();
6274

63-
CriteriaQuery<Event> criteria = cb.createQuery(Event.class);
75+
CriteriaQuery<Event> criteria = cb.createQuery( Event.class );
6476

65-
Root<Event> event = criteria.from(Event.class);
66-
Path<EventType> type = event.get("type");
77+
Root<Event> event = criteria.from( Event.class );
78+
Path<EventType> type = event.get( "type" );
6779

6880
Expression<String> caseWhen = cb.<String>selectCase()
69-
.when(cb.equal(type, EventType.TYPE1), "Type1")
70-
.otherwise("");
71-
72-
criteria.select(event);
73-
criteria.where(cb.equal(caseWhen, "Admin Event")); // OK when use cb.like() method and others
74-
List<Event> resultList = session.createQuery(criteria).getResultList();
81+
.when( cb.equal( type, EventType.TYPE1 ), "Type1" )
82+
.otherwise( "" );
7583

84+
criteria.select( event );
85+
criteria.where( cb.equal( caseWhen, "Admin Event" ) ); // OK when use cb.like() method and others
86+
List<Event> resultList = session.createQuery( criteria ).getResultList();
7687

77-
Assert.assertNotNull(resultList);
88+
assertThat( resultList ).isNotNull();
7889
} );
7990
}
8091

8192
@Test
8293
@JiraKey(value = "HHH-13167")
83-
public void testMissingElseClause() {
84-
doInHibernate( this::sessionFactory, session -> {
94+
public void testMissingElseClause(SessionFactoryScope scope) {
95+
scope.inTransaction( session -> {
8596
Event event = new Event();
8697
event.id = 1L;
8798
event.type = EventType.TYPE1;
8899

89100
session.persist( event );
90101
} );
91102

92-
doInHibernate( this::sessionFactory, session -> {
103+
scope.inTransaction( session -> {
93104
CriteriaBuilder cb = session.getCriteriaBuilder();
94105

95106
CriteriaQuery<Event> criteria = cb.createQuery( Event.class );
96107

97108
Root<Event> root = criteria.from( Event.class );
98109
Path<EventType> type = root.get( "type" );
99110

100-
Expression<String> caseWhen = cb.<String> selectCase()
111+
Expression<String> caseWhen = cb.<String>selectCase()
101112
.when( cb.equal( type, EventType.TYPE1 ), "Matched" );
102113

103114
criteria.select( root );
104115
criteria.where( cb.equal( caseWhen, "Matched" ) );
105116

106117
Event event = session.createQuery( criteria ).getSingleResult();
107-
assertEquals( 1L, (long) event.id );
118+
assertThat( event.id ).isEqualTo( 1L );
108119
} );
109120
}
110121

111-
@Override
112-
protected boolean isCleanupTestDataRequired() {
113-
return true;
114-
}
115122

116-
@Override
117-
protected Class[] getAnnotatedClasses() {
118-
return new Class[]{ Event.class, EventType.class };
123+
@Test
124+
@JiraKey( "HHH-19896" )
125+
public void testCaseWhenWithOtherwiseClauseExecutedAfterOneWithout(SessionFactoryScope scope) {
126+
scope.inTransaction( session -> {
127+
Event event = new Event();
128+
event.id = 1L;
129+
event.type = EventType.TYPE1;
130+
131+
session.persist( event );
132+
} );
133+
134+
scope.inTransaction( session -> {
135+
CriteriaBuilder cb = session.getCriteriaBuilder();
136+
137+
CriteriaQuery<Event> criteria = cb.createQuery( Event.class );
138+
139+
Root<Event> root = criteria.from( Event.class );
140+
Path<EventType> type = root.get( "type" );
141+
142+
Expression<String> caseWhen = cb.<String>selectCase()
143+
.when( cb.equal( type, EventType.TYPE1 ), "Matched" );
144+
145+
criteria.select( root );
146+
criteria.where( cb.equal( caseWhen, "Matched" ) );
147+
148+
Event event = session.createQuery( criteria ).getSingleResult();
149+
assertThat( event.id ).isEqualTo( 1L );
150+
} );
151+
152+
scope.inTransaction( session -> {
153+
CriteriaBuilder cb = session.getCriteriaBuilder();
154+
155+
CriteriaQuery<Event> criteria = cb.createQuery( Event.class );
156+
157+
Root<Event> event = criteria.from( Event.class );
158+
Path<EventType> type = event.get( "type" );
159+
160+
Expression<String> caseWhen = cb.<String>selectCase()
161+
.when( cb.equal( type, EventType.TYPE1 ), "Type1" )
162+
.otherwise( "" );
163+
164+
criteria.select( event );
165+
criteria.where( cb.equal( caseWhen, "Admin Event" ) ); // OK when use cb.like() method and others
166+
List<Event> resultList = session.createQuery( criteria ).getResultList();
167+
168+
assertThat( resultList ).isNotNull();
169+
assertThat( resultList ).hasSize( 0 );
170+
} );
119171
}
120172

121173
@Entity(name = "Event")
@@ -142,8 +194,6 @@ public Event type(EventType type) {
142194
}
143195

144196
public enum EventType {
145-
146197
TYPE1, TYPE2, TYPE3
147-
148198
}
149199
}

0 commit comments

Comments
 (0)