/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.uberfire.ext.security.management.search; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import org.jboss.errai.security.shared.api.Group; import org.junit.Test; import org.uberfire.ext.security.management.api.AbstractEntityManager; import org.uberfire.ext.security.management.impl.SearchRequestImpl; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class GroupsRuntimeSearchEngineTest { GroupsRuntimeSearchEngine searchEngine = new GroupsRuntimeSearchEngine(); @Test(expected = RuntimeException.class) public void testSearchPageZero() { List<Group> groups = new ArrayList<Group>(1); // First page cannot be 0. AbstractEntityManager.SearchRequest request = new SearchRequestImpl("", 0, 5); AbstractEntityManager.SearchResponse<Group> response = searchEngine.search(groups, request); } @Test public void testSearchAll() { List<Group> groups = createTestGroups("group", 20); // First page. AbstractEntityManager.SearchRequest request = new SearchRequestImpl("", 1, 5); AbstractEntityManager.SearchResponse<Group> response = searchEngine.search(groups, request); assertNotNull(response); int total = response.getTotal(); assertEquals(total, 20); boolean hasNextPage = response.hasNextPage(); assertEquals(hasNextPage, true); List<Group> results = response.getResults(); assertEquals(results.size(), 5); Group g = results.get(0); assertEquals("group0", g.getName()); Group g4 = results.get(4); assertEquals("group4", g4.getName()); // Last page. request = new SearchRequestImpl("", 4, 5); response = searchEngine.search(groups, request); assertNotNull(response); total = response.getTotal(); assertEquals(total, 20); hasNextPage = response.hasNextPage(); assertEquals(hasNextPage, false); results = response.getResults(); assertEquals(results.size(), 5); Group g15 = results.get(0); assertEquals("group15", g15.getName()); Group g19 = results.get(4); assertEquals("group19", g19.getName()); } @Test public void testSearchSingle() { List<Group> groups = createTestGroups("group", 20); AbstractEntityManager.SearchRequest request = new SearchRequestImpl("group18", 1, 5); AbstractEntityManager.SearchResponse<Group> response = searchEngine.search(groups, request); assertNotNull(response); int total = response.getTotal(); assertEquals(total, 1); boolean hasNextPage = response.hasNextPage(); assertEquals(hasNextPage, false); List<Group> results = response.getResults(); assertEquals(results.size(), 1); Group g = results.get(0); assertEquals("group18", g.getName()); } @Test public void testSearchMultiple() { List<Group> groups = createTestGroups("group", 20); // First page. AbstractEntityManager.SearchRequest request = new SearchRequestImpl("group1", 1, 5); AbstractEntityManager.SearchResponse<Group> response = searchEngine.search(groups, request); assertNotNull(response); int total = response.getTotal(); assertEquals(total, 11); boolean hasNextPage = response.hasNextPage(); assertEquals(hasNextPage, true); List<Group> results = response.getResults(); assertEquals(results.size(), 5); Group g0 = results.get(0); assertEquals("group1", g0.getName()); Group g10 = results.get(1); assertEquals("group10", g10.getName()); Group g13 = results.get(4); assertEquals("group13", g13.getName()); // Second page. request = new SearchRequestImpl("group1", 2, 5); response = searchEngine.search(groups, request); assertNotNull(response); total = response.getTotal(); assertEquals(total, 11); hasNextPage = response.hasNextPage(); assertEquals(hasNextPage, true); results = response.getResults(); assertEquals(results.size(), 5); Group g14 = results.get(0); assertEquals("group14", g14.getName()); Group g15 = results.get(1); assertEquals("group15", g15.getName()); Group g18 = results.get(4); assertEquals("group18", g18.getName()); // Third page. request = new SearchRequestImpl("group1", 3, 5); response = searchEngine.search(groups, request); assertNotNull(response); total = response.getTotal(); assertEquals(total, 11); hasNextPage = response.hasNextPage(); assertEquals(hasNextPage, false); results = response.getResults(); assertEquals(results.size(), 1); Group g19 = results.get(0); assertEquals("group19", g19.getName()); } private List<Group> createTestGroups(String namePrefix, int size) { List<Group> groups = new LinkedList<Group>(); for (int x = 0; x < size; x++) { Group group = mock(Group.class); when(group.getName()).thenReturn(namePrefix + x); groups.add(group); } return groups; } }