package io.ebeaninternal.server.core.bootup;

import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

public class DistillPackagesTest {

  @Test
  public void when_unique_expect_all() throws Exception {

    List<String> distill = DistillPackages.distill(group("one", "two"), group("three"));
    assertThat(distill).containsExactly("one", "three", "two");
  }

  @Test
  public void when_sub_expect_distilled() throws Exception {

    List<String> distill = DistillPackages.distill(group("one", "one.sub"), group("three"));
    assertThat(distill).containsExactly("one", "three");
  }


  @Test
  public void when_sub_expect_distilled2() throws Exception {

    List<String> distill = DistillPackages.distill(group("one", "one.sub"), group("one.foo"));
    assertThat(distill).containsExactly("one");
  }

  @Test
  public void when_subDotSub_expect_distilled2() throws Exception {

    List<String> distill = DistillPackages.distill(group("one", "one.sub.me"), group("two"));
    assertThat(distill).containsExactly("one", "two");
  }

  @Test
  public void when_unordered_expect_naturalOrder() throws Exception {

    List<String> distill = DistillPackages.distill(group("z.x.y", "two"), group("one", "one.sub.me"));
    assertThat(distill).containsExactly("one", "two", "z.x.y");
  }

  List<String> group(String... packages) {
    return Arrays.asList(packages);
  }

}
