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.nimblefunctests.annotation.JiraBuildNumberDependent;
21  import com.atlassian.jira.nimblefunctests.annotation.RestoreOnce;
22  import com.atlassian.jira.rest.client.ExpandableProperty;
23  import com.atlassian.jira.rest.client.IntegrationTestUtil;
24  import com.atlassian.jira.rest.client.TestUtil;
25  import com.atlassian.jira.rest.client.domain.User;
26  import com.atlassian.jira.rest.client.internal.json.TestConstants;
27  import com.google.common.collect.ImmutableList;
28  import org.codehaus.jettison.json.JSONException;
29  import org.junit.Test;
30  
31  import javax.ws.rs.core.Response;
32  
33  import static com.atlassian.jira.rest.client.IntegrationTestUtil.USER_SLASH;
34  import static com.atlassian.jira.rest.client.IntegrationTestUtil.USER_SLASH_LATEST;
35  import static com.atlassian.jira.rest.client.internal.ServerVersionConstants.BN_JIRA_4_3;
36  import static com.atlassian.jira.rest.client.internal.json.TestConstants.ADMIN_USERNAME;
37  import static org.junit.Assert.*;
38  
39  @RestoreOnce(TestConstants.DEFAULT_JIRA_DUMP_FILE)
40  public class JerseyUserRestClientTest extends AbstractJerseyRestClientTest {
41  
42      @Test
43      public void testGetUser() throws JSONException {
44  		final User user = client.getUserClient().getUser(ADMIN_USERNAME, pm);
45  		assertEquals("wojciech.seliga@spartez.com", user.getEmailAddress());
46  		assertEquals("admin", user.getName());
47  		assertEquals("Administrator", user.getDisplayName());
48  		assertEquals(new ExpandableProperty<String>(3, ImmutableList.of("jira-administrators", "jira-developers", "jira-users")), user.getGroups());
49  		assertEquals(IntegrationTestUtil.USER_ADMIN_LATEST.getSelf(), user.getSelf());
50  		assertTrue(user.getAvatarUri().toString().contains("ownerId=" + user.getName()));
51  
52  		final User user2 = client.getUserClient().getUser(TestConstants.USER1_USERNAME, pm);
53  		assertEquals(new ExpandableProperty<String>(ImmutableList.of("jira-users")), user2.getGroups());
54      }
55  
56  	@Test
57  	public void testGetUserWithSlash() {
58  		final User user = client.getUserClient().getUser(USER_SLASH.getName(), pm);
59  		assertEquals(USER_SLASH_LATEST.getSelf(), user.getSelf());
60  		assertEquals(USER_SLASH_LATEST.getDisplayName(), user.getDisplayName());
61  	}
62  
63  	@Test
64  	public void testGetNonExistingUser() {
65  		final String username = "same-fake-user-which-does-not-exist";
66  		TestUtil.assertErrorCode(Response.Status.NOT_FOUND, "The user named '" + username + "' does not exist",
67  				new Runnable() {
68  			@Override
69  			public void run() {
70  				client.getUserClient().getUser(username, pm);
71  			}
72  		});
73  	}
74  
75  	@Test
76  	public void testGetUserAnonymously() {
77  		TestUtil.assertErrorCode(Response.Status.UNAUTHORIZED, new Runnable() {
78  			@Override
79  			public void run() {
80  				setAnonymousMode();
81  				client.getUserClient().getUser(TestConstants.USER1_USERNAME, pm);
82  			}
83  		});
84  
85  	}
86  
87  	// Email Visibility is respected in REST since 4.3
88  	@JiraBuildNumberDependent(BN_JIRA_4_3)
89  	@Test
90  	public void testGetUserWhenEmailVisibilityIsHidden() throws JSONException {
91  		administration.generalConfiguration().setUserEmailVisibility(GeneralConfiguration.EmailVisibility.HIDDEN);
92  
93  		try {
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
99  					.of("jira-administrators", "jira-developers", "jira-users")), user.getGroups());
100 			assertEquals(IntegrationTestUtil.USER_ADMIN_LATEST.getSelf(), user.getSelf());
101 			assertTrue(user.getAvatarUri().toString().contains("ownerId=" + user.getName()));
102 
103 			final User user2 = client.getUserClient().getUser(TestConstants.USER1_USERNAME, pm);
104 			assertEquals(new ExpandableProperty<String>(ImmutableList.of("jira-users")), user2.getGroups());
105 
106 		} finally {
107 			// Restore e-mail visibility configuration
108 			administration.generalConfiguration().setUserEmailVisibility(GeneralConfiguration.EmailVisibility.PUBLIC);
109 		}
110 	}
111 
112 	// Email Visibility is respected in REST since 4.3
113 	@JiraBuildNumberDependent(BN_JIRA_4_3)
114 	@Test
115 	public void testGetUserWhenEmailVisibilityIsMasked() throws JSONException {
116 		administration.generalConfiguration().setUserEmailVisibility(GeneralConfiguration.EmailVisibility.MASKED);
117 
118 		try {
119 			final User user = client.getUserClient().getUser(ADMIN_USERNAME, pm);
120 			assertEquals("wojciech dot seliga at spartez dot com", user.getEmailAddress());
121 			assertEquals("admin", user.getName());
122 			assertEquals("Administrator", user.getDisplayName());
123 			assertEquals(new ExpandableProperty<String>(3, ImmutableList
124 					.of("jira-administrators", "jira-developers", "jira-users")), user.getGroups());
125 			assertEquals(IntegrationTestUtil.USER_ADMIN_LATEST.getSelf(), user.getSelf());
126 			assertTrue(user.getAvatarUri().toString().contains("ownerId=" + user.getName()));
127 
128 			final User user2 = client.getUserClient().getUser(TestConstants.USER1_USERNAME, pm);
129 			assertEquals(new ExpandableProperty<String>(ImmutableList.of("jira-users")), user2.getGroups());
130 		} finally {
131 			// Restore e-mail visibility configuration
132 			administration.generalConfiguration().setUserEmailVisibility(GeneralConfiguration.EmailVisibility.PUBLIC);
133 		}
134 	}
135 }