Skip to content

Commit 563aa36

Browse files
Added Export Dashboard API and test for this adapter
1 parent dc93a39 commit 563aa36

File tree

2 files changed

+338
-0
lines changed

2 files changed

+338
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* Copyright (C) 2005 - 2014 Jaspersoft Corporation. All rights reserved.
3+
* http://www.jaspersoft.com.
4+
*
5+
* Unless you have purchased a commercial license agreement from Jaspersoft,
6+
* the following license terms apply:
7+
*
8+
* This program is free software: you can redistribute it and/or modify
9+
* it under the terms of the GNU Affero General Public License as
10+
* published by the Free Software Foundation, either version 3 of the
11+
* License, or (at your option) any later version.
12+
*
13+
* This program is distributed in the hope that it will be useful,
14+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16+
* GNU Affero General Public License for more details.
17+
*
18+
* You should have received a copy of the GNU Affero General Public License
19+
* along with this program.&nbsp; If not, see <http://www.gnu.org/licenses/>.
20+
*/
21+
package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.importexport.exportservice;
22+
23+
import com.jaspersoft.jasperserver.dto.dashboard.DashboardExportExecution;
24+
import com.jaspersoft.jasperserver.dto.dashboard.DashboardExportExecutionStatus;
25+
import com.jaspersoft.jasperserver.dto.dashboard.DashboardParameters;
26+
import com.jaspersoft.jasperserver.jaxrs.client.apiadapters.AbstractAdapter;
27+
import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest;
28+
import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage;
29+
import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.handling.DefaultErrorHandler;
30+
import com.jaspersoft.jasperserver.jaxrs.client.core.operationresult.OperationResult;
31+
import org.apache.commons.logging.Log;
32+
import org.apache.commons.logging.LogFactory;
33+
34+
import java.io.InputStream;
35+
36+
import static com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest.buildRequest;
37+
38+
/**
39+
* Created by serhii.blazhyievskyi on 7/31/2015.
40+
*/
41+
public class ExportDashboardAdapter extends AbstractAdapter {
42+
43+
private static final Log log = LogFactory.getLog(ExportDashboardAdapter.class);
44+
45+
private String dashboardUri;
46+
private String jobId;
47+
private DashboardExportExecution dashboardExportExecution = new DashboardExportExecution();
48+
49+
public ExportDashboardAdapter(SessionStorage sessionStorage, String dashboardUri, String jobId) {
50+
super(sessionStorage);
51+
this.dashboardUri = dashboardUri;
52+
this.jobId = jobId;
53+
this.dashboardExportExecution.setParameters(new DashboardParameters());
54+
}
55+
56+
public ExportDashboardAdapter parameters(DashboardParameters parameters) {
57+
this.dashboardExportExecution.setParameters(parameters);
58+
return this;
59+
}
60+
61+
public OperationResult<InputStream> exportReport() {
62+
JerseyRequest<InputStream> request = buildRequest(sessionStorage, InputStream.class, new String[]{"/dashboards", dashboardUri, "/exportFormat"});
63+
request.setAccept("application/zip");
64+
return request.get();
65+
}
66+
67+
public OperationResult<DashboardExportExecution> getAllJobs() {
68+
return buildRequest(sessionStorage, DashboardExportExecution.class, new String[]{"/dashboardExecutions"}).get();
69+
}
70+
71+
public OperationResult<DashboardExportExecution> getJob() {
72+
return buildRequest(sessionStorage, DashboardExportExecution.class, new String[]{"/dashboardExecutions", jobId}).get();
73+
}
74+
75+
public OperationResult<DashboardExportExecution> create(DashboardExportExecution param) {
76+
return buildRequest(sessionStorage, DashboardExportExecution.class, new String[]{"/dashboardExecutions"},
77+
new DefaultErrorHandler()).post(param);
78+
}
79+
80+
public OperationResult<DashboardExportExecutionStatus> getJobStatus() {
81+
return buildRequest(sessionStorage, DashboardExportExecutionStatus.class, new String[]{"/dashboardExecutions", jobId, "/status"}).get();
82+
}
83+
84+
public OperationResult<InputStream> getExportResult() {
85+
JerseyRequest<InputStream> request = buildRequest(sessionStorage, InputStream.class, new String[]{"/dashboardExecutions", jobId, "/outputResource"});
86+
request.setAccept("application/zip");
87+
return request.get();
88+
}
89+
90+
public OperationResult<DashboardExportExecution> deleteJob() {
91+
return buildRequest(sessionStorage, DashboardExportExecution.class, new String[]{"/dashboardExecutions", jobId}).delete();
92+
}
93+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
package com.jaspersoft.jasperserver.jaxrs.client.apiadapters.importexport.exportservice;
2+
3+
import com.jaspersoft.jasperserver.dto.dashboard.DashboardExportExecution;
4+
import com.jaspersoft.jasperserver.dto.dashboard.DashboardExportExecutionStatus;
5+
import com.jaspersoft.jasperserver.dto.dashboard.DashboardParameters;
6+
import com.jaspersoft.jasperserver.dto.reports.ReportParameter;
7+
import com.jaspersoft.jasperserver.jaxrs.client.core.JasperserverRestClient;
8+
import com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest;
9+
import com.jaspersoft.jasperserver.jaxrs.client.core.SessionStorage;
10+
import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.handling.DefaultErrorHandler;
11+
import com.jaspersoft.jasperserver.jaxrs.client.core.operationresult.OperationResult;
12+
import org.mockito.Mock;
13+
import org.mockito.Mockito;
14+
import org.powermock.core.classloader.annotations.PrepareForTest;
15+
import org.powermock.modules.testng.PowerMockTestCase;
16+
import org.testng.annotations.AfterMethod;
17+
import org.testng.annotations.BeforeMethod;
18+
import org.testng.annotations.Test;
19+
20+
import java.io.InputStream;
21+
import java.lang.reflect.Field;
22+
import java.util.ArrayList;
23+
import java.util.List;
24+
25+
import static com.jaspersoft.jasperserver.jaxrs.client.core.JerseyRequest.buildRequest;
26+
import static org.hamcrest.core.IsInstanceOf.instanceOf;
27+
import static org.mockito.Mockito.*;
28+
import static org.mockito.MockitoAnnotations.initMocks;
29+
import static org.powermock.api.mockito.PowerMockito.mockStatic;
30+
import static org.powermock.api.mockito.PowerMockito.when;
31+
import static org.powermock.api.support.membermodification.MemberMatcher.field;
32+
import static org.testng.Assert.*;
33+
34+
/**
35+
* Unit tests for {@link JasperserverRestClient}
36+
*/
37+
@PrepareForTest({JerseyRequest.class, ExportDashboardAdapter.class, JasperserverRestClient.class, SessionStorage.class})
38+
public class ExportDashboardAdapterTest extends PowerMockTestCase {
39+
40+
@Mock
41+
private SessionStorage sessionStorageMock;
42+
43+
@Mock
44+
private JerseyRequest<InputStream> requestInputStreamMock;
45+
46+
@Mock
47+
private OperationResult<InputStream> operationResultInputStreamMock;
48+
49+
@Mock
50+
private JerseyRequest<DashboardExportExecution> requestDashboardExportExecution;
51+
52+
@Mock
53+
private OperationResult<DashboardExportExecution> operationResultDashboardExportExecution;
54+
55+
@Mock
56+
private JerseyRequest<DashboardExportExecutionStatus> requestDashboardExportExecutionStatus;
57+
58+
@Mock
59+
private OperationResult<DashboardExportExecutionStatus> operationResultDashboardExportExecutionStatus;
60+
61+
private ExportDashboardAdapter adapterSpy;
62+
private String jobId = "some1meaningful2ID";
63+
private String dashboardUri = "dashboardUri";
64+
65+
@BeforeMethod
66+
public void before() {
67+
initMocks(this);
68+
adapterSpy = Mockito.spy(new ExportDashboardAdapter(sessionStorageMock, dashboardUri, jobId));
69+
}
70+
71+
@Test(testName = "JasperserverRestClient_constructor")
72+
public void should_create_an_instance_of_JasperserverRestClient_with_proper_fields() throws IllegalAccessException {
73+
// When
74+
Field field = field(ExportDashboardAdapter.class, "dashboardExportExecution");
75+
Object retrievedField = field.get(adapterSpy);
76+
77+
// Then
78+
assertSame(adapterSpy.getSessionStorage(), sessionStorageMock);
79+
assertNotNull(retrievedField);
80+
assertTrue(instanceOf(DashboardExportExecution.class).matches(retrievedField));
81+
82+
assertNotNull(((DashboardExportExecution) retrievedField).getParameters());
83+
84+
}
85+
86+
@Test(testName = "parameters")
87+
public void should_add_parameters_to_params_of_ExportTaskDto_instance() throws IllegalAccessException {
88+
89+
List<String> countries = new ArrayList<String>();
90+
countries.add("Canada");
91+
countries.add("Mexica");
92+
ReportParameter testParam1 = new ReportParameter();
93+
testParam1.setName("countries");
94+
testParam1.setValues(countries);
95+
List<String> productFamily = new ArrayList<String>();
96+
productFamily.add("Food");
97+
productFamily.add("Drink");
98+
ReportParameter testParam2 = new ReportParameter();
99+
testParam1.setName("productFamily");
100+
testParam1.setValues(productFamily);
101+
final List<ReportParameter> paramList = new ArrayList<ReportParameter>();
102+
paramList.add(testParam1);
103+
paramList.add(testParam2);
104+
DashboardParameters params = new DashboardParameters(paramList);
105+
106+
ExportDashboardAdapter adapter = spy(new ExportDashboardAdapter(sessionStorageMock, dashboardUri, jobId));
107+
108+
ExportDashboardAdapter retrievedAdapter = adapter.parameters(params);
109+
Field field = field(ExportDashboardAdapter.class, "dashboardExportExecution");
110+
DashboardExportExecution dashboardExportExecution = (DashboardExportExecution) field.get(adapter);
111+
112+
verify(adapter, times(1)).parameters(params);
113+
assertNotNull(retrievedAdapter);
114+
assertTrue(dashboardExportExecution.getParameters().getDashboardParameters().size() == 2);
115+
assertTrue(dashboardExportExecution.getParameters().getDashboardParameters().contains(testParam2));
116+
}
117+
118+
@Test(testName = "exportReport")
119+
public void should_retrieve_streamed_OperationResult_object() {
120+
121+
// Given
122+
mockStatic(JerseyRequest.class);
123+
when(buildRequest(eq(sessionStorageMock), eq(InputStream.class),
124+
eq(new String[]{"/dashboards", dashboardUri, "/exportFormat"}))).thenReturn(requestInputStreamMock);
125+
Mockito.doReturn(operationResultInputStreamMock).when(requestInputStreamMock).get();
126+
127+
// When
128+
OperationResult<InputStream> retrieved = adapterSpy.exportReport();
129+
130+
// Then
131+
assertNotNull(retrieved);
132+
assertSame(retrieved, operationResultInputStreamMock);
133+
}
134+
135+
@Test(testName = "getAllJobs")
136+
public void should_retrieve_list_with_all_jobs() {
137+
138+
// Given
139+
mockStatic(JerseyRequest.class);
140+
when(buildRequest(eq(sessionStorageMock), eq(DashboardExportExecution.class),
141+
eq(new String[]{"/dashboardExecutions"}))).thenReturn(requestDashboardExportExecution);
142+
Mockito.doReturn(operationResultDashboardExportExecution).when(requestDashboardExportExecution).get();
143+
144+
// When
145+
OperationResult<DashboardExportExecution> retrieved = adapterSpy.getAllJobs();
146+
147+
// Then
148+
assertNotNull(retrieved);
149+
assertSame(retrieved, operationResultDashboardExportExecution);
150+
}
151+
152+
@Test(testName = "getJob")
153+
public void should_retrieve_dto_with_job() {
154+
155+
// Given
156+
mockStatic(JerseyRequest.class);
157+
when(buildRequest(eq(sessionStorageMock), eq(DashboardExportExecution.class),
158+
eq(new String[]{"/dashboardExecutions", jobId}))).thenReturn(requestDashboardExportExecution);
159+
Mockito.doReturn(operationResultDashboardExportExecution).when(requestDashboardExportExecution).get();
160+
161+
// When
162+
OperationResult<DashboardExportExecution> retrieved = adapterSpy.getJob();
163+
164+
// Then
165+
assertNotNull(retrieved);
166+
assertSame(retrieved, operationResultDashboardExportExecution);
167+
}
168+
169+
@Test(testName = "create")
170+
public void should_return_not_null_op_result() throws IllegalAccessException {
171+
172+
// Given
173+
mockStatic(JerseyRequest.class);
174+
when(buildRequest(eq(sessionStorageMock), eq(DashboardExportExecution.class),
175+
eq(new String[]{"/dashboardExecutions"}),
176+
any(DefaultErrorHandler.class))).thenReturn(requestDashboardExportExecution);
177+
178+
DashboardExportExecution dto = new DashboardExportExecution();
179+
Mockito.doReturn(operationResultDashboardExportExecution).when(requestDashboardExportExecution).post(dto);
180+
181+
// When
182+
OperationResult<DashboardExportExecution> retrieved = adapterSpy.create(dto);
183+
184+
// Then
185+
assertNotNull(retrieved);
186+
assertSame(retrieved, operationResultDashboardExportExecution);
187+
}
188+
189+
@Test(testName = "getJobStatus")
190+
public void should_retrieve_dto_with_job_status() {
191+
192+
// Given
193+
mockStatic(JerseyRequest.class);
194+
when(buildRequest(eq(sessionStorageMock), eq(DashboardExportExecutionStatus.class),
195+
eq(new String[]{"/dashboardExecutions", jobId, "/status"}))).thenReturn(requestDashboardExportExecutionStatus);
196+
Mockito.doReturn(operationResultDashboardExportExecutionStatus).when(requestDashboardExportExecutionStatus).get();
197+
198+
// When
199+
OperationResult<DashboardExportExecutionStatus> retrieved = adapterSpy.getJobStatus();
200+
201+
// Then
202+
assertNotNull(retrieved);
203+
assertSame(retrieved, operationResultDashboardExportExecutionStatus);
204+
}
205+
206+
@Test(testName = "getExportResult")
207+
public void should_retrieve_streamed_Report_object() {
208+
209+
// Given
210+
mockStatic(JerseyRequest.class);
211+
when(buildRequest(eq(sessionStorageMock), eq(InputStream.class),
212+
eq(new String[]{"/dashboardExecutions", jobId, "/outputResource"}))).thenReturn(requestInputStreamMock);
213+
Mockito.doReturn(operationResultInputStreamMock).when(requestInputStreamMock).get();
214+
215+
// When
216+
OperationResult<InputStream> retrieved = adapterSpy.getExportResult();
217+
218+
// Then
219+
assertNotNull(retrieved);
220+
assertSame(retrieved, operationResultInputStreamMock);
221+
}
222+
223+
@Test(testName = "deleteJob")
224+
public void should_retrieve_204_result() {
225+
226+
// Given
227+
mockStatic(JerseyRequest.class);
228+
when(buildRequest(eq(sessionStorageMock), eq(DashboardExportExecution.class),
229+
eq(new String[]{"/dashboardExecutions", jobId}))).thenReturn(requestDashboardExportExecution);
230+
Mockito.doReturn(operationResultDashboardExportExecution).when(requestDashboardExportExecution).delete();
231+
232+
// When
233+
OperationResult<DashboardExportExecution> retrieved = adapterSpy.deleteJob();
234+
235+
// Then
236+
assertNotNull(retrieved);
237+
assertSame(retrieved, operationResultDashboardExportExecution);
238+
}
239+
240+
@AfterMethod
241+
public void after() {
242+
reset(sessionStorageMock, requestInputStreamMock, operationResultInputStreamMock);
243+
}
244+
245+
}

0 commit comments

Comments
 (0)