/*
* (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:glefevre@nuxeo.com">Gildas</a>
*/
package org.nuxeo.ftest.cap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import java.util.List;
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.FileDocumentBasePage;
import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UserViewTabSubPage;
import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UsersGroupsBasePage;
import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UsersTabSubPage;
import org.nuxeo.functionaltests.pages.search.QuickSearchSubPage;
import org.nuxeo.functionaltests.pages.search.SearchPage;
import org.nuxeo.functionaltests.pages.search.SearchResultsSubPage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
/**
* Test of the suggestbox defined with a select2.
*
* @since 6.0
*/
public class ITSuggestBoxTest extends
AbstractTest {
/**
* Use a workspace title with special characters (NXP-15618).
*/
private final static String WORKSPACE_TITLE = "#W/o=rk^s+pa>ce'~Title%"
+ new Date().getTime();
private static final String USER1_NAME = "user1";
private static final String USER2_NAME = "user2";
private static final String FILE_01_NAME = "Test01"
+ new Date().getTime();
private static final String FILE_02_NAME = "Test02"
+ new Date().getTime();
private static final String FILE_03_NAME = "Test03"
+ new Date().getTime();
private static final String XPATH_SUGGESTBOX = "//*[@id='s2id_nxw_suggest_search_box_form:nxw_suggest_search_box_select2']";
private static final String VALUE_WITH_SPECIALS_CHAR = "h\u00e9h\u00e9";
/**
* Init the data for the tests.
*
* @throws Exception
*/
protected void initTest()
throws Exception {
// Login as Administrator
DocumentBasePage defaultDomainPage = login();
// Init repository with a File and its archived versions
DocumentBasePage wsPage = createWorkspace(
defaultDomainPage,
WORKSPACE_TITLE,
"Workspace for Webdriver test.");
// Create test Files
FileDocumentBasePage file01Page = createFile(
wsPage,
FILE_01_NAME,
"Test File description",
false, null, null, null);
wsPage = file01Page.getNavigationSubPage().goToDocument(
WORKSPACE_TITLE);
FileDocumentBasePage file02Page = createFile(
wsPage,
FILE_02_NAME,
"Test File description",
false, null, null, null);
wsPage = file02Page.getNavigationSubPage().goToDocument(
WORKSPACE_TITLE);
FileDocumentBasePage file03Page = createFile(
wsPage,
FILE_03_NAME,
"Test File description",
false, null, null, null);
wsPage = file03Page.getNavigationSubPage().goToDocument(
WORKSPACE_TITLE);
// Create test users
createTestUser(USER1_NAME,
USER1_NAME);
createTestUser(USER2_NAME,
USER2_NAME);
}
protected void createTestUser(
String username, String pswd)
throws Exception {
UsersGroupsBasePage page;
UsersTabSubPage usersTab = login().getAdminCenter().getUsersGroupsHomePage().getUsersTab();
usersTab = usersTab.searchUser(username);
if (!usersTab.isUserFound(username)) {
page = usersTab.getUserCreatePage().createUser(
username, username,
"lastname1",
"company1",
"email1", pswd,
"members");
usersTab = page.getUsersTab(true);
}
// search user
usersTab = usersTab.searchUser(username);
assertTrue(usersTab.isUserFound(username));
logout();
}
@Test
public void simpleSearchTest()
throws Exception {
initTest();
// Test a simple search
login();
Select2WidgetElement searchElement = new Select2WidgetElement(
driver,
driver.findElement(By.xpath(XPATH_SUGGESTBOX)),
true);
List<WebElement> listEntries = searchElement.typeAndGetResult("Tes");
assertTrue(listEntries.size() > 0);
searchElement.clearSuggestInput();
searchElement.clickSelect2Field();
// Search for file01
listEntries = searchElement.typeAndGetResult(FILE_01_NAME);
assertTrue(listEntries.size() == 1);
listEntries.get(0).click();
// Check if the page is the detail
FileDocumentBasePage documentPage = asPage(FileDocumentBasePage.class);
documentPage.checkDocTitle(FILE_01_NAME);
// Search a user
searchElement = new Select2WidgetElement(
driver,
driver.findElement(By.xpath(XPATH_SUGGESTBOX)),
true);
listEntries = searchElement.typeAndGetResult(USER1_NAME);
assertTrue(listEntries.size() == 2);
listEntries.get(1).click();
UserViewTabSubPage userPage = asPage(UserViewTabSubPage.class);
userPage.checkUserName(USER1_NAME);
logout();
// Delete the workspace created
DocumentBasePage defaultDomainPage = login();
deleteWorkspace(defaultDomainPage, WORKSPACE_TITLE);
}
@Test
public void testSuggestBoxRedirect() throws Exception {
login();
Select2WidgetElement searchElement = new Select2WidgetElement(
driver,
driver.findElement(By.xpath(XPATH_SUGGESTBOX)),
true);
SearchPage searchPage = searchElement.typeValueAndTypeEnter("Administrator");
assertTrue(searchPage.isQuickSearch());
QuickSearchSubPage quickSearchPage = searchPage.getQuickSearch();
SearchResultsSubPage searchResultsSubPage = searchPage.getSearchResultsSubPage();
// Tests the results
assertEquals("Administrator", quickSearchPage.textSearchElement.getAttribute("value"));
assertEquals("Quick search", searchResultsSubPage.searchViewTitle.getText());
List<WebElement> listResults = searchResultsSubPage.getListResults();
assertTrue(listResults.size() > 0);
}
@Test
public void requestEncodingTest() throws Exception {
login();
Select2WidgetElement searchElement = new Select2WidgetElement(
driver,
driver.findElement(By.xpath(XPATH_SUGGESTBOX)),
true);
SearchPage searchPage = searchElement.typeValueAndTypeEnter(VALUE_WITH_SPECIALS_CHAR);
assertTrue(searchPage.isQuickSearch());
assertEquals(VALUE_WITH_SPECIALS_CHAR, searchPage.getQuickSearch().textSearchElement.getAttribute("value"));
}
}