package org.commcare.network;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.entity.mime.MultipartEntity;
import org.commcare.interfaces.HttpRequestEndpoints;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* Mocks for different types of http requests commcare mobile makes to the server
*
* @author Phillip Mates (pmates@dimagi.com)
*/
public class HttpRequestEndpointsMock implements HttpRequestEndpoints {
private final static List<Integer> caseFetchResponseCodeStack = new ArrayList<>();
private static String errorMessagePayload;
/**
* Set the response code for the next N requests
*/
public static void setCaseFetchResponseCodes(Integer[] responseCodes) {
caseFetchResponseCodeStack.clear();
Collections.addAll(caseFetchResponseCodeStack, responseCodes);
}
/**
* Set the response body for the next 406 request
*/
public static void setErrorResponseBody(String body) {
errorMessagePayload = body;
}
@Override
public HttpResponse makeCaseFetchRequest(String baseUri, boolean includeStateFlags)
throws ClientProtocolException, IOException {
int responseCode;
if (caseFetchResponseCodeStack.size() > 0) {
responseCode = caseFetchResponseCodeStack.remove(0);
} else {
responseCode = 200;
}
if (responseCode == 202) {
return HttpResponseMock.buildHttpResponseMockForAsyncRestore();
} else if (responseCode == 406) {
return HttpResponseMock.buildHttpResponseMock(responseCode, new ByteArrayInputStream(errorMessagePayload.getBytes("UTF-8")));
} else {
return HttpResponseMock.buildHttpResponseMock(responseCode, null);
}
}
@Override
public HttpResponse makeKeyFetchRequest(String baseUri, Date lastRequest) throws ClientProtocolException, IOException {
throw new RuntimeException("Not yet mocked");
}
@Override
public HttpResponse postData(String url, MultipartEntity entity) throws ClientProtocolException, IOException {
throw new RuntimeException("Not yet mocked");
}
@Override
public InputStream simpleGet(URL url) throws IOException {
throw new RuntimeException("Not yet mocked");
}
@Override
public void abortCurrentRequest() {
throw new RuntimeException("Not yet mocked");
}
}