View Javadoc

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          // information expanded
94          assertNotNull(project.getInformation().getLink());
95          assertNotNull(project.getInformation().getLongName());
96          assertNotNull(project.getInformation().getLongDescription());
97  
98          // developers list expanded
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;// expanding the information attibute
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 }