Skip to content

Commit 2b4ec1f

Browse files
dreab8beikov
authored andcommitted
HHH-17964 Add test for issue
1 parent 66dbb7a commit 2b4ec1f

File tree

1 file changed

+235
-0
lines changed

1 file changed

+235
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
package org.hibernate.orm.test.annotations.collectionelement;
2+
3+
import java.sql.PreparedStatement;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
import java.util.UUID;
7+
8+
import org.hibernate.annotations.JdbcType;
9+
import org.hibernate.dialect.H2Dialect;
10+
import org.hibernate.dialect.PostgreSQLDialect;
11+
import org.hibernate.type.descriptor.jdbc.UUIDJdbcType;
12+
13+
import org.hibernate.testing.orm.junit.DomainModel;
14+
import org.hibernate.testing.orm.junit.JiraKey;
15+
import org.hibernate.testing.orm.junit.RequiresDialect;
16+
import org.hibernate.testing.orm.junit.SessionFactory;
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.api.Test;
21+
22+
import jakarta.persistence.Column;
23+
import jakarta.persistence.ElementCollection;
24+
import jakarta.persistence.Entity;
25+
import jakarta.persistence.Id;
26+
import jakarta.persistence.IdClass;
27+
import jakarta.persistence.LockModeType;
28+
import jakarta.persistence.Table;
29+
30+
import static org.assertj.core.api.Assertions.assertThat;
31+
32+
@DomainModel(
33+
annotatedClasses = {
34+
ElementCollectionAndCompositeKeyTest.OauthConnection.class
35+
}
36+
)
37+
@SessionFactory(exportSchema = false)
38+
@JiraKey("HHH-17964")
39+
@RequiresDialect( H2Dialect.class )
40+
@RequiresDialect( PostgreSQLDialect.class )
41+
public class ElementCollectionAndCompositeKeyTest {
42+
43+
@BeforeEach
44+
public void setUp(SessionFactoryScope scope) {
45+
scope.inTransaction(
46+
session ->
47+
session.doWork(
48+
connection -> {
49+
PreparedStatement preparedStatement = connection.prepareStatement(
50+
"create table oauth_connection_grantedScopes (" +
51+
" oauth_connection_connection varchar(255) not null," +
52+
" oauth_connection_id uuid not null," +
53+
" grantedScopes varchar(255)" +
54+
" )" );
55+
try {
56+
preparedStatement.executeUpdate();
57+
}
58+
finally {
59+
preparedStatement.close();
60+
}
61+
62+
63+
preparedStatement = connection.prepareStatement(
64+
"create table oauth_connections (" +
65+
" id uuid not null," +
66+
" connection varchar(255) not null," +
67+
" name varchar(255)," +
68+
" primary key (connection, id)" +
69+
" )" );
70+
try {
71+
preparedStatement.executeUpdate();
72+
}
73+
finally {
74+
preparedStatement.close();
75+
}
76+
}
77+
)
78+
);
79+
}
80+
81+
@AfterEach
82+
public void tearDown(SessionFactoryScope scope) {
83+
scope.inTransaction(
84+
session ->
85+
session.doWork(
86+
connection -> {
87+
PreparedStatement preparedStatement = connection.prepareStatement(
88+
"drop table oauth_connection_grantedScopes " );
89+
try {
90+
preparedStatement.executeUpdate();
91+
}
92+
finally {
93+
preparedStatement.close();
94+
}
95+
preparedStatement = connection.prepareStatement(
96+
"drop table oauth_connections " );
97+
try {
98+
preparedStatement.executeUpdate();
99+
}
100+
finally {
101+
preparedStatement.close();
102+
}
103+
}
104+
)
105+
);
106+
}
107+
108+
@Test
109+
public void testInitilizeElementCollection(SessionFactoryScope scope) {
110+
UUID primarySID = UUID.fromString( "53886a8a-7082-4879-b430-25cb94415be8" );
111+
String connection = "def";
112+
OauthConnectionId id = new OauthConnectionId( primarySID, connection );
113+
scope.inTransaction(
114+
session -> {
115+
List<String> grantedScopes = new ArrayList<>();
116+
grantedScopes.add( "a" );
117+
grantedScopes.add( "b" );
118+
grantedScopes.add( "c" );
119+
OauthConnection oauthConnection = new OauthConnection( primarySID, connection, grantedScopes );
120+
session.persist( oauthConnection );
121+
}
122+
);
123+
124+
scope.inTransaction(
125+
session -> {
126+
OauthConnection con = session.find(
127+
OauthConnection.class,
128+
id
129+
);
130+
List<String> grantedScopes = con.getGrantedScopes();
131+
grantedScopes.size();
132+
}
133+
);
134+
135+
scope.inTransaction(
136+
session -> {
137+
OauthConnection con = session.createQuery(
138+
"select o from oauth_connection o where o.primarySID = :primarySID and o.connection = :connection",
139+
OauthConnection.class
140+
).setParameter( "primarySID", primarySID ).setParameter( "connection", connection ).uniqueResult();
141+
List<String> grantedScopes = con.getGrantedScopes();
142+
grantedScopes.size();
143+
}
144+
);
145+
146+
scope.inTransaction(
147+
session -> {
148+
List<OauthConnection> connections = session.createQuery(
149+
"select o from oauth_connection o ",
150+
OauthConnection.class
151+
).list();
152+
assertThat( connections.size() ).isEqualTo( 1 );
153+
List<String> grantedScopes = connections.get( 0 ).getGrantedScopes();
154+
grantedScopes.size();
155+
}
156+
);
157+
158+
scope.inTransaction(
159+
session -> {
160+
List<OauthConnection> connections = session.createQuery(
161+
"select o from oauth_connection o where o.id = :id",
162+
OauthConnection.class
163+
).setLockMode( LockModeType.PESSIMISTIC_WRITE ).setParameter( "id", id ).list();
164+
assertThat( connections.size() ).isEqualTo( 1 );
165+
List<String> grantedScopes = connections.get( 0 ).getGrantedScopes();
166+
grantedScopes.size();
167+
}
168+
);
169+
170+
}
171+
172+
@Entity(name = "oauth_connection")
173+
@Table(name = "oauth_connections")
174+
@IdClass(OauthConnectionId.class)
175+
public static class OauthConnection {
176+
177+
@Id
178+
@Column(name = "id")
179+
@JdbcType(UUIDJdbcType.class)
180+
private UUID primarySID;
181+
182+
@Id
183+
@Column(name = "connection")
184+
private String connection;
185+
186+
@Column(name = "name")
187+
private String name;
188+
189+
@ElementCollection
190+
private List<String> grantedScopes;
191+
192+
public OauthConnection() {
193+
}
194+
195+
public OauthConnection(UUID primarySID, String connection, List<String> grantedScopes) {
196+
this.primarySID = primarySID;
197+
this.connection = connection;
198+
this.grantedScopes = grantedScopes;
199+
}
200+
201+
public UUID getPrimarySID() {
202+
return primarySID;
203+
}
204+
205+
public String getConnection() {
206+
return connection;
207+
}
208+
209+
public List<String> getGrantedScopes() {
210+
return grantedScopes;
211+
}
212+
}
213+
214+
public static class OauthConnectionId {
215+
216+
217+
@Id
218+
@Column(name = "connection")
219+
private String connection;
220+
221+
@Id
222+
@Column(name = "id")
223+
@JdbcType(UUIDJdbcType.class)
224+
private UUID primarySID;
225+
226+
public OauthConnectionId() {
227+
}
228+
229+
public OauthConnectionId(UUID primarySID, String connection) {
230+
this.primarySID = primarySID;
231+
this.connection = connection;
232+
}
233+
}
234+
235+
}

0 commit comments

Comments
 (0)