blob: 43ca3e297df1e01be0afca2c67c2565185da8b10 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2015 EclipseSource Muenchen GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Edgar Mueller - initial API and implementation
******************************************************************************/
package org.eclipse.emf.emfstore.server.accesscontrol.test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.emfstore.client.ESRemoteProject;
import org.eclipse.emf.emfstore.client.test.common.dsl.Roles;
import org.eclipse.emf.emfstore.client.test.common.util.ServerUtil;
import org.eclipse.emf.emfstore.internal.client.model.Usersession;
import org.eclipse.emf.emfstore.internal.client.model.impl.api.ESUsersessionImpl;
import org.eclipse.emf.emfstore.internal.server.core.Messages;
import org.eclipse.emf.emfstore.internal.server.model.ProjectId;
import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.ACOrgUnitId;
import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles.ProjectAdminRole;
import org.eclipse.emf.emfstore.internal.server.model.accesscontrol.roles.Role;
import org.eclipse.emf.emfstore.internal.server.model.impl.api.ESGlobalProjectIdImpl;
import org.eclipse.emf.emfstore.server.auth.ESProjectAdminPrivileges;
import org.eclipse.emf.emfstore.server.exceptions.ESException;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
/**
* Specification for testing the {@link org.eclipse.emf.emfstore.internal.server.AdminEmfStore#addInitialParticipant
* AdminEmfStore#addInitialParticipant} server call.
*
* @author emueller
*
*/
public class AddInitialParticipantTest extends ProjectAdminTest {
// BEGIN COMPLEX CODE
// Checkstyle complains about public modifier..
@Rule
public final ExpectedException expectedException = ExpectedException.none();
// END COMPLEX CODE
@BeforeClass
public static void beforeClass() {
startEMFStoreWithPAProperties(
ESProjectAdminPrivileges.ShareProject,
ESProjectAdminPrivileges.AssignRoleToOrgUnit // needed for share
);
}
@Test(expected = ESException.class)
public void shouldThrowESExceptionWhenRequestingUserHasNoProjectAdminRole() throws ESException {
getLocalProject().shareProject(getSuperUsersession(), new NullProgressMonitor());
final Usersession session = ESUsersessionImpl.class.cast(getUsersession()).toInternalAPI();
getAdminBroker().addInitialParticipant(getProjectSpace().getProjectId(),
session.getACUser().getId(),
Roles.projectAdmin());
}
@Test
public void shouldThrowESExceptionWhenRequestingUserTriesToAssignAServerAdminRole()
throws ESException {
expectedException.expect(ESException.class);
expectedException.expectMessage(Messages.AdminEmfStoreImpl_Not_Allowed_To_Assign_ServerAdminRole);
getLocalProject().shareProject(getSuperUsersession(), new NullProgressMonitor());
final Usersession session = ESUsersessionImpl.class.cast(getUsersession()).toInternalAPI();
final ACOrgUnitId userId = session.getACUser().getId();
getSuperAdminBroker().changeRole(
getProjectSpace().getProjectId(),
userId,
Roles.projectAdmin());
getAdminBroker().addInitialParticipant(getProjectSpace().getProjectId(),
userId,
Roles.serverAdmin());
}
@Test
public void shouldThrowESExceptionIfRequestingUserDidNotShareProjectBefore()
throws ESException {
expectedException.expect(ESException.class);
expectedException.expectMessage(Messages.AdminEmfStoreImpl_IllegalRequestToAddInitialRole);
getLocalProject().shareProject(getSuperUsersession(), new NullProgressMonitor());
final Usersession session = ESUsersessionImpl.class.cast(getUsersession()).toInternalAPI();
final ACOrgUnitId userId = session.getACUser().getId();
getSuperAdminBroker().changeRole(
getProjectSpace().getProjectId(),
userId,
Roles.projectAdmin());
getAdminBroker().addInitialParticipant(getProjectSpace().getProjectId(),
userId,
Roles.projectAdmin());
}
@Test
public void shouldThrowESExceptionIfRequestingUserDidShareAnotherProjectBefore()
throws ESException {
expectedException.expect(ESException.class);
expectedException.expectMessage(Messages.AdminEmfStoreImpl_IllegalRequestToAddInitialRole);
final Usersession session = ESUsersessionImpl.class.cast(getUsersession()).toInternalAPI();
final ACOrgUnitId userId = session.getACUser().getId();
getSuperAdminBroker().assignRole(
userId,
Roles.projectAdmin());
final ESRemoteProject sharedProject = getLocalProject().shareProject(getUsersession(),
new NullProgressMonitor());
final ProjectId projectId = ESGlobalProjectIdImpl.class.cast(sharedProject.getGlobalProjectId())
.toInternalAPI();
getLocalProject().shareProject(getUsersession(), new NullProgressMonitor());
getAdminBroker().addInitialParticipant(
projectId,
userId,
Roles.projectAdmin());
}
@Test(expected = ESException.class)
public void shouldThrowESExceptionIfRequestingUserDidShareButHasNoProjectAdminRoleAnymore() throws ESException {
final Usersession session = ESUsersessionImpl.class.cast(getUsersession()).toInternalAPI();
final ACOrgUnitId userId = session.getACUser().getId();
getSuperAdminBroker().assignRole(
userId,
Roles.projectAdmin());
final ESRemoteProject shareProject = getLocalProject()
.shareProject(getUsersession(), new NullProgressMonitor());
final ProjectId projectId = ESGlobalProjectIdImpl.class.cast(shareProject.getGlobalProjectId()).toInternalAPI();
getSuperAdminBroker().changeRole(
getProjectSpace().getProjectId(),
userId,
Roles.writer());
getAdminBroker().addInitialParticipant(
projectId,
userId,
Roles.projectAdmin());
}
@Test
public void shouldThrowESExceptionIfRequestingUserDiffersFromUserTheRoleShouldBeAssignedTo() throws ESException {
expectedException.expect(ESException.class);
expectedException.expectMessage(Messages.AdminEmfStoreImpl_OnlyAllowedForRequstingUser);
final Usersession session = ESUsersessionImpl.class.cast(getUsersession()).toInternalAPI();
final ACOrgUnitId userId = session.getACUser().getId();
getSuperAdminBroker().assignRole(
userId,
Roles.projectAdmin());
final ESRemoteProject sharedProject = getLocalProject().shareProject(
getUsersession(),
new NullProgressMonitor());
final ProjectId projectId = ESGlobalProjectIdImpl.class.cast(
sharedProject.getGlobalProjectId())
.toInternalAPI();
final ACOrgUnitId dummyUserId = ServerUtil.createUser(
getSuperUsersession(), "dummyUser"); //$NON-NLS-1$
getAdminBroker().addInitialParticipant(
projectId,
dummyUserId,
Roles.projectAdmin());
}
@Test
public void shouldThrowExceptionIfTryingToCallMethodExplicitely() throws ESException {
expectedException.expect(ESException.class);
expectedException.expectMessage(Messages.AdminEmfStoreImpl_IllegalRequestToAddInitialRole);
final Usersession session = ESUsersessionImpl.class.cast(getUsersession()).toInternalAPI();
final ACOrgUnitId userId = session.getACUser().getId();
getSuperAdminBroker().assignRole(
userId,
Roles.projectAdmin());
final ESRemoteProject sharedProject = getLocalProject().shareProject(getUsersession(),
new NullProgressMonitor());
final ProjectId projectId = ESGlobalProjectIdImpl.class.cast(sharedProject.getGlobalProjectId())
.toInternalAPI();
getAdminBroker().addInitialParticipant(
projectId,
userId,
Roles.projectAdmin());
}
@Test
public void shouldSucceedIfAllPrerequisitesAreMet() throws ESException {
final Usersession session = ESUsersessionImpl.class.cast(getUsersession()).toInternalAPI();
final ACOrgUnitId userId = session.getACUser().getId();
getSuperAdminBroker().assignRole(
userId,
Roles.projectAdmin());
final ESRemoteProject sharedProject = getLocalProject().shareProject(
getUsersession(),
new NullProgressMonitor());
final ProjectId projectId = ESGlobalProjectIdImpl.class.cast(
sharedProject.getGlobalProjectId())
.toInternalAPI();
final Role role = getSuperAdminBroker().getRole(projectId, userId);
assertThat(role, instanceOf(ProjectAdminRole.class));
}
}