1616package software .xdev .spring .data .eclipse .store .integration .isolated .tests .query .hsql ;
1717
1818import static org .junit .jupiter .api .Assertions .assertEquals ;
19+ import static org .junit .jupiter .api .Assertions .assertNotNull ;
1920
21+ import java .time .LocalDate ;
2022import java .util .Arrays ;
2123import java .util .Calendar ;
2224import java .util .List ;
2325import java .util .stream .Stream ;
2426
25- import org .junit .jupiter .api .Test ;
2627import org .junit .jupiter .params .ParameterizedTest ;
2728import org .junit .jupiter .params .provider .Arguments ;
2829import org .junit .jupiter .params .provider .MethodSource ;
@@ -39,7 +40,232 @@ class HsqlTest
3940 @ Autowired
4041 private MyEntityRepository repository ;
4142
42- @ Autowired
43- private HsqlTestConfiguration configuration ;
43+ @ ParameterizedTest
44+ @ MethodSource ("provideTestData" )
45+ void testFindAllEntities (final List <MyEntity > entities )
46+ {
47+ this .repository .saveAll (entities );
48+ final List <MyEntity > result = this .repository .findAllEntities ();
49+ assertEquals (entities .size (), result .size ());
50+ }
51+
52+ @ ParameterizedTest
53+ @ MethodSource ("provideTestData" )
54+ void testFindByName (final List <MyEntity > entities )
55+ {
56+ this .repository .saveAll (entities );
57+ final List <MyEntity > result = this .repository .findByName ("John" );
58+ assertEquals (1 , result .size ());
59+ assertEquals ("John" , result .get (0 ).getName ());
60+ }
61+
62+ @ ParameterizedTest
63+ @ MethodSource ("provideTestData" )
64+ void testFindByNameAndAgeGreaterThan (final List <MyEntity > entities )
65+ {
66+ this .repository .saveAll (entities );
67+ final List <MyEntity > result = this .repository .findByNameAndAgeGreaterThan ("John" , 25 );
68+ assertEquals (1 , result .size ());
69+ assertEquals ("John" , result .get (0 ).getName ());
70+ }
71+
72+ @ ParameterizedTest
73+ @ MethodSource ("provideTestData" )
74+ void testFindAllOrderByAgeDesc (final List <MyEntity > entities )
75+ {
76+ this .repository .saveAll (entities );
77+ final List <MyEntity > result = this .repository .findAllOrderByAgeDesc ();
78+ assertEquals (entities .size (), result .size ());
79+ assertEquals (40 , result .get (0 ).getAge ());
80+ }
81+
82+ @ ParameterizedTest
83+ @ MethodSource ("provideTestData" )
84+ void testFindTop5ByOrderByAgeDesc (final List <MyEntity > entities )
85+ {
86+ this .repository .saveAll (entities );
87+ final List <MyEntity > result = this .repository .findTop5ByOrderByAgeDesc ();
88+ assertEquals (Math .min (5 , entities .size ()), result .size ());
89+ }
90+
91+ @ ParameterizedTest
92+ @ MethodSource ("provideTestData" )
93+ void testFindDistinctNames (final List <MyEntity > entities )
94+ {
95+ this .repository .saveAll (entities );
96+ final List <String > result = this .repository .findDistinctNames ();
97+ assertEquals (entities .stream ().map (MyEntity ::getName ).distinct ().count (), result .size ());
98+ }
99+
100+ @ ParameterizedTest
101+ @ MethodSource ("provideTestDataWithOtherEntity" )
102+ void testFindByOtherEntityId (final List <MyEntity > entities , final OtherEntity otherEntity )
103+ {
104+ this .repository .saveAll (entities );
105+ final List <MyEntity > result = this .repository .findByOtherEntityId (otherEntity .getId ());
106+ assertEquals (entities .stream ()
107+ .filter (e -> e .getOtherEntity () != null && e .getOtherEntity ().getId ().equals (otherEntity .getId ()))
108+ .count (), result .size ());
109+ }
110+
111+ @ ParameterizedTest
112+ @ MethodSource ("provideTestData" )
113+ void testCountByName (final List <MyEntity > entities )
114+ {
115+ this .repository .saveAll (entities );
116+ final List <Object []> result = this .repository .countByName ();
117+ assertNotNull (result );
118+ }
119+
120+ @ ParameterizedTest
121+ @ MethodSource ("provideTestData" )
122+ void testCountByNameHavingMoreThan (final List <MyEntity > entities )
123+ {
124+ this .repository .saveAll (entities );
125+ final List <Object []> result = this .repository .countByNameHavingMoreThan (1 );
126+ assertNotNull (result );
127+ }
128+
129+ @ ParameterizedTest
130+ @ MethodSource ("provideTestData" )
131+ void testFindEntityWithMaxAge (final List <MyEntity > entities )
132+ {
133+ this .repository .saveAll (entities );
134+ final MyEntity result = this .repository .findEntityWithMaxAge ();
135+ assertEquals (40 , result .getAge ());
136+ }
137+
138+ @ ParameterizedTest
139+ @ MethodSource ("provideTestData" )
140+ void testFindByNameIn (final List <MyEntity > entities )
141+ {
142+ this .repository .saveAll (entities );
143+ final List <MyEntity > result = this .repository .findByNameIn (Arrays .asList ("John" , "Jane" ));
144+ assertEquals (2 , result .size ());
145+ }
146+
147+ @ ParameterizedTest
148+ @ MethodSource ("provideTestData" )
149+ void testFindByNameContaining (final List <MyEntity > entities )
150+ {
151+ this .repository .saveAll (entities );
152+ final List <MyEntity > result = this .repository .findByNameContaining ("Jo" );
153+ assertEquals (1 , result .size ());
154+ }
155+
156+ @ ParameterizedTest
157+ @ MethodSource ("provideTestData" )
158+ void testFindByNameNative (final List <MyEntity > entities )
159+ {
160+ this .repository .saveAll (entities );
161+ final List <MyEntity > result = this .repository .findByNameNative ("John" );
162+ assertEquals (1 , result .size ());
163+ }
164+
165+ @ ParameterizedTest
166+ @ MethodSource ("provideTestData" )
167+ void testFindByCreationDateAfter (final List <MyEntity > entities )
168+ {
169+ this .repository .saveAll (entities );
170+ final List <MyEntity > result =
171+ this .repository .findByCreationDateAfter (LocalDate .now ().minusDays (1 ));
172+ assertEquals (entities .size (), result .size ());
173+ }
174+
175+ @ ParameterizedTest
176+ @ MethodSource ("provideTestData" )
177+ void testFindByAgeBetween (final List <MyEntity > entities )
178+ {
179+ this .repository .saveAll (entities );
180+ final List <MyEntity > result = this .repository .findByAgeBetween (20 , 30 );
181+ assertEquals (2 , result .size ());
182+ }
183+
184+ @ ParameterizedTest
185+ @ MethodSource ("provideTestData" )
186+ void testFindAllActive (final List <MyEntity > entities )
187+ {
188+ this .repository .saveAll (entities );
189+ final List <MyEntity > result = this .repository .findAllActive ();
190+ assertEquals (entities .stream ().filter (MyEntity ::isActive ).count (), result .size ());
191+ }
192+
193+ @ ParameterizedTest
194+ @ MethodSource ("provideTestData" )
195+ void testFindWhereOtherEntityIsNull (final List <MyEntity > entities )
196+ {
197+ this .repository .saveAll (entities );
198+ final List <MyEntity > result = this .repository .findWhereOtherEntityIsNull ();
199+ assertEquals (entities .stream ().filter (e -> e .getOtherEntity () == null ).count (), result .size ());
200+ }
201+
202+ @ ParameterizedTest
203+ @ MethodSource ("provideTestDataWithOtherEntity" )
204+ void testFindWhereOtherEntityIsNotNull (final List <MyEntity > entities )
205+ {
206+ this .repository .saveAll (entities );
207+ final List <MyEntity > result = this .repository .findWhereOtherEntityIsNotNull ();
208+ assertEquals (entities .stream ().filter (e -> e .getOtherEntity () != null ).count (), result .size ());
209+ }
210+ //
211+ // @ParameterizedTest
212+ // @MethodSource("provideTestData")
213+ // void testFindAllAsDTO(List<MyEntity> entities) {
214+ // repository.saveAll(entities);
215+ // List<MyEntityDTO> result = repository.findAllAsDTO();
216+ // assertEquals(entities.size(), result.size());
217+ // }
218+
219+ @ ParameterizedTest
220+ @ MethodSource ("provideTestData" )
221+ void testFindByCreationYear (final List <MyEntity > entities )
222+ {
223+ this .repository .saveAll (entities );
224+ final List <MyEntity > result = this .repository .findByCreationYear (Calendar .getInstance ().get (Calendar .YEAR ));
225+ assertEquals (entities .size (), result .size ());
226+ }
227+
228+ private static Stream <Arguments > provideTestData ()
229+ {
230+ return Stream .of (
231+ Arguments .of (Arrays .asList (
232+ createMyEntity ("John" , 30 , true , null ),
233+ createMyEntity ("Jane" , 25 , false , null ),
234+ createMyEntity ("Doe" , 40 , true , null )
235+ )),
236+ Arguments .of (Arrays .asList (
237+ createMyEntity ("Alice" , 22 , true , null ),
238+ createMyEntity ("Bob" , 28 , false , null ),
239+ createMyEntity ("Charlie" , 35 , true , null )
240+ ))
241+ );
242+ }
243+
244+ private static Stream <Arguments > provideTestDataWithOtherEntity ()
245+ {
246+ final OtherEntity otherEntity = new OtherEntity ();
247+ otherEntity .setDescription ("Test OtherEntity" );
248+ return Stream .of (
249+ Arguments .of (Arrays .asList (
250+ createMyEntity ("John" , 30 , true , otherEntity ),
251+ createMyEntity ("Jane" , 25 , false , null ),
252+ createMyEntity ("Doe" , 40 , true , otherEntity )
253+ ), otherEntity )
254+ );
255+ }
256+
257+ private static MyEntity createMyEntity (
258+ final String name ,
259+ final int age ,
260+ final boolean active ,
261+ final OtherEntity otherEntity )
262+ {
263+ final MyEntity entity = new MyEntity ();
264+ entity .setName (name );
265+ entity .setAge (age );
266+ entity .setCreationDate (LocalDate .now ());
267+ entity .setActive (active );
268+ entity .setOtherEntity (otherEntity );
269+ return entity ;
44270 }
45271}
0 commit comments