package io.delphiplatform.api.v3.bigtable.processing;

import com.google.common.collect.Lists;

import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import io.delphiplatform.api.v3.view.util.Params;

import static org.junit.jupiter.api.Assertions.assertEquals;

class PaginationServiceTest {

    private PaginationService paginationService = new PaginationService();

    @Test
    void getPage_offsetLimit() {

        List<Integer> page = paginationService.getPage(Stream.of(
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10
        ), Params.builder().offset(2).limit(3).build()).collect(Collectors.toList());

        assertEquals(3, page.size());
        assertEquals(Lists.newArrayList(3, 4, 5), page);
    }

    @Test
    void getPage_offsetGreaterThenSize() {
        List<Integer> page = paginationService.getPage(Stream.of(
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10
        ), Params.builder().offset(11).limit(3).build()).collect(Collectors.toList());

        assertEquals(0, page.size());
    }

    @Test
    void getPage_limitGreaterThenSize() {
        List<Integer> page = paginationService.getPage(Stream.of(
            1, 2, 3, 4, 5, 6, 7, 8, 9, 10
        ), Params.builder().offset(9).limit(10).build()).collect(Collectors.toList());

        assertEquals(1, page.size());
        assertEquals(Lists.newArrayList(10), page);
    }

}