package org.commcare.network.mocks;
import org.apache.http.HttpResponse;
import org.commcare.interfaces.HttpRequestEndpoints;
import org.commcare.network.DataPullRequester;
import org.commcare.network.HttpRequestEndpointsMock;
import org.commcare.network.RemoteDataPullResponse;
import org.commcare.tasks.DataPullTask;
import java.io.File;
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 file on the android filesystem.
*
* @author Clayton Sims (csims@dimagi.com)
*/
public enum LocalFilePullResponseFactory implements DataPullRequester {
INSTANCE;
// data pull requests will pop off and use the top reference in this list
private final List<File> xmlPayloadReferences = new ArrayList<>();
public int numTries = 0;
public static void setRequestPayloads(File[] 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 LocalFilePullResponse(xmlPayloadReferences.remove(0), response);
}
@Override
public HttpRequestEndpoints getHttpGenerator(String username, String password, String userId) {
return new HttpRequestEndpointsMock();
}
}