1 package it.com.atlassian.rest.test;
2
3 import com.atlassian.plugins.rest.test.Developer;
4 import com.atlassian.plugins.rest.test.Project;
5 import com.atlassian.rest.jersey.client.WebResourceFactory;
6 import static com.atlassian.rest.jersey.client.WebResourceFactory.REST_VERSION;
7 import com.sun.jersey.api.client.WebResource;
8 import com.sun.jersey.core.util.MultivaluedMapImpl;
9 import static org.junit.Assert.assertEquals;
10 import static org.junit.Assert.assertFalse;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertNull;
13 import static org.junit.Assert.assertTrue;
14 import org.junit.Before;
15 import org.junit.Test;
16
17 import javax.ws.rs.core.MediaType;
18 import javax.ws.rs.core.MultivaluedMap;
19
20 public class ProjectsTest
21 {
22 private static final String PROJECT_1 = "project1";
23
24 private static final String JSONP_CALLBACK_PARAMETER_NAME = "jsonp-callback";
25 private static final String JSONP_CALLBACK_TEST_FUNCTION_NAME = "myfunction";
26
27 private WebResource webResourceWithVersion;
28
29 @Before
30 public void setUp()
31 {
32 webResourceWithVersion = WebResourceFactory.authenticated(REST_VERSION).path("projects");
33 }
34
35 @Test
36 public void testGetProjectsJsonPWithJsonAcceptHeader()
37 {
38 final String projectsJson = webResourceWithVersion.accept(MediaType.APPLICATION_JSON_TYPE).get(String.class);
39
40 final MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
41 queryParams.putSingle(JSONP_CALLBACK_PARAMETER_NAME, JSONP_CALLBACK_TEST_FUNCTION_NAME);
42
43 final String projectsJsonP = webResourceWithVersion.queryParams(queryParams).accept(MediaType.APPLICATION_JSON_TYPE).get(String.class);
44
45 assertEquals(JSONP_CALLBACK_TEST_FUNCTION_NAME + "(" + projectsJson + ");", projectsJsonP);
46 }
47
48 @Test
49 public void testGetProjectsJsonPWithXmlAcceptHeader()
50 {
51 final MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
52 queryParams.putSingle(JSONP_CALLBACK_PARAMETER_NAME, JSONP_CALLBACK_TEST_FUNCTION_NAME);
53
54 final String projectsJsonP = webResourceWithVersion.queryParams(queryParams).accept(MediaType.APPLICATION_XML_TYPE).get(String.class);
55
56 assertFalse(projectsJsonP.startsWith(JSONP_CALLBACK_TEST_FUNCTION_NAME));
57 }
58
59 @Test
60 public void testGetProjectByNameAndExpanding()
61 {
62 Project project = webResourceWithVersion.path(PROJECT_1).get(Project.class);
63 assertEquals(PROJECT_1, project.getName());
64 assertNotNull(project.getInformation().getLink());
65 assertNull(project.getInformation().getLongName());
66 assertNull(project.getInformation().getLongDescription());
67
68 testGetProjectExpandingInformation(webResourceWithVersion, "information");
69 testGetProjectExpandingInformation(webResourceWithVersion, "*");
70
71 testGetProjectExpandingInformationAndSpecification(webResourceWithVersion, "information.specification");
72 testGetProjectExpandingInformationAndSpecification(webResourceWithVersion, "information.*");
73 testGetProjectExpandingInformationAndSpecification(webResourceWithVersion, "*.*");
74
75 testGetProjectExpandingDevelopersAndFavouriteDrinks(webResourceWithVersion, "developers.developer.drinks");
76 }
77
78 @Test
79 public void testGetProjectExpandingDevelopers()
80 {
81 testGetProjectExpandingDevelopersWithIndex(webResourceWithVersion);
82 testGetProjectExpandingAllDevelopers(webResourceWithVersion);
83 }
84
85 @Test
86 public void testGetProjectExpandingInformationAndDevelopers()
87 {
88 final Project project = webResourceWithVersion.path(PROJECT_1).queryParam("expand", "information,developers").get(Project.class);
89
90 assertEquals(PROJECT_1, project.getName());
91
92
93
94 assertNotNull(project.getInformation().getLink());
95 assertNotNull(project.getInformation().getLongName());
96 assertNotNull(project.getInformation().getLongDescription());
97
98
99 assertEquals(6, project.getDevelopers().size());
100 }
101
102 @Test
103 public void testGetProjectExpandingDevelopersRange()
104 {
105 String index = "1:3";
106 Project project = webResourceWithVersion.path("project1").queryParam("expand", "developers[" + index + "]").get(Project.class);
107
108
109 assertEquals(3, project.getDevelopers().size());
110 assertEquals("developer2", project.getDevelopers().get(0).getUserName());
111 assertEquals("developer3", project.getDevelopers().get(1).getUserName());
112 assertEquals("developer4", project.getDevelopers().get(2).getUserName());
113
114 index = "-3:-1";
115 project = webResourceWithVersion.path("project1").queryParam("expand", "developers[" + index + "]").get(Project.class);
116
117 assertEquals(3, project.getDevelopers().size());
118 assertEquals("developer4", project.getDevelopers().get(0).getUserName());
119 assertEquals("developer5", project.getDevelopers().get(1).getUserName());
120 assertEquals("developer6", project.getDevelopers().get(2).getUserName());
121 }
122
123 private void testGetProjectExpandingAllDevelopers(WebResource webResource)
124 {
125 Project project = webResource.path(PROJECT_1).queryParam("expand", "developers").get(Project.class);
126 assertEquals(6, project.getDevelopers().size());
127
128 for (Developer developer : project.getDevelopers())
129 {
130 assertNotNull(developer.getLink());
131 assertNotNull(developer.getUserName());
132 assertNull(developer.getFullName());
133 assertNull(developer.getEmail());
134 }
135
136 project = webResource.path(PROJECT_1).queryParam("expand", "developers.developer").get(Project.class);
137 assertEquals(6, project.getDevelopers().size());
138
139 for (Developer developer : project.getDevelopers())
140 {
141 assertNotNull(developer.getLink());
142 assertNotNull(developer.getUserName());
143 assertNotNull(developer.getFullName());
144 assertNotNull(developer.getEmail());
145 }
146 }
147
148 private void testGetProjectExpandingDevelopersWithIndex(WebResource webResource)
149 {
150 testGetProjectExpandingDevelopersWithIndex(webResource, 0);
151 testGetProjectExpandingDevelopersWithIndex(webResource, 1);
152 testGetProjectExpandingDevelopersWithIndex(webResource, 2);
153 testGetProjectExpandingDevelopersWithIndex(webResource, 3);
154 testGetProjectExpandingDevelopersWithIndex(webResource, 4);
155 testGetProjectExpandingDevelopersWithIndex(webResource, 5);
156 testGetProjectExpandingDevelopersWithIndex(webResource, 6);
157 }
158
159 private void testGetProjectExpandingDevelopersWithIndex(WebResource webResource, int index)
160 {
161 String expand = "developers[" + index + "]";
162 Project project = webResource.path("project1").queryParam("expand", expand).get(Project.class);
163
164 if (index >= 0 && index < 6)
165 {
166
167 assertEquals(1, project.getDevelopers().size());
168 Developer developer = project.getDevelopers().get(0);
169
170 assertNotNull(developer.getLink());
171 assertNotNull(developer.getUserName());
172 assertNull(developer.getFullName());
173 assertNull(developer.getEmail());
174
175 expand += ".developer";
176 project = webResource.path("project1").queryParam("expand", expand).get(Project.class);
177
178 assertEquals(1, project.getDevelopers().size());
179 developer = project.getDevelopers().get(0);
180
181 assertNotNull(developer.getLink());
182 assertNotNull(developer.getUserName());
183 assertNotNull(developer.getFullName());
184 assertNotNull(developer.getEmail());
185 }
186 else
187 {
188 assertTrue(project.getDevelopers().isEmpty());
189 }
190 }
191
192 private void testGetProjectExpandingInformation(WebResource webResource, final String expand)
193 {
194 Project project;
195 project = webResource.path(PROJECT_1).queryParam("expand", expand).get(Project.class);
196 assertEquals(PROJECT_1, project.getName());
197 assertNotNull(project.getInformation().getLink());
198 assertNotNull(project.getInformation().getLongName());
199 assertNotNull(project.getInformation().getLongDescription());
200
201 assertNotNull(project.getInformation().getSpecification().getLink());
202 assertNull(project.getInformation().getSpecification().getTitle());
203 assertNull(project.getInformation().getSpecification().getText());
204 }
205
206 private void testGetProjectExpandingInformationAndSpecification(WebResource webResource, final String expand)
207 {
208 Project project = webResource.path(PROJECT_1).queryParam("expand", expand).get(Project.class);
209 assertEquals(PROJECT_1, project.getName());
210 assertNotNull(project.getInformation().getLink());
211 assertNotNull(project.getInformation().getLongName());
212 assertNotNull(project.getInformation().getLongDescription());
213
214 assertNotNull(project.getInformation().getSpecification().getLink());
215 assertNotNull(project.getInformation().getSpecification().getTitle());
216 assertNotNull(project.getInformation().getSpecification().getText());
217 }
218
219 public void testGetProjectExpandingDevelopersAndFavouriteDrinks(WebResource webResource, final String expand)
220 {
221 Project project = webResource.path(PROJECT_1).queryParam("expand", expand).get(Project.class);
222 assertEquals(PROJECT_1, project.getName());
223 assertTrue(project.getDevelopers().get(0).getFavouriteDrinks().size() > 0);
224 }
225 }