package sagan.search.support; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsIterableContainingInOrder.contains; import static org.hamcrest.core.IsEqual.equalTo; public class SpringFacetsBuilderTests { private List<SearchFacet> facets = new ArrayList<>(); private SearchFacet guides = new SearchFacet("Guides", "Guides", 1); private SearchFacet blog = new SearchFacet("Blog", "Blog", 1); private SearchFacet projects = new SearchFacet("Projects", "Projects", 1); private SearchFacet api = new SearchFacet("Projects/Api", "Api", 1); private SearchFacet reference = new SearchFacet("Projects/Reference", "Reference", 1); private SearchFacet projectPage = new SearchFacet("Projects/Homepage", "Homepage", 1); private SearchFacet springFramework = new SearchFacet("Projects/SpringFramework", "Spring Framework", 1); @Before public void setUp() throws Exception { facets.add(blog); facets.add(guides); facets.add(projects); } @Test public void createsRootFacetWithProvidedFacets() throws Exception { SearchFacet root = new SpringFacetsBuilder(facets).build(); assertThat(root.getFacets(), equalTo(facets)); assertThat(root.getName(), equalTo("")); assertThat(root.getCount(), equalTo(0)); } @Test public void addsAnEmptyBlogFacetIfNotInTheOriginalFacets() throws Exception { facets.remove(blog); SearchFacet rootFacet = new SpringFacetsBuilder(facets).build(); SearchFacet emptyBlog = new SearchFacet("Blog", "Blog", 0); assertThat(rootFacet.getFacets(), contains(emptyBlog, guides, projects)); } @Test public void addsAnEmptyGuidesFacetIfNotInTheOriginalFacets() throws Exception { facets.remove(guides); SearchFacet rootFacet = new SpringFacetsBuilder(facets).build(); SearchFacet emptyGuides = new SearchFacet("Guides", "Guides", 0); assertThat(rootFacet.getFacets(), contains(blog, emptyGuides, projects)); } @Test public void addsAnEmptyProjectsFacetIfNotInTheOriginalFacets() throws Exception { facets.remove(projects); SearchFacet rootFacet = new SpringFacetsBuilder(facets).build(); SearchFacet emptyProjects = new SearchFacet("Projects", "Projects", 0); assertThat(rootFacet.getFacets(), contains(blog, guides, emptyProjects)); } @Test public void movesProjectPageToBeAHeaderFacetUnderProjects() throws Exception { projects.getFacets().add(projectPage); projects.getFacets().add(springFramework); SearchFacet rootFacet = new SpringFacetsBuilder(facets).build(); SearchFacet projectFacet = rootFacet.getFacets().get(2); assertThat(projectFacet.getHeaderFacets(), contains(projectPage)); assertThat(projectFacet.getFacets(), contains(springFramework)); } @Test public void movesApiToBeAHeaderFacetUnderProjects() throws Exception { projects.getFacets().add(api); projects.getFacets().add(springFramework); SearchFacet rootFacet = new SpringFacetsBuilder(facets).build(); SearchFacet projectFacet = rootFacet.getFacets().get(2); assertThat(projectFacet.getHeaderFacets(), contains(api)); assertThat(projectFacet.getFacets(), contains(springFramework)); } @Test public void movesReferenceToBeAHeaderFacetUnderProjects() throws Exception { facets.add(projects); projects.getFacets().add(reference); projects.getFacets().add(springFramework); SearchFacet rootFacet = new SpringFacetsBuilder(facets).build(); SearchFacet projectFacet = rootFacet.getFacets().get(2); assertThat(projectFacet.getHeaderFacets(), contains(reference)); assertThat(projectFacet.getFacets(), contains(springFramework)); } }