View Javadoc

1   /*
2    * Copyright (C) 2012-2013 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 com.atlassian.jira.rest.client.internal.json;
18  
19  import com.atlassian.jira.rest.client.api.domain.CimFieldInfo;
20  import com.atlassian.jira.rest.client.api.domain.Resolution;
21  import com.atlassian.jira.rest.client.api.domain.SecurityLevel;
22  import org.codehaus.jettison.json.JSONException;
23  import org.hamcrest.Matchers;
24  import org.hamcrest.collection.IsIterableContainingInAnyOrder;
25  import org.junit.Test;
26  import org.junit.matchers.JUnitMatchers;
27  
28  import java.net.URI;
29  import java.util.Map;
30  
31  import static com.atlassian.jira.rest.client.internal.json.ResourceUtil.getJsonObjectFromResource;
32  import static org.hamcrest.Matchers.equalTo;
33  import static org.junit.Assert.assertThat;
34  
35  /**
36   * @since v1.0
37   */
38  public class CimFieldsInfoMapJsonParserTest {
39  
40      @Test
41      public void testParseWithArrayOfArrayAllowedValuesBug() throws JSONException {
42          final CimFieldsInfoMapJsonParser parser = new CimFieldsInfoMapJsonParser();
43          final Map<String, CimFieldInfo> fieldsInfo = parser.parse(
44                  getJsonObjectFromResource("/json/createmeta/fieldsinfo/valid-with-array-of-array-bug.json")
45          );
46  
47          assertElementsNotIterable(fieldsInfo.get("customfield_10010").getAllowedValues());
48          assertElementsNotIterable(fieldsInfo.get("customfield_10020").getAllowedValues());
49          assertElementsNotIterable(fieldsInfo.get("customfield_10021").getAllowedValues());
50      }
51  
52      @Test
53      public void testParseWithAllowedValuesForSecurityLevels() throws JSONException {
54          final CimFieldsInfoMapJsonParser parser = new CimFieldsInfoMapJsonParser();
55          final Map<String, CimFieldInfo> fieldsInfo = parser.parse(
56                  getJsonObjectFromResource("/json/createmeta/fieldsinfo/valid-with-all-issue-types.json")
57          );
58  
59          assertThat(fieldsInfo.get("security").getAllowedValues(), IsIterableContainingInAnyOrder.<Object>containsInAnyOrder(
60                  new SecurityLevel(URI.create("http://localhost:2990/jira/rest/api/2/securitylevel/10000"), 10000L,
61                          "internal", "For internals only"),
62                  new SecurityLevel(URI.create("http://localhost:2990/jira/rest/api/2/securitylevel/10001"), 10001L,
63                          "public", "For everyone")
64          ));
65      }
66  
67      @Test
68      public void testParseWithAllowedValuesForResolution() throws JSONException {
69          final CimFieldsInfoMapJsonParser parser = new CimFieldsInfoMapJsonParser();
70          final Map<String, CimFieldInfo> fieldsInfo = parser.parse(
71                  getJsonObjectFromResource("/json/createmeta/fieldsinfo/valid-with-all-issue-types.json")
72          );
73  
74          assertThat(fieldsInfo.get("resolution").getAllowedValues(), IsIterableContainingInAnyOrder.<Object>containsInAnyOrder(
75                  new Resolution(URI.create("http://localhost:2990/jira/rest/api/latest/resolution/1"), 1L, "Fixed", null),
76                  new Resolution(URI.create("http://localhost:2990/jira/rest/api/latest/resolution/2"), 2L, "Won't Fix", null),
77                  new Resolution(URI.create("http://localhost:2990/jira/rest/api/latest/resolution/3"), 3L, "Duplicate", null),
78                  new Resolution(URI.create("http://localhost:2990/jira/rest/api/latest/resolution/4"), 4L, "Incomplete", null),
79                  new Resolution(URI.create("http://localhost:2990/jira/rest/api/latest/resolution/5"), 5L, "Cannot Reproduce", null)
80          ));
81      }
82  
83      @Test
84      public void testParseWithArrayOfArrayAllowedValuesBugFixed() throws JSONException {
85          final CimFieldsInfoMapJsonParser parser = new CimFieldsInfoMapJsonParser();
86          final Map<String, CimFieldInfo> fieldsInfo = parser.parse(
87                  getJsonObjectFromResource("/json/createmeta/fieldsinfo/valid-with-array-of-array-bug-fixed.json")
88          );
89  
90          assertElementsNotIterable(fieldsInfo.get("customfield_10010").getAllowedValues());
91          assertElementsNotIterable(fieldsInfo.get("customfield_10020").getAllowedValues());
92          assertElementsNotIterable(fieldsInfo.get("customfield_10021").getAllowedValues());
93      }
94  
95      @Test
96      public void testParseWithAllIssueTypesShouldReturnFieldsWithNames() throws JSONException {
97          final CimFieldsInfoMapJsonParser parser = new CimFieldsInfoMapJsonParser();
98          final Map<String, CimFieldInfo> fieldsInfo = parser.parse(
99                  getJsonObjectFromResource("/json/createmeta/fieldsinfo/valid-with-all-issue-types.json")
100         );
101 
102         assertThat(fieldsInfo.get("summary").getName(), equalTo("Summary"));
103         assertThat(fieldsInfo.get("security").getName(), equalTo("Security Level"));
104         assertThat(fieldsInfo.get("timetracking").getName(), equalTo("Time Tracking"));
105         assertThat(fieldsInfo.get("issuetype").getName(), equalTo("Issue Type"));
106         assertThat(fieldsInfo.get("customfield_10138").getName(), equalTo("Single Version Picker CF"));
107         assertThat(fieldsInfo.get("customfield_10137").getName(), equalTo("Read-only Text Field CF"));
108         assertThat(fieldsInfo.get("fixVersions").getName(), equalTo("Fix Version/s"));
109         assertThat(fieldsInfo.get("customfield_10139").getName(), equalTo("URL Field CF"));
110         assertThat(fieldsInfo.get("resolution").getName(), equalTo("Resolution"));
111         assertThat(fieldsInfo.get("customfield_10122").getName(), equalTo("Free Text Field (unlimited text) CF"));
112         assertThat(fieldsInfo.get("reporter").getName(), equalTo("Reporter"));
113         assertThat(fieldsInfo.get("customfield_10140").getName(), equalTo("Version Picker CF"));
114         assertThat(fieldsInfo.get("customfield_10123").getName(), equalTo("Hidden Job Switch CF"));
115         assertThat(fieldsInfo.get("customfield_10124").getName(), equalTo("Job Checkbox CF"));
116         assertThat(fieldsInfo.get("customfield_10125").getName(), equalTo("Multi Checkboxes CF"));
117         assertThat(fieldsInfo.get("customfield_10120").getName(), equalTo("Bug Import Id CF"));
118         assertThat(fieldsInfo.get("priority").getName(), equalTo("Priority"));
119         assertThat(fieldsInfo.get("description").getName(), equalTo("Description"));
120         assertThat(fieldsInfo.get("customfield_10121").getName(), equalTo("Date Picker CF"));
121         assertThat(fieldsInfo.get("customfield_10001").getName(), equalTo("My Radio buttons"));
122         assertThat(fieldsInfo.get("duedate").getName(), equalTo("Due Date"));
123         assertThat(fieldsInfo.get("customfield_10020").getName(), equalTo("Extra User"));
124         assertThat(fieldsInfo.get("issuelinks").getName(), equalTo("Linked Issues"));
125         assertThat(fieldsInfo.get("worklog").getName(), equalTo("Log Work"));
126         assertThat(fieldsInfo.get("customfield_10000").getName(), equalTo("My Number Field New"));
127         assertThat(fieldsInfo.get("labels").getName(), equalTo("Labels"));
128         assertThat(fieldsInfo.get("assignee").getName(), equalTo("Assignee"));
129         assertThat(fieldsInfo.get("attachment").getName(), equalTo("Attachment"));
130         assertThat(fieldsInfo.get("customfield_10129").getName(), equalTo("Cascading Select CF"));
131         assertThat(fieldsInfo.get("customfield_10128").getName(), equalTo("Text Field (< 255 characters) CF"));
132         assertThat(fieldsInfo.get("customfield_10127").getName(), equalTo("Select List CF"));
133         assertThat(fieldsInfo.get("customfield_10126").getName(), equalTo("Multi Select CF"));
134         assertThat(fieldsInfo.get("customfield_10135").getName(), equalTo("Multi User Picker CF"));
135         assertThat(fieldsInfo.get("versions").getName(), equalTo("Affects Version/s"));
136         assertThat(fieldsInfo.get("customfield_10136").getName(), equalTo("Project Picker CF"));
137         assertThat(fieldsInfo.get("project").getName(), Matchers.nullValue());
138         assertThat(fieldsInfo.get("customfield_10133").getName(), equalTo("Labels CF"));
139         assertThat(fieldsInfo.get("environment").getName(), equalTo("Environment"));
140         assertThat(fieldsInfo.get("customfield_10134").getName(), equalTo("Multi Group Picker CF"));
141         assertThat(fieldsInfo.get("customfield_10131").getName(), equalTo("Group Picker CF"));
142         assertThat(fieldsInfo.get("customfield_10132").getName(), equalTo("Import Id CF"));
143         assertThat(fieldsInfo.get("customfield_10130").getName(), equalTo("Date Time CF"));
144         assertThat(fieldsInfo.get("components").getName(), equalTo("Component/s"));
145         assertThat(fieldsInfo.get("customfield_10010").getName(), equalTo("project3"));
146         assertThat(fieldsInfo.get("customfield_10011").getName(), equalTo("project2"));
147     }
148 
149     private void assertElementsNotIterable(final Iterable<Object> allowedValues) {
150         assertThat(allowedValues, JUnitMatchers.everyItem(Matchers.not(Matchers.instanceOf(Iterable.class))));
151     }
152 }