/* * (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.assertFalse; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.Date; import java.util.List; import org.junit.After; import org.junit.Test; import org.nuxeo.functionaltests.AbstractTest; import org.nuxeo.functionaltests.forms.AddToCollectionForm; import org.nuxeo.functionaltests.pages.CollectionsPage; import org.nuxeo.functionaltests.pages.DocumentBasePage; import org.nuxeo.functionaltests.pages.DocumentBasePage.UserNotConnectedException; import org.nuxeo.functionaltests.pages.FileDocumentBasePage; import org.nuxeo.functionaltests.pages.NavigationSubPage; import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UsersGroupsBasePage; import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UsersTabSubPage; import org.nuxeo.functionaltests.pages.tabs.AccessRightsSubPage; import org.nuxeo.functionaltests.pages.tabs.CollectionContentTabSubPage; import org.nuxeo.functionaltests.pages.tabs.ContentTabSubPage; import org.nuxeo.functionaltests.pages.tabs.ManageTabSubPage; import org.nuxeo.functionaltests.pages.tabs.SummaryTabSubPage; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; /** * Test Collection feature. * * @since 5.9.3 */ public class ITCollectionsTest extends AbstractTest { private final static String WORKSPACE_TITLE = "WorkspaceTitle_" + new Date().getTime(); public final static String TEST_FILE_NAME = "test1"; public final static String TEST_FILE_NAME2 = "test2"; public final static String COLLECTION_NAME_1 = "Collection1"; public final static String COLLECTION_DESSCRIPTION_1 = "My first collection"; public final static String COLLECTION_NAME_2 = "Collection2"; private static final String COLLECTION_DESSCRIPTION_2 = "My second collection"; private static final String CAN_COLLECT_RIGHT = "Can Collect"; public static final String MY_COLLECTIONS_FR_LABEL = "Mes Collections"; public static final String MY_COLLECTIONS_EN_LABEL = "My Collections"; public static final String MY_FAVORITES_FR_LABEL = "Mes Favoris"; public static final String MY_FAVORITES_EN_LABEL = "My Favorites"; @After public void tearDown() throws UserNotConnectedException { DocumentBasePage documentBasePage = login(); UsersTabSubPage usersTab = documentBasePage.getAdminCenter().getUsersGroupsHomePage().getUsersTab(); usersTab = usersTab.searchUser(TEST_USERNAME); if (usersTab.isUserFound(TEST_USERNAME)) { usersTab = usersTab.viewUser(TEST_USERNAME).deleteUser(); documentBasePage = usersTab.exitAdminCenter().getHeaderLinks().getNavigationSubPage().goToDocument( "Workspaces"); } ContentTabSubPage contentTabSubPage = documentBasePage.swithToPersonalWorkspace().getContentTab(); contentTabSubPage = contentTabSubPage.removeAllDocuments(); ManageTabSubPage manageTabSubPage = contentTabSubPage.getManageTab(); manageTabSubPage.getTrashSubTab().purgeAllDocuments(); logout(); } @Test public void testAddDocumentToCollectionAndRemove() throws UserNotConnectedException, IOException { DocumentBasePage documentBasePage = login(); // Check we can not add Domain to a collection assertFalse(documentBasePage.isAddToCollectionUpperActionAvailable()); // Create test File DocumentBasePage workspacePage = createWorkspace(documentBasePage, WORKSPACE_TITLE, null); FileDocumentBasePage fileDocumentBasePage = createFile(workspacePage, TEST_FILE_NAME, "Test File description", false, null, null, null); // Check that collection widget summary is not displayed SummaryTabSubPage summaryTabSubPage = fileDocumentBasePage.getSummaryTab(); assertFalse(summaryTabSubPage.isCollectionsFormDisplayed()); // Simple add to collection AddToCollectionForm addToCollectionForm = fileDocumentBasePage.getAddToCollectionPopup(); addToCollectionForm.setCollection(COLLECTION_NAME_1); addToCollectionForm.setNewDescription(COLLECTION_DESSCRIPTION_1); fileDocumentBasePage = addToCollectionForm.add(FileDocumentBasePage.class); // Check that collection widget summary is displayed summaryTabSubPage = fileDocumentBasePage.getSummaryTab(); assertTrue(summaryTabSubPage.isCollectionsFormDisplayed()); assertEquals(1, summaryTabSubPage.getCollectionCount()); workspacePage = fileDocumentBasePage.getNavigationSubPage().goToDocument( WORKSPACE_TITLE); fileDocumentBasePage = createFile(workspacePage, TEST_FILE_NAME2, "Test File description", false, null, null, null); addToCollectionForm = fileDocumentBasePage.getAddToCollectionPopup(); addToCollectionForm.setCollection(COLLECTION_NAME_1); assertFalse(addToCollectionForm.isNewDescriptionVisible()); assertTrue(addToCollectionForm.isExistingDescriptionVisible()); assertEquals(COLLECTION_DESSCRIPTION_1, addToCollectionForm.getExistingDescription()); fileDocumentBasePage = addToCollectionForm.add(FileDocumentBasePage.class); // Multiple add to collection ContentTabSubPage workspaceContentTab = fileDocumentBasePage.getNavigationSubPage().goToDocument( WORKSPACE_TITLE).getContentTab(); workspaceContentTab.selectDocumentByIndex(0, 1); addToCollectionForm = workspaceContentTab.getAddAllToCollectionPopup(); addToCollectionForm.setCollection(COLLECTION_NAME_2); assertTrue(addToCollectionForm.isNewDescriptionVisible()); addToCollectionForm.setNewDescription(COLLECTION_DESSCRIPTION_2); workspaceContentTab = addToCollectionForm.addAll(ContentTabSubPage.class); // Check Collections section in HOME CollectionsPage collectionsPage = fileDocumentBasePage.goToHomePage().goToCollections(); List<String> collectionNames = collectionsPage.getCollectionNames(); assertEquals(2, collectionNames.size()); assertEquals(COLLECTION_NAME_1, collectionNames.get(0)); assertEquals(COLLECTION_NAME_2, collectionNames.get(1)); ContentTabSubPage contentTabSubPage = workspaceContentTab.swithToPersonalWorkspace().getContentTab(); // Check Collection are stored in Personal Workspace List<WebElement> personalWorkspaceRootDocs = contentTabSubPage.getChildDocumentRows(); assertEquals(2, personalWorkspaceRootDocs.size()); final String myCollectionsDocName = personalWorkspaceRootDocs.get(0).findElement( By.xpath("td[3]")).getText(); boolean isFrench = MY_COLLECTIONS_FR_LABEL.equals(myCollectionsDocName); boolean isEnglish = MY_COLLECTIONS_EN_LABEL.equals(myCollectionsDocName); assertTrue(isEnglish || isFrench); final String myFavoritesDocName = personalWorkspaceRootDocs.get(1).findElement( By.xpath("td[3]")).getText(); assertEquals(isEnglish ? MY_FAVORITES_EN_LABEL : MY_FAVORITES_FR_LABEL, myFavoritesDocName); contentTabSubPage.swithToDocumentBase(); CollectionContentTabSubPage collectionContentTabSubPage = contentTabSubPage.goToHomePage().goToCollections().gotToCollection( COLLECTION_NAME_1); assertEquals(2, collectionContentTabSubPage.getChildDocumentRows().size()); collectionContentTabSubPage = collectionContentTabSubPage.goToHomePage().goToCollections().gotToCollection( COLLECTION_NAME_2); assertEquals(2, collectionContentTabSubPage.getChildDocumentRows().size()); // Check copy/paste collection contentTabSubPage = collectionContentTabSubPage.swithToPersonalWorkspace().getContentTab(); contentTabSubPage = contentTabSubPage.goToDocument(isEnglish ? MY_COLLECTIONS_EN_LABEL : MY_COLLECTIONS_FR_LABEL).getContentTab(); contentTabSubPage.copyByTitle(COLLECTION_NAME_1); contentTabSubPage = contentTabSubPage.paste(); assertEquals(3, contentTabSubPage.getChildDocumentRows().size()); contentTabSubPage = contentTabSubPage.goToDocument(1).getCollectionContentTab(); assertEquals(2, contentTabSubPage.getChildDocumentRows().size()); // TODO test collection remove logout(); } @Test public void testRightsOnCollection() throws UserNotConnectedException, IOException { DocumentBasePage documentBasePage = login(); // Create test user if not exist UsersGroupsBasePage page; UsersTabSubPage usersTab = documentBasePage.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); } else { throw new IllegalStateException(String.format("user %s already exists", TEST_USERNAME)); } usersTab.searchUser(TEST_USERNAME); assertTrue(usersTab.isUserFound(TEST_USERNAME)); documentBasePage = usersTab.exitAdminCenter().getHeaderLinks().getNavigationSubPage().goToDocument( "Workspaces"); // Create 2 collections in "My Collections" container documentBasePage = documentBasePage.swithToPersonalWorkspace(); DocumentBasePage workspacePage = documentBasePage.getNavigationSubPage().goToDocument( "Administrator"); // Add a file to this collection that test user can't see FileDocumentBasePage fileDocumentBasePage = createFile(workspacePage, TEST_FILE_NAME, "Test File description", false, null, null, null); AddToCollectionForm addToCollectionForm = fileDocumentBasePage.getAddToCollectionPopup(); addToCollectionForm.setCollection(COLLECTION_NAME_2); fileDocumentBasePage = addToCollectionForm.add(FileDocumentBasePage.class); NavigationSubPage navigationSubPage = fileDocumentBasePage.getNavigationSubPage(); if (navigationSubPage.canNavigateToDocument(MY_COLLECTIONS_EN_LABEL)) { documentBasePage = fileDocumentBasePage.getNavigationSubPage().goToDocument( MY_COLLECTIONS_EN_LABEL); } else { documentBasePage = fileDocumentBasePage.getNavigationSubPage().goToDocument( MY_COLLECTIONS_FR_LABEL); } documentBasePage = createCollection(workspacePage, COLLECTION_NAME_2, COLLECTION_DESSCRIPTION_2); documentBasePage.getManageTab().getAccessRightsSubTab().grantPermissionForUser( CAN_COLLECT_RIGHT, TEST_USERNAME); logout(); // Login as test user documentBasePage = loginAsTestUser(); CollectionsPage collectionsPage = documentBasePage.goToHomePage().goToCollections(); List<String> collections = collectionsPage.getCollectionNames(); // Check that I can see the second collection but not the first one assertEquals(1, collections.size()); assertTrue(COLLECTION_NAME_2.equals(collections.get(0))); // Check that I can't see the file Admin added CollectionContentTabSubPage collectionContentTabSubPage = collectionsPage.gotToCollection(COLLECTION_NAME_2); assertEquals(0, collectionContentTabSubPage.getChildDocumentRows().size()); // Create a file in test user workspace and add it to the collection documentBasePage = collectionContentTabSubPage.swithToPersonalWorkspace(); fileDocumentBasePage = createFile(workspacePage, TEST_FILE_NAME, "Test File description", false, null, null, null); addToCollectionForm = fileDocumentBasePage.getAddToCollectionPopup(); addToCollectionForm.setCollection(COLLECTION_NAME_2); fileDocumentBasePage = addToCollectionForm.add(FileDocumentBasePage.class); // Check now the collection has one file collectionsPage = documentBasePage.goToHomePage().goToCollections(); collectionContentTabSubPage = collectionsPage.gotToCollection(COLLECTION_NAME_2); assertEquals(1, collectionContentTabSubPage.getChildDocumentRows().size()); logout(); } }