package org.commcare.network;
import org.apache.http.HttpResponse;
import org.commcare.interfaces.HttpRequestEndpoints;
import org.commcare.tasks.DataPullTask;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Builds data pull requester that gets data from a local CommCare reference.
*
* @author Phillip Mates (pmates@dimagi.com).
*/
public enum LocalReferencePullResponseFactory implements DataPullRequester {
INSTANCE;
// data pull requests will pop off and use the top reference in this list
private final List<String> xmlPayloadReferences = new ArrayList<>();
public int numTries = 0;
public static void setRequestPayloads(String[] payloadReferences) {
INSTANCE.xmlPayloadReferences.clear();
Collections.addAll(INSTANCE.xmlPayloadReferences, payloadReferences);
}
public static int getNumRequestsMade() {
return INSTANCE.numTries;
}
// this is what DataPullTask will call when it's being run in a test
@Override
public RemoteDataPullResponse makeDataPullRequest(DataPullTask task,
HttpRequestEndpoints requestor,
String server,
boolean includeSyncToken) throws IOException {
numTries++;
HttpResponse response = requestor.makeCaseFetchRequest(server, includeSyncToken);
return new LocalReferencePullResponse(xmlPayloadReferences.remove(0), response);
}
@Override
public HttpRequestEndpoints getHttpGenerator(String username, String password, String userId) {
return new HttpRequestEndpointsMock();
}
}