@@ -43,6 +43,182 @@ void unsorted() {
4343 }
4444 }
4545
46+ @ Nested
47+ class By {
48+ @ Test
49+ void byMultipleDefinitions_shouldCreateSortParameter () {
50+ // when
51+ var item = SortParameter .by (ESort .Property1 , ESort .property3 , ESort .Property2 );
52+
53+ // then
54+ assertThat (item .sortFields ()).hasSize (3 );
55+ assertThat (item .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
56+ assertThat (item .sortFields ().get (0 ).direction ()).isEqualTo (Sort .Direction .ASC );
57+ assertThat (item .sortFields ().get (0 ).nullHandling ()).isEqualTo (Sort .NullHandling .NATIVE );
58+ assertThat (item .sortFields ().get (1 ).property ()).isEqualTo ("property3" );
59+ assertThat (item .sortFields ().get (1 ).direction ()).isEqualTo (Sort .Direction .ASC );
60+ assertThat (item .sortFields ().get (1 ).nullHandling ()).isEqualTo (Sort .NullHandling .NATIVE );
61+ assertThat (item .sortFields ().get (2 ).property ()).isEqualTo ("Property2" );
62+ assertThat (item .sortFields ().get (2 ).direction ()).isEqualTo (Sort .Direction .ASC );
63+ assertThat (item .sortFields ().get (2 ).nullHandling ()).isEqualTo (Sort .NullHandling .NATIVE );
64+ }
65+
66+ @ Test
67+ void bySingleDefinition_shouldCreateSortParameter () {
68+ // when
69+ var item = SortParameter .by (ESort .Property1 );
70+
71+ // then
72+ assertThat (item .sortFields ()).hasSize (1 );
73+ assertThat (item .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
74+ assertThat (item .sortFields ().get (0 ).direction ()).isEqualTo (Sort .Direction .ASC );
75+ assertThat (item .sortFields ().get (0 ).nullHandling ()).isEqualTo (Sort .NullHandling .NATIVE );
76+ }
77+
78+ @ Test
79+ void byDefinitionAndDirection_shouldCreateSortParameter () {
80+ // when
81+ var item = SortParameter .by (ESort .Property1 , Sort .Direction .DESC );
82+
83+ // then
84+ assertThat (item .sortFields ()).hasSize (1 );
85+ assertThat (item .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
86+ assertThat (item .sortFields ().get (0 ).direction ()).isEqualTo (Sort .Direction .DESC );
87+ assertThat (item .sortFields ().get (0 ).nullHandling ()).isEqualTo (Sort .NullHandling .NATIVE );
88+ }
89+
90+ @ Test
91+ void byDefinitionDirectionAndNullHandling_shouldCreateSortParameter () {
92+ // when
93+ var item = SortParameter .by (ESort .Property1 , Sort .Direction .DESC , Sort .NullHandling .NULLS_FIRST );
94+
95+ // then
96+ assertThat (item .sortFields ()).hasSize (1 );
97+ assertThat (item .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
98+ assertThat (item .sortFields ().get (0 ).direction ()).isEqualTo (Sort .Direction .DESC );
99+ assertThat (item .sortFields ().get (0 ).nullHandling ()).isEqualTo (Sort .NullHandling .NULLS_FIRST );
100+ }
101+ }
102+
103+ @ Nested
104+ class And {
105+ @ Test
106+ void andMultipleDefinitions_shouldAddSortFields () {
107+ // given
108+ var item = SortParameter .by (ESort .Property1 );
109+
110+ // when
111+ item .and (ESort .property3 , ESort .Property2 );
112+
113+ // then
114+ assertThat (item .sortFields ()).hasSize (3 );
115+ assertThat (item .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
116+ assertThat (item .sortFields ().get (1 ).property ()).isEqualTo ("property3" );
117+ assertThat (item .sortFields ().get (1 ).direction ()).isEqualTo (Sort .Direction .ASC );
118+ assertThat (item .sortFields ().get (1 ).nullHandling ()).isEqualTo (Sort .NullHandling .NATIVE );
119+ assertThat (item .sortFields ().get (2 ).property ()).isEqualTo ("Property2" );
120+ assertThat (item .sortFields ().get (2 ).direction ()).isEqualTo (Sort .Direction .ASC );
121+ assertThat (item .sortFields ().get (2 ).nullHandling ()).isEqualTo (Sort .NullHandling .NATIVE );
122+ }
123+
124+ @ Test
125+ void andDefinitionAndDirection_shouldAddSortField () {
126+ // given
127+ var item = SortParameter .by (ESort .Property1 );
128+
129+ // when
130+ item .and (ESort .property3 , Sort .Direction .DESC );
131+
132+ // then
133+ assertThat (item .sortFields ()).hasSize (2 );
134+ assertThat (item .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
135+ assertThat (item .sortFields ().get (1 ).property ()).isEqualTo ("property3" );
136+ assertThat (item .sortFields ().get (1 ).direction ()).isEqualTo (Sort .Direction .DESC );
137+ assertThat (item .sortFields ().get (1 ).nullHandling ()).isEqualTo (Sort .NullHandling .NATIVE );
138+ }
139+
140+ @ Test
141+ void andDefinitionDirectionAndNullHandling_shouldAddSortField () {
142+ // given
143+ var item = SortParameter .by (ESort .Property1 );
144+
145+ // when
146+ item .and (ESort .property3 , Sort .Direction .DESC , Sort .NullHandling .NULLS_LAST );
147+
148+ // then
149+ assertThat (item .sortFields ()).hasSize (2 );
150+ assertThat (item .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
151+ assertThat (item .sortFields ().get (1 ).property ()).isEqualTo ("property3" );
152+ assertThat (item .sortFields ().get (1 ).direction ()).isEqualTo (Sort .Direction .DESC );
153+ assertThat (item .sortFields ().get (1 ).nullHandling ()).isEqualTo (Sort .NullHandling .NULLS_LAST );
154+ }
155+
156+ @ Test
157+ void andChaining_shouldAddMultipleSortFields () {
158+ // given
159+ var item = SortParameter .by (ESort .Property1 )
160+ .and (ESort .property3 , Sort .Direction .DESC )
161+ .and (ESort .Property2 , Sort .Direction .ASC , Sort .NullHandling .NULLS_FIRST );
162+
163+ // then
164+ assertThat (item .sortFields ()).hasSize (3 );
165+ assertThat (item .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
166+ assertThat (item .sortFields ().get (1 ).property ()).isEqualTo ("property3" );
167+ assertThat (item .sortFields ().get (1 ).direction ()).isEqualTo (Sort .Direction .DESC );
168+ assertThat (item .sortFields ().get (2 ).property ()).isEqualTo ("Property2" );
169+ assertThat (item .sortFields ().get (2 ).direction ()).isEqualTo (Sort .Direction .ASC );
170+ assertThat (item .sortFields ().get (2 ).nullHandling ()).isEqualTo (Sort .NullHandling .NULLS_FIRST );
171+ }
172+ }
173+
174+ @ Nested
175+ class Or {
176+ @ Test
177+ void orWithEmptySortFields_shouldReturnFallback () {
178+ // given
179+ var item = SortParameter .<ESort >unsorted ();
180+ var fallback = SortParameter .by (ESort .Property1 );
181+
182+ // when
183+ var result = item .or (fallback );
184+
185+ // then
186+ assertThat (result ).isEqualTo (fallback );
187+ assertThat (result .sortFields ()).hasSize (1 );
188+ assertThat (result .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
189+ }
190+
191+ @ Test
192+ void orWithNullSortFields_shouldReturnFallback () {
193+ // given
194+ var item = new SortParameter <ESort >(null );
195+ var fallback = SortParameter .by (ESort .Property1 );
196+
197+ // when
198+ var result = item .or (fallback );
199+
200+ // then
201+ assertThat (result ).isEqualTo (fallback );
202+ assertThat (result .sortFields ()).hasSize (1 );
203+ assertThat (result .sortFields ().get (0 ).property ()).isEqualTo ("Property1" );
204+ }
205+
206+ @ Test
207+ void orWithNonEmptySortFields_shouldReturnThis () {
208+ // given
209+ var item = SortParameter .by (ESort .property3 );
210+ var fallback = SortParameter .by (ESort .Property1 );
211+
212+ // when
213+ var result = item .or (fallback );
214+
215+ // then
216+ assertThat (result ).isEqualTo (item );
217+ assertThat (result .sortFields ()).hasSize (1 );
218+ assertThat (result .sortFields ().get (0 ).property ()).isEqualTo ("property3" );
219+ }
220+ }
221+
46222 @ Nested
47223 class BuildSortWithoutDefault {
48224 @ Test
0 commit comments