/* * (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and contributors. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser General Public License * (LGPL) version 2.1 which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-2.1.html * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * Contributors: * <a href="mailto:grenard@nuxeo.com">Guillaume</a> */ package org.nuxeo.ftest.cap; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.Date; import java.util.Map; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.nuxeo.functionaltests.AbstractTest; import org.nuxeo.functionaltests.forms.Select2WidgetElement; import org.nuxeo.functionaltests.pages.DocumentBasePage; import org.nuxeo.functionaltests.pages.DocumentBasePage.UserNotConnectedException; import org.nuxeo.functionaltests.pages.FileDocumentBasePage; import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UsersGroupsBasePage; import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UsersTabSubPage; import org.nuxeo.functionaltests.pages.search.DefaultSearchSubPage; import org.nuxeo.functionaltests.pages.search.SearchPage; import org.nuxeo.functionaltests.pages.search.SearchResultsSubPage; import org.nuxeo.functionaltests.pages.tabs.AccessRightsSubPage; import org.nuxeo.functionaltests.pages.tabs.EditTabSubPage; import org.openqa.selenium.By; /** * @since 6.0 */ public class ITSearchTabTest extends AbstractTest { private final static String WORKSPACE1_TITLE = "WorkspaceTitle1_" + new Date().getTime(); private final static String WORKSPACE2_TITLE = "WorkspaceTitle2_" + new Date().getTime(); private static final String SEARCH_PATH = "/Default domain/Workspaces/" + WORKSPACE2_TITLE; public final static String[] SUBJECTS = { "Comics", "Religion", "Education" }; public final static String COVERAGE = "France"; @Before public void setup() throws UserNotConnectedException, IOException { DocumentBasePage documentBasePage; DocumentBasePage s = login(); // Create a new user if not exist UsersGroupsBasePage page; UsersTabSubPage usersTab = s.getAdminCenter().getUsersGroupsHomePage().getUsersTab(); usersTab = usersTab.searchUser(TEST_USERNAME); if (!usersTab.isUserFound(TEST_USERNAME)) { page = usersTab.getUserCreatePage().createUser(TEST_USERNAME, TEST_USERNAME, "lastname1", "company1", "email1", TEST_PASSWORD, "members"); usersTab = page.getUsersTab(true); } // search user usersTab = usersTab.searchUser(TEST_USERNAME); assertTrue(usersTab.isUserFound(TEST_USERNAME)); // create 2 workspaces and grant all rights to the test user documentBasePage = usersTab.exitAdminCenter().getHeaderLinks().getNavigationSubPage().goToDocument( "Workspaces"); createTestWorkspace(documentBasePage, WORKSPACE1_TITLE, true); createTestWorkspace(documentBasePage, WORKSPACE2_TITLE, false); logout(); } protected void createTestWorkspace(DocumentBasePage documentBasePage, String title, boolean createTestFile) throws IOException { DocumentBasePage workspacePage = createWorkspace(documentBasePage, title, null); if (createTestFile) { AccessRightsSubPage accessRightSubTab = workspacePage.getManageTab().getAccessRightsSubTab(); // Need WriteSecurity (so in practice Manage everything) to edit a // Workspace if (!accessRightSubTab.hasPermissionForUser("Manage everything", TEST_USERNAME)) { accessRightSubTab.grantPermissionForUser("Manage everything", TEST_USERNAME); } // Create test File FileDocumentBasePage filePage = createFile(workspacePage, "Test file", "Test File description", false, null, null, null); EditTabSubPage editTabSubPage = filePage.getEditTab(); Select2WidgetElement subjectsWidget = new Select2WidgetElement( driver, driver.findElement(By.xpath("//*[@id='s2id_document_edit:nxl_dublincore:nxw_subjects_1_select2']")), true); subjectsWidget.selectValues(SUBJECTS); Select2WidgetElement coverageWidget = new Select2WidgetElement( driver, driver.findElement(By.xpath("//*[@id='s2id_document_edit:nxl_dublincore:nxw_coverage_1_select2']")), false); coverageWidget.selectValue(COVERAGE); editTabSubPage.save(); } } @Test public void testSearch() throws UserNotConnectedException, IOException { DocumentBasePage documentBasePage = loginAsTestUser(); SearchPage searchPage = documentBasePage.goToSearchPage(); SearchResultsSubPage resultPanelSubPage = searchPage.getSearchResultsSubPage(); final int nbCurrentDoc = resultPanelSubPage.getNumberOfDocumentInCurrentPage(); assertTrue(nbCurrentDoc > 1); DefaultSearchSubPage searchLayoutSubPage = searchPage.getDefaultSearch(); // Test aggregates Map<String, Integer> coverageAgg = searchLayoutSubPage.getAvailableCoverageAggregate(); assertEquals(1, coverageAgg.size()); assertEquals(new Integer(1), coverageAgg.get(COVERAGE)); Map<String, Integer> subjectsAgg = searchLayoutSubPage.getAvailableSubjectsAggregate(); assertEquals(3, subjectsAgg.size()); for (String subject : SUBJECTS) { assertEquals(new Integer(1), subjectsAgg.get(subject)); } // Select and unselect France searchPage = searchLayoutSubPage.selectCoverageAggregate(COVERAGE); resultPanelSubPage = searchPage.getSearchResultsSubPage(); assertEquals(1, resultPanelSubPage.getNumberOfDocumentInCurrentPage()); searchPage = searchLayoutSubPage.selectCoverageAggregate(COVERAGE); assertEquals(nbCurrentDoc, resultPanelSubPage.getNumberOfDocumentInCurrentPage()); // Test select path widget resultPanelSubPage = searchPage.getSearchResultsSubPage(); searchLayoutSubPage = searchPage.getDefaultSearch(); searchLayoutSubPage.selectPath(SEARCH_PATH); searchPage = searchLayoutSubPage.filter(); resultPanelSubPage = searchPage.getSearchResultsSubPage(); assertEquals(1, resultPanelSubPage.getNumberOfDocumentInCurrentPage()); searchLayoutSubPage = searchPage.getDefaultSearch(); searchLayoutSubPage.deselectPath(SEARCH_PATH); searchPage = searchLayoutSubPage.filter(); resultPanelSubPage = searchPage.getSearchResultsSubPage(); assertEquals(nbCurrentDoc, resultPanelSubPage.getNumberOfDocumentInCurrentPage()); logout(); } @After public void tearDown() throws UserNotConnectedException { UsersTabSubPage usersTab = login().getAdminCenter().getUsersGroupsHomePage().getUsersTab(); usersTab = usersTab.searchUser(TEST_USERNAME); usersTab = usersTab.viewUser(TEST_USERNAME).deleteUser(); DocumentBasePage documentBasePage = usersTab.exitAdminCenter().getHeaderLinks().getNavigationSubPage().goToDocument( "Workspaces"); deleteWorkspace(documentBasePage, WORKSPACE1_TITLE); deleteWorkspace(documentBasePage, WORKSPACE2_TITLE); logout(); } }