package com.codepoetics.protonpack;

import org.junit.Test;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static org.junit.Assert.assertEquals;

public class OptionalTest {

    @Test
    public void
    stream_of_nonempty_optionals() {
        Stream<Integer> numbers = Stream.of(123, 456);
        Stream<Integer> results = numbers.flatMap(n -> StreamUtils.stream(maybeAdd3(n)));
        List<Integer> resultList = results.collect(Collectors.toList());
        assertEquals(Arrays.asList(126, 459), resultList);
    }

    @Test
    public void
    stream_of_empty_optionals() {
        Stream<String> names = Stream.of("John", "Susan");
        Stream<String> transformed = names.flatMap(s -> StreamUtils.stream(Optional.empty()));
        List<String> results = transformed.collect(Collectors.toList());
        assertEquals(Collections.emptyList(), results);
    }

    private Optional<Integer> maybeAdd3(final Integer number) {
        return Optional.of(number + 3);
    }

}