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.rest.client.TestUtil;
20  import com.atlassian.jira.rest.client.domain.BasicIssueType;
21  import com.atlassian.jira.rest.client.domain.BasicPriority;
22  import com.atlassian.jira.rest.client.domain.BasicResolution;
23  import com.atlassian.jira.rest.client.domain.BasicStatus;
24  import com.atlassian.jira.rest.client.domain.Issue;
25  import com.atlassian.jira.rest.client.domain.IssueType;
26  import com.atlassian.jira.rest.client.domain.IssuelinksType;
27  import com.atlassian.jira.rest.client.domain.Priority;
28  import com.atlassian.jira.rest.client.domain.Resolution;
29  import com.atlassian.jira.rest.client.domain.ServerInfo;
30  import com.atlassian.jira.rest.client.domain.Status;
31  import com.atlassian.jira.rest.client.domain.Transition;
32  import com.atlassian.jira.rest.client.domain.input.TransitionInput;
33  import com.google.common.collect.Iterables;
34  import org.joda.time.DateTime;
35  
36  import javax.ws.rs.core.Response;
37  
38  public class JerseyMetadataRestClientTest extends AbstractRestoringJiraStateJerseyRestClientTest {
39  	public void testGetServerInfo() throws Exception {
40  		final ServerInfo serverInfo = client.getMetadataClient().getServerInfo(pm);
41  		assertEquals("Your Company JIRA", serverInfo.getServerTitle());
42  		assertTrue(serverInfo.getBuildDate().isBeforeNow());
43  		assertTrue(serverInfo.getServerTime().isAfter(new DateTime().minusMinutes(5)));
44  		assertTrue(serverInfo.getServerTime().isBefore(new DateTime().plusMinutes(5)));
45  	}
46  
47  	public void testGetIssueTypeNonExisting() throws Exception {
48  		final BasicIssueType basicIssueType = client.getIssueClient().getIssue("TST-1", pm).getIssueType();
49  		TestUtil.assertErrorCode(Response.Status.NOT_FOUND, "The issue type with id '" +
50  				TestUtil.getLastPathSegment(basicIssueType.getSelf()) + "fake" +
51  				"' does not exist", new Runnable() {
52  			@Override
53  			public void run() {
54  				client.getMetadataClient().getIssueType(TestUtil.toUri(basicIssueType.getSelf() + "fake"), pm);
55  			}
56  		});
57  	}
58  
59  	public void testGetIssueType() {
60  		final BasicIssueType basicIssueType = client.getIssueClient().getIssue("TST-1", pm).getIssueType();
61  		final IssueType issueType = client.getMetadataClient().getIssueType(basicIssueType.getSelf(), pm);
62  		assertEquals("Bug", issueType.getName());
63  		assertEquals("A problem which impairs or prevents the functions of the product.", issueType.getDescription());
64  		assertTrue(issueType.getIconUri().toString().endsWith("bug.gif"));
65  
66  	}
67  
68  	public void testGetIssueTypes() {
69  		if (!doesJiraSupportRestIssueLinking()) {
70  			return;
71  		}
72  		final Iterable<IssuelinksType> issueTypes = client.getMetadataClient().getIssueLinkTypes(pm);
73  		assertEquals(1, Iterables.size(issueTypes));
74  		final IssuelinksType issueType = Iterables.getOnlyElement(issueTypes);
75  		assertEquals("Duplicate", issueType.getName());
76  		assertEquals("is duplicated by", issueType.getInward());
77  		assertEquals("duplicates", issueType.getOutward());
78  	}
79  
80  	public void testGetStatus() {
81  		final BasicStatus basicStatus = client.getIssueClient().getIssue("TST-1", pm).getStatus();
82  		final Status status = client.getMetadataClient().getStatus(basicStatus.getSelf(), pm);
83  		assertEquals("The issue is open and ready for the assignee to start work on it.", status.getDescription());
84  		assertTrue(status.getIconUrl().toString().endsWith("status_open.gif"));
85  		assertEquals("Open", status.getName());
86  	}
87  
88  	public void testGetStatusNonExisting() throws Exception {
89  		final BasicStatus basicStatus = client.getIssueClient().getIssue("TST-1", pm).getStatus();
90  		TestUtil.assertErrorCode(Response.Status.NOT_FOUND, "The status with id '" +
91  				TestUtil.getLastPathSegment(basicStatus.getSelf()) + "fake" +
92  				"' does not exist", new Runnable() {
93  			@Override
94  			public void run() {
95  				client.getMetadataClient().getStatus(TestUtil.toUri(basicStatus.getSelf() + "fake"), pm);
96  			}
97  		});
98  	}
99  
100 	public void testGetPriority() {
101 		final BasicPriority basicPriority = client.getIssueClient().getIssue("TST-2", pm).getPriority();
102 		final Priority priority = client.getMetadataClient().getPriority(basicPriority.getSelf(), pm);
103 		assertEquals(basicPriority.getSelf(), priority.getSelf());
104 		assertEquals("Major", priority.getName());
105 		assertEquals("#009900", priority.getStatusColor());
106 		assertEquals("Major loss of function.", priority.getDescription());
107 		assertTrue(priority.getIconUri().toString().startsWith(jiraUri.toString()));
108 		assertTrue(priority.getIconUri().toString().endsWith("/images/icons/priority_major.gif"));
109 
110 	}
111 
112 
113 	public void testGetResolution() {
114 		final Issue issue = client.getIssueClient().getIssue("TST-2", pm);
115 		assertNull(issue.getResolution());
116 		final Iterable<Transition> transitions = client.getIssueClient().getTransitions(issue, pm);
117 		final Transition resolveTransition = getTransitionByName(transitions, "Resolve Issue");
118 
119 		client.getIssueClient().transition(issue, new TransitionInput(resolveTransition.getId()), pm);
120 
121 		final Issue resolvedIssue = client.getIssueClient().getIssue("TST-2", pm);
122 		final BasicResolution basicResolution = resolvedIssue.getResolution();
123 		assertNotNull(basicResolution);
124 
125 		final Resolution resolution = client.getMetadataClient().getResolution(basicResolution.getSelf(), pm);
126 		assertEquals(basicResolution.getName(), resolution.getName());
127 		assertEquals(basicResolution.getSelf(), resolution.getSelf());
128 		assertEquals("A fix for this issue is checked into the tree and tested.", resolution.getDescription());
129 	}
130 }