Hi All,
Getting empty string for baos.toString("UTF-8") statement. Performing below steps to invoke a workflow process passing mock object.
1. Creating mock objects for request, response and resource resolver.
2. Passing mock values, as below
3. successfully getting all the mock objects in workflow process class.
Invoking getJSONFromPSPPPage method internally from execute method, but getting empty String for below statement
String baosString = baos.toString("UTF-8");
Any thoughts or Suggestion please.
===============================================
Junit class --
@Mock
MockSlingHttpServletRequest request;
@Mock
MockSlingHttpServletResponse response;
@Mock
private Replicator replicator;
@Mock
private RequestResponseFactory requestResponseFactory;
@Mock
private SlingRequestProcessor requestProcessor;
@BeforeEach
public void setup()
{ response = context.response();
request = new MockSlingHttpServletRequest(resourceResolverMock, context.bundleContext());
context.registerService(RequestResponseFactory.class, requestResponseFactory);
PrivateAccessor.setField(process, "requestResponseFactory", requestResponseFactory);
context.registerService(SlingRequestProcessor.class, requestProcessor);
PrivateAccessor.setField(process, "requestProcessor", requestProcessor);
}
@test
void test(){
String path = "/content/page/us";
context.load().json(getClass().getResourceAsStream("/com/test/workflow/processes/PSPPJSONArchiveProcessTest.json"),"/content");
request = new MockSlingHttpServletRequest(resourceResolverMock, context.bundleContext());
request.setResource(context.currentResource(path));
Mockito.when(requestResponseFactory.createRequest(Mockito.anyString(), Mockito.anyString()))
.thenReturn(request);
WCMMode.PREVIEW.toRequest(request);
Mockito.when(requestResponseFactory.createResponse(Mockito.any(OutputStream.class))).thenReturn(response);
Mockito.when(baosMock.toString()).thenReturn("test123asfasdfas");
process.execute(wfWorkItemMock, wfSessionMock, metaData);
}
===================================================================
Inside Workflow Process class
private String getJSONFromPSPPPage(String path, ResourceResolver resourceResolver) {
String psppJSON = null;
try(ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
String psppPath = path + "/"+ JcrConstants.JCR_CONTENT + PSPP_JSON_EXTN;
logger.info("PSPP path for url : {}", psppPath);
HttpServletRequest req = requestResponseFactory.createRequest("GET", psppPath);
HttpServletResponse resp = requestResponseFactory.createResponse(baos);
requestProcessor.processRequest(req, resp, resourceResolver);
resp.getWriter().flush();
String baosString = baos.toString("UTF-8");
if (StringUtils.equals(resp.getContentType(), "application/json")) {
psppJSON = baosString;
}
logger.info("PSPP Json : {}", psppJSON);
} catch (Exception ex) {
logger.error("Error in creating json from PSPP", ex);
}
return psppJSON;
}
==================================