1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
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 }