package com.taskadapter.redmineapi;
import com.taskadapter.redmineapi.bean.Group;
import com.taskadapter.redmineapi.bean.GroupFactory;
import com.taskadapter.redmineapi.bean.Membership;
import com.taskadapter.redmineapi.bean.MembershipFactory;
import com.taskadapter.redmineapi.bean.Project;
import com.taskadapter.redmineapi.bean.Role;
import com.taskadapter.redmineapi.bean.User;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import static org.assertj.core.api.Assertions.assertThat;
public class MembershipManagerIT {
private static RedmineManager mgr;
private static UserManager userManager;
private static MembershipManager membershipManager;
private static Project project;
@BeforeClass
public static void oneTimeSetup() {
mgr = IntegrationTestHelper.createRedmineManager();
membershipManager = mgr.getMembershipManager();
userManager = mgr.getUserManager();
try {
project = IntegrationTestHelper.createAndReturnProject(mgr.getProjectManager());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@AfterClass
public static void oneTimeTearDown() {
IntegrationTestHelper.deleteProject(mgr, project.getIdentifier());
}
@Test
public void membershipCanBeSetForUsers() throws RedmineException {
final List<Role> roles = userManager.getRoles();
final User user = UserGenerator.generateRandomUser();
User createdUser = mgr.getUserManager().createUser(user);
try {
membershipManager.createMembershipForUser(project.getId(), createdUser.getId(), roles);
final User userWithMembership = userManager.getUserById(createdUser.getId());
assertThat(userWithMembership.getMemberships()).isNotEmpty();
} finally {
userManager.deleteUser(createdUser.getId());
}
}
@Test
public void membershipCanBeSetForGroups() throws RedmineException {
final List<Role> roles = userManager.getRoles();
final Collection<Role> rolesToSet = Arrays.asList(roles.get(0));
final Group group = GroupFactory.create("group" + new Random().nextDouble());
Group createdGroup = null;
try {
createdGroup = mgr.getUserManager().createGroup(group);
Membership newMembership = membershipManager
.createMembershipForGroup(project.getId(), createdGroup.getId(), rolesToSet);
List<Membership> memberships = membershipManager.getMemberships(project.getIdentifier());
assertThat(memberships).contains(newMembership);
Integer memberGroupId = newMembership.getGroupId();
assertThat(memberGroupId).isNotNull();
assertThat(memberGroupId).isEqualTo(createdGroup.getId());
} finally {
mgr.getUserManager().deleteGroup(createdGroup);
}
}
@Test
public void extraRolesRemovedFromMembership() throws RedmineException {
final List<Role> roles = mgr.getUserManager().getRoles();
final User currentUser = mgr.getUserManager().getCurrentUser();
final int totalRoles = roles.size();
final Membership membership = membershipManager.createMembershipForUser(project.getId(),
currentUser.getId(), roles);
assertThat(membership.getRoles().size()).isEqualTo(totalRoles);
final Membership membershipWithOnlyOneRole = MembershipFactory.create(membership.getId());
membershipWithOnlyOneRole.setProject(membership.getProject());
membershipWithOnlyOneRole.setUserId(membership.getUserId());
membershipWithOnlyOneRole.addRoles(Collections.singletonList(roles.get(0)));
membershipManager.update(membershipWithOnlyOneRole);
final Membership updatedEmptyMembership = membershipManager.getMembership(membership.getId());
assertThat(updatedEmptyMembership.getRoles().size()).isEqualTo(1);
membershipManager.delete(membership);
}
@Test
public void membershipsLoadedByProjectStringKey() throws RedmineException {
final List<Role> roles = mgr.getUserManager().getRoles();
final User currentUser = mgr.getUserManager().getCurrentUser();
final Membership membershipForUser = membershipManager.createMembershipForUser(project.getId(), currentUser.getId(), roles);
final List<Membership> memberships = membershipManager.getMemberships(project.getIdentifier());
verifyMemberships(roles, currentUser, memberships);
membershipManager.delete(membershipForUser);
}
@Test
public void membershipsLoadedByProjectId() throws RedmineException {
final List<Role> roles = mgr.getUserManager().getRoles();
final User currentUser = mgr.getUserManager().getCurrentUser();
final Membership membershipForUser = membershipManager.createMembershipForUser(project.getId(), currentUser.getId(), roles);
final List<Membership> memberships = membershipManager.getMemberships(project.getId());
verifyMemberships(roles, currentUser, memberships);
membershipManager.delete(membershipForUser);
}
@Test
public void membershipsContainUserName() throws RedmineException {
final List<Role> roles = mgr.getUserManager().getRoles();
final User currentUser = mgr.getUserManager().getCurrentUser();
final Membership membershipForUser = membershipManager.createMembershipForUser(project.getId(), currentUser.getId(), roles);
final List<Membership> memberships = membershipManager.getMemberships(project.getId());
assertThat(memberships.get(0).getUserName()).isEqualTo(currentUser.getFullName());
membershipManager.delete(membershipForUser);
}
@Test
public void membershipsContainGoupName() throws RedmineException {
final List<Role> roles = mgr.getUserManager().getRoles();
final Group group = GroupFactory.create("group" + new Random().nextDouble());
Group createdGroup = null;
try {
createdGroup = mgr.getUserManager().createGroup(group);
Membership newMembership = membershipManager
.createMembershipForGroup(project.getId(), createdGroup.getId(), roles);
List<Membership> memberships = membershipManager.getMemberships(project.getIdentifier());
assertThat(memberships.get(0).getGroupName()).isEqualTo(createdGroup.getName());
} finally {
mgr.getUserManager().deleteGroup(createdGroup);
}
}
private void verifyMemberships(List<Role> roles, User currentUser, List<Membership> memberships) throws RedmineException {
assertThat(memberships.size()).isEqualTo(1);
final Membership membership = memberships.get(0);
assertThat(membership.getUserId()).isEqualTo(currentUser.getId());
assertThat(membership.getRoles().size()).isEqualTo(roles.size());
final Membership membershipById = membershipManager.getMembership(membership.getId());
assertThat(membershipById).isEqualTo(membership);
}
}