BAEL-7283: Convert a page of objects to list in Spring Data (#15347)

This commit is contained in:
Azhwani 2023-12-17 11:48:28 +01:00 committed by GitHub
parent 64b63ab33d
commit 0b8873f03e
2 changed files with 39 additions and 7 deletions

View File

@ -1,5 +1,6 @@
package com.baeldung.spring.data.jpa.paging;
import java.util.Collections;
import java.util.List;
import org.springframework.data.domain.Page;
@ -29,6 +30,13 @@ public class CustomerService {
return new PageImpl<>(pageContent, pageRequest, allCustomers.size());
}
public List<Customer> getCustomerListFromPage(int page, int size) {
Pageable pageRequest = createPageRequestUsing(page, size);
Page<Customer> allCustomers = customerRepository.findAll(pageRequest);
return allCustomers.hasContent() ? allCustomers.getContent() : Collections.emptyList();
}
private Pageable createPageRequestUsing(int page, int size) {
return PageRequest.of(page, size);
}

View File

@ -1,14 +1,17 @@
package com.baeldung.spring.data.jpa.paging;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
@ -16,6 +19,8 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
@ExtendWith(MockitoExtension.class)
public class CustomerServiceUnitTest {
@ -46,12 +51,7 @@ public class CustomerServiceUnitTest {
private static final List<String> PAGE_4_CONTENTS = Arrays.asList("Penny", "Queen", "Rob", "Sue", "Tammy");
private static final List<String> EMPTY_PAGE = Arrays.asList();
@BeforeEach
void setup() {
when(customerRepository.findAll()).thenReturn(ALL_CUSTOMERS);
}
private static final List<String> EMPTY_PAGE = Collections.emptyList();
private static Collection<Object[]> testIO() {
return Arrays.asList(new Object[][] {
@ -66,6 +66,7 @@ public class CustomerServiceUnitTest {
@ParameterizedTest
@MethodSource("testIO")
void givenAListOfCustomers_whenGetCustomers_thenReturnsDesiredDataAlongWithPagingInformation(int page, int size, List<String> expectedNames, long expectedTotalElements, long expectedTotalPages) {
when(customerRepository.findAll()).thenReturn(ALL_CUSTOMERS);
Page<Customer> customers = customerService.getCustomers(page, size);
List<String> names = customers.getContent()
.stream()
@ -77,4 +78,27 @@ public class CustomerServiceUnitTest {
assertEquals(expectedTotalElements, customers.getTotalElements());
assertEquals(expectedTotalPages, customers.getTotalPages());
}
@Test
void givenAPageOfCustomers_whenGetCustomerList_thenReturnsList() {
Page<Customer> pagedResponse = new PageImpl<Customer>(ALL_CUSTOMERS.subList(0, 5));
when(customerRepository.findAll(any(Pageable.class))).thenReturn(pagedResponse);
List<Customer> customers = customerService.getCustomerListFromPage(0, 5);
List<String> customerNames = customers.stream()
.map(Customer::getName)
.collect(Collectors.toList());
assertEquals(PAGE_1_CONTENTS.size(), customers.size());
assertEquals(PAGE_1_CONTENTS, customerNames);
}
@Test
void givenAnEmptyPageOfCustomers_whenGetCustomerList_thenReturnsEmptyList() {
Page<Customer> emptyPage = Page.empty();
when(customerRepository.findAll(any(Pageable.class))).thenReturn(emptyPage);
List<Customer> customers = customerService.getCustomerListFromPage(0, 5);
assertThat(customers).isEmpty();
}
}