package digitalwallet.mock; import com.urbanairship.digitalwallet.client.PassTools; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.client.methods.HttpUriRequest; import org.mockito.ArgumentCaptor; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import static org.mockito.Mockito.when; public class HttpArgumentCaptor<T> { private final static String defaultHostName = "api.passtools.com"; protected HttpClient httpClient; protected String body; protected ArgumentCaptor<T> captor; protected final Class<T> clazz; public HttpArgumentCaptor(Class<T> clazz, final HttpClient httpClient) throws IOException { this.clazz = clazz; captor = ArgumentCaptor.forClass(clazz); when(httpClient.execute((HttpUriRequest) captor.capture())).thenReturn(new MockHttpResponse()); } public HttpClient getHttpClient() { return httpClient; } public void setHttpClient(HttpClient httpClient) { this.httpClient = httpClient; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public ArgumentCaptor<T> getCaptor() { return captor; } public void setCaptor(ArgumentCaptor<T> captor) { this.captor = captor; } public void verify(final String path) { for (T current : captor.getAllValues()) { verify((HttpRequestBase)current, path); } } protected void verify(HttpRequestBase current, String address) { assert current.getURI().getPath().equals(address); assert current.getURI().getHost().equals(hostName()); } private String hostName() { try { URL url = new URL(PassTools.API_BASE); return url.getHost(); } catch (MalformedURLException e) { e.printStackTrace(); } return defaultHostName; } }