package com.pivotallabs.api; import com.pivotallabs.util.Pair; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import static com.pivotallabs.util.Strings.asStream; public class TestApiGateway extends ApiGateway { List<Pair<ApiRequest, ApiResponseCallbacks>> pendingRequests = new ArrayList<Pair<ApiRequest, ApiResponseCallbacks>>(); @Override public void makeRequest(ApiRequest apiRequest, ApiResponseCallbacks responseCallbacks) { pendingRequests.add(Pair.of(apiRequest, responseCallbacks)); } public void simulateResponse(int httpCode, String responseBody) throws IOException, SAXException, ParserConfigurationException { ensurePendingRequests(); XmlApiResponse apiResponse = new XmlApiResponse(httpCode); apiResponse.consumeResponse(asStream(responseBody)); dispatch(apiResponse, unshiftEarliestRequest().b); } public ApiRequest getLatestRequest() { ensurePendingRequests(); return pendingRequests.get(pendingRequests.size() - 1).a; } private void ensurePendingRequests() { if (pendingRequests.isEmpty()) { throw new RuntimeException("No pending requests to simulate response for"); } } private Pair<ApiRequest, ApiResponseCallbacks> unshiftEarliestRequest() { return pendingRequests.remove(0); } }