Skip to content

Commit ccbdd07

Browse files
marko-bekhtabeikov
authored andcommitted
HHH-19036 Add a test for filter declaration order
1 parent e9cb6db commit ccbdd07

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.filter;
6+
7+
import jakarta.persistence.Column;
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.GeneratedValue;
10+
import jakarta.persistence.GenerationType;
11+
import jakarta.persistence.Id;
12+
import org.hibernate.SharedSessionContract;
13+
import org.hibernate.annotations.Filter;
14+
import org.hibernate.annotations.FilterDef;
15+
import org.hibernate.testing.orm.junit.DomainModel;
16+
import org.hibernate.testing.orm.junit.JiraKey;
17+
import org.hibernate.testing.orm.junit.SessionFactoryScope;
18+
import org.junit.jupiter.api.AfterEach;
19+
import org.junit.jupiter.api.BeforeEach;
20+
import org.junit.jupiter.params.ParameterizedTest;
21+
import org.junit.jupiter.params.provider.MethodSource;
22+
23+
import java.util.List;
24+
import java.util.function.BiConsumer;
25+
import java.util.function.Consumer;
26+
27+
import static org.assertj.core.api.Assertions.assertThat;
28+
29+
@DomainModel(
30+
annotatedClasses = {
31+
FilterDefinitionOrderTest.AMyEntity.class,
32+
FilterDefinitionOrderTest.XEntity.class
33+
}
34+
)
35+
@JiraKey("HHH-19036")
36+
// Real test is if it actually starts, as that's where the filter binding happens,
37+
// but let's also check that it was actually processed as well:
38+
public class FilterDefinitionOrderTest extends AbstractStatefulStatelessFilterTest {
39+
40+
@BeforeEach
41+
void setUp() {
42+
scope.inTransaction(session -> {
43+
AMyEntity entity1 = new AMyEntity();
44+
entity1.setField("test");
45+
AMyEntity entity2 = new AMyEntity();
46+
entity2.setField("Hello");
47+
session.persist(entity1);
48+
session.persist(entity2);
49+
});
50+
}
51+
52+
@AfterEach
53+
void tearDown() {
54+
scope.dropData();
55+
}
56+
57+
@ParameterizedTest
58+
@MethodSource("transactionKind")
59+
void smokeTest(BiConsumer<SessionFactoryScope, Consumer<? extends SharedSessionContract>> inTransaction) {
60+
inTransaction.accept(scope, session -> {
61+
session.enableFilter("x_filter");
62+
List<AMyEntity> entities = session.createQuery("FROM AMyEntity", AMyEntity.class).getResultList();
63+
assertThat(entities).hasSize(1)
64+
.allSatisfy(entity -> assertThat(entity.getField()).isEqualTo("Hello"));
65+
66+
session.disableFilter("x_filter");
67+
entities = session.createQuery("FROM AMyEntity", AMyEntity.class).getResultList();
68+
assertThat(entities).hasSize(2);
69+
});
70+
}
71+
72+
@Entity(name = "AMyEntity")
73+
@Filter(name = "x_filter")
74+
public static class AMyEntity {
75+
@Id
76+
@GeneratedValue(strategy = GenerationType.SEQUENCE)
77+
@Column(nullable = false)
78+
private Long id;
79+
80+
public String field;
81+
82+
public Long getId() {
83+
return id;
84+
}
85+
86+
public void setId(Long id) {
87+
this.id = id;
88+
}
89+
90+
public String getField() {
91+
return field;
92+
}
93+
94+
public void setField(String field) {
95+
this.field = field;
96+
}
97+
}
98+
99+
@Entity(name = "XEntity")
100+
@FilterDef(name = "x_filter", defaultCondition = "field = 'Hello'")
101+
public static class XEntity {
102+
103+
@Id
104+
@GeneratedValue(strategy = GenerationType.SEQUENCE)
105+
@Column(nullable = false)
106+
private Long id;
107+
108+
public String field;
109+
110+
public Long getId() {
111+
return id;
112+
}
113+
114+
public void setId(Long id) {
115+
this.id = id;
116+
}
117+
118+
public String getField() {
119+
return field;
120+
}
121+
122+
public void setField(String field) {
123+
this.field = field;
124+
}
125+
}
126+
}

0 commit comments

Comments
 (0)