package io.sphere.sdk.facets; import org.junit.Test; import java.util.List; import static io.sphere.sdk.facets.SortedFacetOptionMapper.comparePositions; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static org.assertj.core.api.Assertions.assertThat; public class SortedFacetOptionMapperTest { private static final FacetOption OPTION_A = FacetOption.of("A", 5, false); private static final FacetOption OPTION_B = FacetOption.of("B", 10, true); private static final FacetOption OPTION_C = FacetOption.of("C", 2, true); private static final FacetOption OPTION_D = FacetOption.of("D", 7, false); private static final FacetOption OPTION_E = FacetOption.of("E", 1, true); @Test public void sortsOptionsAsGivenList() throws Exception { final List<FacetOption> sortedFacetOptions = SortedFacetOptionMapper.of(asList("A", "B", "C")) .apply(asList(OPTION_B, OPTION_A, OPTION_C)); assertThat(sortedFacetOptions).containsExactly(OPTION_A, OPTION_B, OPTION_C); } @Test public void leavesUnknownOptionsAtTheEnd() throws Exception { final List<FacetOption> sortedFacetOptions = SortedFacetOptionMapper.of(asList("A", "B", "C")) .apply(asList(OPTION_B, OPTION_D, OPTION_A, OPTION_C, OPTION_E)); assertThat(sortedFacetOptions).containsExactly(OPTION_A, OPTION_B, OPTION_C, OPTION_D, OPTION_E); } @Test public void onEmptyListKeepsSameOrder() throws Exception { final List<FacetOption> sortedFacetOptions = SortedFacetOptionMapper.of(emptyList()) .apply(asList(OPTION_B, OPTION_D, OPTION_A, OPTION_C, OPTION_E)); assertThat(sortedFacetOptions).containsExactly(OPTION_B, OPTION_D, OPTION_A, OPTION_C, OPTION_E); } @Test public void givenUnsortedFacetOptionsAreNotSorted() throws Exception { final List<FacetOption> unsortedFacetOptions = asList(OPTION_B, OPTION_A, OPTION_C); final List<FacetOption> sortedFacetOptions = SortedFacetOptionMapper.of(asList("A", "B", "C")) .apply(unsortedFacetOptions); assertThat(unsortedFacetOptions).containsExactly(OPTION_B, OPTION_A, OPTION_C); assertThat(sortedFacetOptions).containsExactly(OPTION_A, OPTION_B, OPTION_C); } @Test public void worksWithEmptyFacetOptions() throws Exception { final List<FacetOption> sortedFacetOptions = SortedFacetOptionMapper.of(asList("A", "B", "C")) .apply(emptyList()); assertThat(sortedFacetOptions).isEmpty(); } @Test public void comparisonEnsuresSymmetricRelation() throws Exception { assertThat(comparePositions(2, 3)).isEqualTo(-comparePositions(3, 2)); assertThat(comparePositions(-1, 3)).isEqualTo(-comparePositions(3, -1)); assertThat(comparePositions(3, -1)).isEqualTo(-comparePositions(-1, 3)); assertThat(comparePositions(-1, -1)).isEqualTo(-comparePositions(-1, -1)); } @Test public void comparisonEnsuresTransitiveRelation() throws Exception { assertThat(comparePositions(-1, 0)).isGreaterThan(0); assertThat(comparePositions(3, 0)).isGreaterThan(0); assertThat(comparePositions(-1, 3)).isGreaterThan(0); } }