package com.uploadcare.upload;
import com.uploadcare.api.Client;
import com.uploadcare.api.File;
import com.uploadcare.api.RequestHelper;
import com.uploadcare.api.RequestHelperProvider;
import com.uploadcare.data.FileData;
import com.uploadcare.data.UploadBaseData;
import com.uploadcare.urls.Urls;
import org.apache.commons.io.IOUtils;
import org.apache.http.client.methods.HttpUriRequest;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.junit.Test;
import org.mockito.InOrder;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import static org.mockito.Matchers.argThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
public class FileUploaderTest {
public static final String FILE_ID = "unique_file_id";
@Test
public void test_upload() throws UploadFailureException, IOException {
final RequestHelper requestHelper = mock(RequestHelper.class);
when(requestHelper.executeQuery(requestThat(Urls.uploadBase()), eq(false), eq(UploadBaseData.class)))
.thenReturn(uploadBaseData());
Client client = new Client("public", "private", true, new RequestHelperProvider() {
public RequestHelper get(Client client) {
return requestHelper;
}
});
String filename = "olympia.jpg";
InputStream is = getClass().getClassLoader().getResourceAsStream(filename);
byte[] bytes = IOUtils.toByteArray(is);
Uploader uploader = new FileUploader(client, bytes, filename);
File file = uploader.upload();
InOrder inOrder = inOrder(requestHelper);
inOrder.verify(requestHelper).executeQuery(requestThat(Urls.uploadBase()), eq(false), eq(UploadBaseData.class));
inOrder.verify(requestHelper).executeQuery(requestThat(Urls.apiFile(FILE_ID)), eq(true), eq(FileData.class));
}
private HttpUriRequest requestThat(final URI uri) {
return argThat(new BaseMatcher<HttpUriRequest>() {
public boolean matches(Object o) {
HttpUriRequest request = (HttpUriRequest) o;
return request.getURI().equals(uri);
}
public void describeTo(Description description) {
}
});
}
private UploadBaseData uploadBaseData() {
UploadBaseData baseData = new UploadBaseData();
baseData.file = FILE_ID;
return baseData;
}
}