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