/*
* (C) Copyright 2016 Nuxeo SA (http://nuxeo.com/) and others.
*
* 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.
*
* Contributors:
* Anahide Tchertchian
* Yannis JULIENNE
*/
package org.nuxeo.ftest.cap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.nuxeo.ftest.cap.TestConstants.TEST_NOTE_TITLE;
import static org.nuxeo.ftest.cap.TestConstants.TEST_SECTION_TITLE;
import static org.nuxeo.ftest.cap.TestConstants.TEST_WORKSPACE_PATH;
import static org.nuxeo.ftest.cap.TestConstants.TEST_WORKSPACE_TITLE;
import static org.nuxeo.functionaltests.Constants.NOTE_TYPE;
import static org.nuxeo.functionaltests.Constants.SECTIONS_PATH;
import static org.nuxeo.functionaltests.Constants.SECTIONS_TITLE;
import static org.nuxeo.functionaltests.Constants.SECTION_TYPE;
import static org.nuxeo.functionaltests.Constants.TEMPLATES_TITLE;
import static org.nuxeo.functionaltests.Constants.WORKSPACES_PATH;
import static org.nuxeo.functionaltests.Constants.WORKSPACES_TITLE;
import static org.nuxeo.functionaltests.Constants.WORKSPACE_TYPE;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.nuxeo.functionaltests.AbstractTest;
import org.nuxeo.functionaltests.Locator;
import org.nuxeo.functionaltests.RestHelper;
import org.nuxeo.functionaltests.pages.DocumentBasePage;
import org.nuxeo.functionaltests.pages.DocumentBasePage.UserNotConnectedException;
import org.nuxeo.functionaltests.pages.HomePage;
import org.nuxeo.functionaltests.pages.NoteDocumentBasePage;
import org.nuxeo.functionaltests.pages.UsersGroupsHomePage;
import org.nuxeo.functionaltests.pages.admincenter.usermanagement.GroupEditFormPage;
import org.nuxeo.functionaltests.pages.admincenter.usermanagement.GroupViewTabSubPage;
import org.nuxeo.functionaltests.pages.admincenter.usermanagement.GroupsTabSubPage;
import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UserCreationFormPage;
import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UserViewTabSubPage;
import org.nuxeo.functionaltests.pages.admincenter.usermanagement.UsersTabSubPage;
import org.nuxeo.functionaltests.pages.tabs.CommentsTabSubPage;
import org.nuxeo.functionaltests.pages.tabs.HistoryTabSubPage;
import org.nuxeo.functionaltests.pages.tabs.RelationTabSubPage;
import org.nuxeo.functionaltests.pages.tabs.SectionContentTabSubPage;
import org.nuxeo.functionaltests.pages.workspace.WorkspaceHomePage;
import org.nuxeo.functionaltests.pages.workspace.WorkspaceRepositoryPage;
import org.openqa.selenium.By;
/**
* Users & Groups search & rights tests.
*
* @since 8.3
*/
public class ITUsersGroupsTest extends AbstractTest {
@Before
public void before() throws UserNotConnectedException {
RestHelper.createUser("jdoe", "jdoe1", "John", "Doe", "Nuxeo", "dev@null", null);
RestHelper.createUser("jsmith", "jsmith1", "Jim", "Smith", "Nuxeo", "dev@null", null);
RestHelper.createUser("bree", "bree1", "Bree", "Van de Kaamp", "Nuxeo", "dev@null", null);
RestHelper.createUser("gabrielle", "gabrielle1", "Gabrielle", "Solis", "Nuxeo", "dev@null", null);
RestHelper.createGroup("Johns", "Johns group", new String[] { "jdoe", "jsmith", "bree" }, null);
RestHelper.createDocument(WORKSPACES_PATH, WORKSPACE_TYPE, TEST_WORKSPACE_TITLE, null);
RestHelper.createDocument(TEST_WORKSPACE_PATH, NOTE_TYPE, TEST_NOTE_TITLE, "Test Note description");
RestHelper.createDocument(SECTIONS_PATH, SECTION_TYPE, TEST_SECTION_TITLE, null);
}
@After
public void after() throws UserNotConnectedException {
RestHelper.cleanup();
}
@Test
public void testSearchUsersGroupsFromHome() throws Exception {
UsersGroupsHomePage page = getLoginPage().login("bree", "bree1", HomePage.class).goToUsersGroupsHomePage();
UsersTabSubPage usersPage = page.getUsersTab().searchUser("j");
assertTrue(usersPage.isUserFound("jdoe"));
assertTrue(usersPage.isUserFound("jsmith"));
usersPage.searchUser("foo");
Locator.waitForTextPresent(By.id("usersListingView:users_listing"), "No user matches the entered criteria.");
GroupsTabSubPage groupsPage = asPage(UsersGroupsHomePage.class).getGroupsTab().searchGroup("j");
assertTrue(groupsPage.isGroupFound("Johns"));
groupsPage.searchGroup("foo");
Locator.waitForTextPresent(By.id("groupsListingView:groups_listing"), "No group matches the entered criteria.");
logout();
}
@Test
public void testCreateSubGroupAdmin() throws Exception {
try {
// Create sub-admins group
GroupsTabSubPage groupsTab = login().getAdminCenter().getUsersGroupsHomePage().getGroupsTab();
groupsTab = groupsTab.getGroupCreatePage()
.createGroup("sub-admins", null, new String[] { "jdoe" }, null)
.getGroupsTab(true);
assertTrue(groupsTab.searchGroup("sub-admins").isGroupFound("sub-admins"));
// Add sub-admins as sub group of administrators
GroupViewTabSubPage adminGroupViewPage = groupsTab.searchGroup("admi").viewGroup("administrators");
adminGroupViewPage = adminGroupViewPage.getEditGroupTab().setSubGroups("sub-admins").save();
Locator.waitForTextPresent(By.id("viewGroupView:viewGroup"), "sub-admins");
// Check that jdoe is member of sub-admins
adminGroupViewPage.getUsersTab().searchUser("jdo").viewUser("jdoe");
Locator.findElement(By.linkText("sub-admins"));
logout();
// Check member's rights on TEST_WORKSPACE_TITLE / TEST_NOTE_TITLE
WorkspaceRepositoryPage repository = login("jdoe", "jdoe1").goToWorkspaces().goToRepository();
Locator.waitUntilElementPresent(By.id("nxw_newDomain_form:nxw_newDomain"));
WorkspaceHomePage domainPage = repository.getContentTab()
.goToDocument("Domain")
.asPage(WorkspaceHomePage.class);
DocumentBasePage workspacesPage = domainPage.goToDocumentWorkspaces();
Locator.waitUntilElementPresent(By.id("nxw_TAB_WORKSPACE_EDIT_form:nxw_TAB_WORKSPACE_EDIT"));
Locator.waitUntilElementPresent(By.id("nxw_newWorkspace_form:nxw_newWorkspace"));
NoteDocumentBasePage notePage = workspacesPage.getContentTab()
.goToDocument(TEST_WORKSPACE_TITLE)
.getContentTab()
.goToDocument(TEST_NOTE_TITLE)
.asPage(NoteDocumentBasePage.class);
Locator.waitUntilElementPresent(By.id("nxw_TAB_PUBLISH_form:nxw_TAB_PUBLISH"));
Locator.waitUntilElementPresent(By.id("nxw_TAB_EDIT_form:nxw_TAB_EDIT"));
RelationTabSubPage relationPage = notePage.getFilesTab().getRelationTab();
Locator.waitUntilElementPresent(By.linkText("Add a New Relation"));
CommentsTabSubPage commentsPage = relationPage.getCommentsTab();
Locator.waitUntilElementPresent(By.linkText("Add a Comment"));
HistoryTabSubPage historyPage = commentsPage.getHistoryTab();
Locator.waitUntilElementPresent(By.linkText("Event Log"));
Locator.waitUntilElementPresent(By.linkText("Archived Versions"));
assertNotNull(driver.findElement(By.linkText("Archived Versions")));
// Check if jdoe can create an user or a group
UserCreationFormPage userCreatePage = historyPage.getAdminCenter()
.getUsersGroupsHomePage()
.getUsersTab()
.getUserCreatePage();
Locator.waitUntilElementPresent(By.id("createUserView:createUser:button_save"));
userCreatePage.getGroupsTab(true).getGroupCreatePage();
Locator.waitUntilElementPresent(By.id("createGroupView:createGroup:button_save"));
logout();
} finally {
RestHelper.deleteGroup("sub-admins");
}
}
@Test
public void testCreateSubGroupMember() throws Exception {
try {
// create sub-members group
GroupsTabSubPage groupsTab = login().getAdminCenter().getUsersGroupsHomePage().getGroupsTab();
groupsTab = groupsTab.getGroupCreatePage()
.createGroup("sub-members", "SubMembers", new String[] { "gabrielle" }, null)
.getGroupsTab(true);
// check sub-members group search and view
assertTrue(groupsTab.searchGroup("sub-members").isGroupFound("sub-members"));
GroupViewTabSubPage groupViewTab = groupsTab.viewGroup("sub-members");
assertEquals("sub-members", groupViewTab.getGroupName());
assertEquals("SubMembers", groupViewTab.getGroupLabel());
List<String> groupMembers = groupViewTab.getGroupMembers();
assertEquals(1, groupMembers.size());
assertTrue(groupMembers.contains("gabrielle"));
assertEquals(0, groupViewTab.getSubGroupLabels().size());
// add sub-members as sub group of members
groupsTab = groupViewTab.backToTheList();
GroupEditFormPage editGroupTab = groupsTab.searchGroup("members").viewGroup("members").getEditGroupTab();
editGroupTab.setSubGroups("sub-members");
groupViewTab = editGroupTab.save();
// check members group view
assertEquals("members", groupViewTab.getGroupName());
assertFalse(groupViewTab.getGroupMembers().contains("gabrielle"));
List<String> subGroups = groupViewTab.getSubGroupLabels();
assertEquals(1, subGroups.size());
assertTrue(subGroups.contains("SubMembers"));
// check gabrielle user view
UsersTabSubPage usersTab = groupViewTab.getUsersTab();
UserViewTabSubPage userViewTab = usersTab.searchUser("gab").viewUser("gabrielle");
List<String> userGroups = userViewTab.getGroupLabels();
assertEquals(1, userGroups.size());
assertTrue(userGroups.contains("SubMembers"));
// check gabrielle has inherited members group rights
login("gabrielle", "gabrielle1");
WorkspaceHomePage workspaceHomePage = asPage(WorkspaceHomePage.class);
assertTrue(workspaceHomePage.hasElement(By.linkText(SECTIONS_TITLE)));
assertTrue(workspaceHomePage.hasElement(By.linkText(TEMPLATES_TITLE)));
assertTrue(workspaceHomePage.hasElement(By.linkText(WORKSPACES_TITLE)));
DocumentBasePage workspacesPage = workspaceHomePage.goToDocumentWorkspaces();
// on test workspace
DocumentBasePage testWorkspacePage = workspacesPage.getContentTab().goToDocument(TEST_WORKSPACE_TITLE);
assertFalse(testWorkspacePage.hasNewButton(false));
assertFalse(testWorkspacePage.hasEditTab());
assertFalse(testWorkspacePage.hasNewPermissionsButton());
assertFalse(testWorkspacePage.hasManageTab());
// on test note
DocumentBasePage testNotePage = testWorkspacePage.getContentTab().goToDocument(TEST_NOTE_TITLE);
assertFalse(testNotePage.hasFilesTab());
assertFalse(testNotePage.hasNewRelationLink());
assertFalse(testNotePage.hasEditTab());
assertFalse(testNotePage.hasNewPermissionsButton());
assertFalse(testNotePage.hasManageTab());
// on test section
driver.findElementByLinkText(SECTIONS_TITLE).click();
SectionContentTabSubPage sectionsPage = asPage(SectionContentTabSubPage.class);
DocumentBasePage testSectionPage = sectionsPage.goToDocument(TEST_SECTION_TITLE);
assertFalse(testSectionPage.hasNewButton(true));
assertFalse(testSectionPage.hasEditTab());
assertFalse(testSectionPage.hasNewPermissionsButton());
assertFalse(testSectionPage.hasManageTab());
logout();
} finally {
RestHelper.deleteGroup("sub-members");
}
}
}