1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package it;
17
18 import com.atlassian.jira.nimblefunctests.annotation.JiraBuildNumberDependent;
19 import com.atlassian.jira.nimblefunctests.annotation.RestoreOnce;
20 import com.atlassian.jira.rest.client.RestClientException;
21 import com.atlassian.jira.rest.client.domain.EntityHelper;
22 import com.atlassian.jira.rest.client.domain.Project;
23 import com.atlassian.jira.rest.client.domain.ProjectRole;
24 import com.atlassian.jira.rest.client.domain.RoleActor;
25 import com.atlassian.jira.rest.client.internal.ServerVersionConstants;
26 import com.atlassian.jira.rest.client.internal.json.TestConstants;
27 import com.google.common.base.Function;
28 import com.google.common.collect.ImmutableList;
29 import com.google.common.collect.Iterables;
30 import com.google.common.collect.Lists;
31 import org.junit.Rule;
32 import org.junit.Test;
33 import org.junit.rules.ExpectedException;
34
35 import java.net.URI;
36
37 import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
38 import static org.junit.Assert.*;
39
40 @RestoreOnce(TestConstants.DEFAULT_JIRA_DUMP_FILE)
41 public class JerseyProjectRoleRestClientTest extends AbstractJerseyRestClientTest {
42
43 private static final String ANONYMOUS_PROJECT_KEY = "ANNON";
44 private static final String RESTRICTED_PROJECT_KEY = "RST";
45
46 @Rule
47 public final ExpectedException exception = ExpectedException.none();
48
49 @JiraBuildNumberDependent(ServerVersionConstants.BN_JIRA_4_4)
50 @Test
51 public void testGetProjectRoleWithRoleKeyFromAnonymousProject() {
52 final Project anonProject = client.getProjectClient().getProject(ANONYMOUS_PROJECT_KEY, pm);
53 final ProjectRole role = client.getProjectRolesRestClient().getRole(anonProject.getSelf(), 10000l, pm);
54 assertNotNull(role);
55 assertEquals("Users", role.getName());
56 assertEquals("A project role that represents users in a project", role.getDescription());
57 final RoleActor actor = Iterables.getOnlyElement(role.getActors());
58 assertEquals("jira-users", actor.getDisplayName());
59 assertEquals("atlassian-group-role-actor", actor.getType());
60 assertEquals("jira-users", actor.getName());
61 assertEquals(jiraUri.resolve("/jira/secure/useravatar?size=small&avatarId=10083"), actor.getAvatarUri());
62 }
63
64 @JiraBuildNumberDependent(ServerVersionConstants.BN_JIRA_4_4)
65 @Test
66 public void testGetProjectRoleWithRoleKeyFromRestrictedProject() {
67 final Project restrictedProject = client.getProjectClient().getProject(RESTRICTED_PROJECT_KEY, pm);
68 final ProjectRole role = client.getProjectRolesRestClient().getRole(restrictedProject.getSelf(), 10000l, pm);
69 assertNotNull(role);
70 assertEquals("Users", role.getName());
71 assertEquals("A project role that represents users in a project", role.getDescription());
72 final RoleActor actor = Iterables.getOnlyElement(role.getActors());
73 assertEquals("Administrator", actor.getDisplayName());
74 assertEquals("atlassian-user-role-actor", actor.getType());
75 assertEquals("admin", actor.getName());
76 assertEquals(jiraUri.resolve("/jira/secure/useravatar?size=small&ownerId=admin&avatarId=10054"), actor.getAvatarUri());
77 }
78
79 @JiraBuildNumberDependent(ServerVersionConstants.BN_JIRA_4_4)
80 @Test
81 public void testGetProjectRoleWithRoleKeyFromRestrictedProjectWithoutPermission() {
82 final Project restrictedProject = client.getProjectClient().getProject(RESTRICTED_PROJECT_KEY, pm);
83 setAnonymousMode();
84 exception.expect(RestClientException.class);
85 exception.expectMessage("com.sun.jersey.api.client.UniformInterfaceException: Client response status: 404");
86 client.getProjectRolesRestClient().getRole(restrictedProject.getUri(), 10000l, pm);
87 }
88
89 @JiraBuildNumberDependent(ServerVersionConstants.BN_JIRA_4_4)
90 @Test
91 public void testGetProjectRoleWithFullURI() {
92 final Project anonProject = client.getProjectClient().getProject(ANONYMOUS_PROJECT_KEY, pm);
93 final URI roleURI = client.getProjectRolesRestClient().getRole(anonProject.getSelf(), 10000l, pm).getSelf();
94 final ProjectRole role = client.getProjectRolesRestClient().getRole(roleURI, pm);
95 assertNotNull(role);
96 assertEquals("Users", role.getName());
97 assertEquals("A project role that represents users in a project", role.getDescription());
98 final RoleActor actor = Iterables.getOnlyElement(role.getActors());
99 assertEquals("jira-users", actor.getDisplayName());
100 assertEquals("atlassian-group-role-actor", actor.getType());
101 assertEquals("jira-users", actor.getName());
102 assertEquals(jiraUri.resolve("/jira/secure/useravatar?size=small&avatarId=10083"), actor.getAvatarUri());
103 }
104
105 @JiraBuildNumberDependent(ServerVersionConstants.BN_JIRA_4_4)
106 @Test
107 public void testGetAllRolesForProject() {
108 final Project anonymousProject = client.getProjectClient().getProject(ANONYMOUS_PROJECT_KEY, pm);
109 final Iterable<ProjectRole> projectRoles = client.getProjectRolesRestClient().getRoles(anonymousProject.getSelf(), pm);
110 final Iterable<ProjectRole> projectRolesWithoutSelf = Iterables.transform(
111 projectRoles,
112 new Function<ProjectRole, ProjectRole>() {
113 @Override
114 public ProjectRole apply(final ProjectRole role) {
115 return new ProjectRole(role.getId(), null, role.getName(), role.getDescription(), Lists.newArrayList(role.getActors()));
116 }
117 }
118 );
119 assertThat(projectRolesWithoutSelf, containsInAnyOrder(
120 new ProjectRole(10000l, null, "Users", "A project role that represents users in a project",
121 ImmutableList.<RoleActor>of(
122 new RoleActor(10062l, "jira-users", "atlassian-group-role-actor", "jira-users",
123 jiraUri.resolve("/jira/secure/useravatar?size=small&avatarId=10083"))
124 )),
125 new ProjectRole(10001l, null, "Developers", "A project role that represents developers in a project",
126 ImmutableList.<RoleActor>of(
127 new RoleActor(10061l, "jira-developers", "atlassian-group-role-actor", "jira-developers",
128 jiraUri.resolve("/jira/secure/useravatar?size=small&avatarId=10083")),
129 new RoleActor(10063l, "My Test User", "atlassian-user-role-actor", "user",
130 jiraUri.resolve("/jira/secure/useravatar?size=small&avatarId=10082"))
131 )),
132 new ProjectRole(10002l, null, "Administrators", "A project role that represents administrators in a project",
133 ImmutableList.<RoleActor>of(
134 new RoleActor(10060l, "jira-administrators", "atlassian-group-role-actor", "jira-administrators",
135 jiraUri.resolve("/jira/secure/useravatar?size=small&avatarId=10083"))
136 ))
137 ));
138
139 assertNotNull(Iterables.find(projectRoles, new EntityHelper.AddressEndsWithPredicate("project/ANNON/role/10000")));
140 assertNotNull(Iterables.find(projectRoles, new EntityHelper.AddressEndsWithPredicate("project/ANNON/role/10001")));
141 assertNotNull(Iterables.find(projectRoles, new EntityHelper.AddressEndsWithPredicate("project/ANNON/role/10002")));
142 }
143
144 @JiraBuildNumberDependent(ServerVersionConstants.BN_JIRA_4_4)
145 @Test
146 public void testGetProjectRoleWithRoleKeyErrorCode() {
147 final Project anonProject = client.getProjectClient().getProject(ANONYMOUS_PROJECT_KEY, pm);
148 exception.expect(RestClientException.class);
149 exception.expectMessage("Can not retrieve a role actor for a null project role.");
150 client.getProjectRolesRestClient().getRole(anonProject.getSelf(), -1l, pm);
151 }
152
153 }