1   /*
2    * Copyright (C) 2010 Atlassian
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  package it;
18  
19  import com.atlassian.jira.functest.framework.admin.GeneralConfiguration;
20  import com.atlassian.jira.rest.client.ExpandableProperty;
21  import com.atlassian.jira.rest.client.IntegrationTestUtil;
22  import com.atlassian.jira.rest.client.TestUtil;
23  import com.atlassian.jira.rest.client.annotation.RestoreOnce;
24  import com.atlassian.jira.rest.client.domain.User;
25  import com.atlassian.jira.rest.client.internal.json.TestConstants;
26  import com.google.common.collect.ImmutableList;
27  import org.codehaus.jettison.json.JSONException;
28  import org.junit.Test;
29  
30  import javax.ws.rs.core.Response;
31  
32  import static com.atlassian.jira.rest.client.IntegrationTestUtil.USER_SLASH;
33  import static com.atlassian.jira.rest.client.IntegrationTestUtil.USER_SLASH_LATEST;
34  import static com.atlassian.jira.rest.client.internal.json.TestConstants.ADMIN_USERNAME;
35  import static org.junit.Assert.*;
36  
37  @RestoreOnce(TestConstants.DEFAULT_JIRA_DUMP_FILE)
38  public class JerseyUserRestClientTest extends AbstractJerseyRestClientTest {
39  
40      @Test
41      public void testGetUser() throws JSONException {
42  		final User user = client.getUserClient().getUser(ADMIN_USERNAME, pm);
43  		assertEquals("wojciech.seliga@spartez.com", user.getEmailAddress());
44  		assertEquals("admin", user.getName());
45  		assertEquals("Administrator", user.getDisplayName());
46  		assertEquals(new ExpandableProperty<String>(3, ImmutableList.of("jira-administrators", "jira-developers", "jira-users")), user.getGroups());
47  		assertEquals(IntegrationTestUtil.USER_ADMIN_LATEST.getSelf(), user.getSelf());
48  		assertTrue(user.getAvatarUri().toString().contains("ownerId=" + user.getName()));
49  
50  		final User user2 = client.getUserClient().getUser(TestConstants.USER1_USERNAME, pm);
51  		assertEquals(new ExpandableProperty<String>(ImmutableList.of("jira-users")), user2.getGroups());
52      }
53  
54  	@Test
55  	public void testGetUserWithSlash() {
56  		final User user = client.getUserClient().getUser(USER_SLASH.getName(), pm);
57  		assertEquals(USER_SLASH_LATEST.getSelf(), user.getSelf());
58  		assertEquals(USER_SLASH_LATEST.getDisplayName(), user.getDisplayName());
59  	}
60  
61  	@Test
62  	public void testGetNonExistingUser() {
63  		final String username = "same-fake-user-which-does-not-exist";
64  		TestUtil.assertErrorCode(Response.Status.NOT_FOUND, "The user named '" + username + "' does not exist",
65  				new Runnable() {
66  			@Override
67  			public void run() {
68  				client.getUserClient().getUser(username, pm);
69  			}
70  		});
71  	}
72  
73  	@Test
74  	public void testGetUserAnonymously() {
75  		TestUtil.assertErrorCode(Response.Status.UNAUTHORIZED, new Runnable() {
76  			@Override
77  			public void run() {
78  				setAnonymousMode();
79  				client.getUserClient().getUser(TestConstants.USER1_USERNAME, pm);
80  			}
81  		});
82  
83  	}
84  
85  	@Test
86  	public void testGetUserWhenEmailVisibilityIsHidden() throws JSONException {
87  		// Email Visibility is respected in REST since 4.3
88  		if (!isJira4x3OrNewer()) {
89  			return;
90  		}
91  
92  		administration.generalConfiguration().setUserEmailVisibility(GeneralConfiguration.EmailVisibility.HIDDEN);
93  
94  		final User user = client.getUserClient().getUser(ADMIN_USERNAME, pm);
95  		assertNull(user.getEmailAddress());
96  		assertEquals("admin", user.getName());
97  		assertEquals("Administrator", user.getDisplayName());
98  		assertEquals(new ExpandableProperty<String>(3, ImmutableList.of("jira-administrators", "jira-developers", "jira-users")), user.getGroups());
99  		assertEquals(IntegrationTestUtil.USER_ADMIN_LATEST.getSelf(), user.getSelf());
100 		assertTrue(user.getAvatarUri().toString().contains("ownerId=" + user.getName()));
101 
102 		final User user2 = client.getUserClient().getUser(TestConstants.USER1_USERNAME, pm);
103 		assertEquals(new ExpandableProperty<String>(ImmutableList.of("jira-users")), user2.getGroups());
104 
105 		// Restore e-mail visibility configuration
106 		administration.generalConfiguration().setUserEmailVisibility(GeneralConfiguration.EmailVisibility.PUBLIC);
107 	}
108 
109 	@Test
110 	public void testGetUserWhenEmailVisibilityIsMasked() throws JSONException {
111 		// Email Visibility is respected in REST since 4.3
112 		if (!isJira4x3OrNewer()) {
113 			return;
114 		}
115 
116 		administration.generalConfiguration().setUserEmailVisibility(GeneralConfiguration.EmailVisibility.MASKED);
117 
118 		final User user = client.getUserClient().getUser(ADMIN_USERNAME, pm);
119 		assertEquals("wojciech dot seliga at spartez dot com", user.getEmailAddress());
120 		assertEquals("admin", user.getName());
121 		assertEquals("Administrator", user.getDisplayName());
122 		assertEquals(new ExpandableProperty<String>(3, ImmutableList.of("jira-administrators", "jira-developers", "jira-users")), user.getGroups());
123 		assertEquals(IntegrationTestUtil.USER_ADMIN_LATEST.getSelf(), user.getSelf());
124 		assertTrue(user.getAvatarUri().toString().contains("ownerId=" + user.getName()));
125 
126 		final User user2 = client.getUserClient().getUser(TestConstants.USER1_USERNAME, pm);
127 		assertEquals(new ExpandableProperty<String>(ImmutableList.of("jira-users")), user2.getGroups());
128 
129 		// Restore e-mail visibility configuration
130 		administration.generalConfiguration().setUserEmailVisibility(GeneralConfiguration.EmailVisibility.PUBLIC);
131 	}
132 }