Skip to content

Commit aba34af

Browse files
authored
Merge pull request #16 from aboutbits/updates
Updates
2 parents c356584 + ee176da commit aba34af

3 files changed

Lines changed: 128 additions & 1 deletion

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.springframework.boot</groupId>
88
<artifactId>spring-boot-starter-parent</artifactId>
9-
<version>3.3.4</version>
9+
<version>3.3.8</version>
1010
<relativePath/> <!-- lookup parent from repository -->
1111
</parent>
1212

src/main/java/it/aboutbits/springboot/toolbox/web/response/PagedResponse.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.springframework.data.domain.Page;
55

66
import java.util.List;
7+
import java.util.function.Function;
78

89
public record PagedResponse<T>(
910
@NonNull
@@ -12,6 +13,34 @@ public record PagedResponse<T>(
1213
MetaWithPagination meta
1314
) {
1415

16+
public static <T> PagedResponse<T> of(@NonNull Page<T> page) {
17+
return new PagedResponse<>(
18+
page.getContent(),
19+
new MetaWithPagination(
20+
new MetaWithPagination.Pagination(
21+
page.getNumber(),
22+
page.getSize(),
23+
page.getTotalElements()
24+
)
25+
)
26+
);
27+
}
28+
29+
public static <I, O> PagedResponse<O> of(@NonNull Page<I> page, @NonNull Function<I, O> converter) {
30+
var mapped = page.map(converter);
31+
32+
return new PagedResponse<>(
33+
mapped.getContent(),
34+
new MetaWithPagination(
35+
new MetaWithPagination.Pagination(
36+
mapped.getNumber(),
37+
mapped.getSize(),
38+
mapped.getTotalElements()
39+
)
40+
)
41+
);
42+
}
43+
1544
public record MetaWithPagination(
1645
@NonNull
1746
Pagination pagination
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package it.aboutbits.springboot.toolbox.web.response;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springframework.data.domain.PageImpl;
5+
import org.springframework.data.domain.PageRequest;
6+
7+
import java.util.List;
8+
import java.util.function.Function;
9+
10+
import static org.assertj.core.api.Assertions.assertThat;
11+
12+
class PagedResponseTest {
13+
@Test
14+
void shouldReturnPagedResponseWithDataAndMeta_forSingleParameterOfMethod() {
15+
// given
16+
var content = List.of("item1", "item2", "item3");
17+
var page = new PageImpl<>(content, PageRequest.of(1, 3), 10);
18+
19+
// when
20+
var pagedResponse = PagedResponse.of(page);
21+
22+
// then
23+
assertThat(pagedResponse).isNotNull();
24+
assertThat(pagedResponse.data()).isEqualTo(content);
25+
assertThat(pagedResponse.meta().pagination().page()).isEqualTo(1);
26+
assertThat(pagedResponse.meta().pagination().size()).isEqualTo(3);
27+
assertThat(pagedResponse.meta().pagination().totalElements()).isEqualTo(10);
28+
}
29+
30+
@Test
31+
void shouldReturnPagedResponseWithMappedDataAndMeta_forTwoParameterOfMethod() {
32+
// given
33+
var content = List.of(1, 2, 3);
34+
var page = new PageImpl<>(content, PageRequest.of(2, 5), 15);
35+
Function<Integer, String> converter = Object::toString;
36+
37+
// when
38+
var pagedResponse = PagedResponse.of(page, converter);
39+
40+
// then
41+
assertThat(pagedResponse).isNotNull();
42+
assertThat(pagedResponse.data()).isEqualTo(List.of("1", "2", "3"));
43+
assertThat(pagedResponse.meta().pagination().page()).isEqualTo(2);
44+
assertThat(pagedResponse.meta().pagination().size()).isEqualTo(5);
45+
assertThat(pagedResponse.meta().pagination().totalElements()).isEqualTo(15);
46+
}
47+
48+
@Test
49+
void shouldHandleEmptyPageCorrectly() {
50+
// given
51+
var page = new PageImpl<>(List.of(), PageRequest.of(0, 10), 0);
52+
53+
// when
54+
var pagedResponse = PagedResponse.of(page);
55+
56+
// then
57+
assertThat(pagedResponse).isNotNull();
58+
assertThat(pagedResponse.data()).isEmpty();
59+
assertThat(pagedResponse.meta().pagination().page()).isZero();
60+
assertThat(pagedResponse.meta().pagination().size()).isEqualTo(10);
61+
assertThat(pagedResponse.meta().pagination().totalElements()).isZero();
62+
}
63+
64+
@Test
65+
void shouldHandlePageWithCustomConverterCorrectly() {
66+
// given
67+
var content = List.of(10, 20, 30);
68+
var page = new PageImpl<>(content, PageRequest.of(3, 3), 24);
69+
Function<Integer, String> converter = val -> "Value-" + val;
70+
71+
// when
72+
var pagedResponse = PagedResponse.of(page, converter);
73+
74+
// then
75+
assertThat(pagedResponse).isNotNull();
76+
assertThat(pagedResponse.data()).isEqualTo(List.of("Value-10", "Value-20", "Value-30"));
77+
assertThat(pagedResponse.meta().pagination().page()).isEqualTo(3);
78+
assertThat(pagedResponse.meta().pagination().size()).isEqualTo(3);
79+
assertThat(pagedResponse.meta().pagination().totalElements()).isEqualTo(24);
80+
}
81+
82+
@Test
83+
void shouldHandleEmptyPageWithCustomConverterCorrectly() {
84+
// given
85+
var page = new PageImpl<Integer>(List.of(), PageRequest.of(2, 4), 0);
86+
Function<Integer, String> converter = val -> "Value-" + val;
87+
88+
// when
89+
var pagedResponse = PagedResponse.of(page, converter);
90+
91+
// then
92+
assertThat(pagedResponse).isNotNull();
93+
assertThat(pagedResponse.data()).isEmpty();
94+
assertThat(pagedResponse.meta().pagination().page()).isEqualTo(2);
95+
assertThat(pagedResponse.meta().pagination().size()).isEqualTo(4);
96+
assertThat(pagedResponse.meta().pagination().totalElements()).isZero();
97+
}
98+
}

0 commit comments

Comments
 (0)