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