package org.springframework.social.dropbox.api.impl;
import org.junit.Test;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.social.dropbox.api.DropboxFile;
import org.springframework.social.dropbox.api.DropboxUserProfile;
import org.springframework.social.dropbox.api.FileUrl;
import org.springframework.social.dropbox.api.Metadata;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.util.List;
import static junit.framework.Assert.assertEquals;
import static org.springframework.http.HttpMethod.*;
import static org.springframework.social.test.client.RequestMatchers.method;
import static org.springframework.social.test.client.RequestMatchers.requestTo;
import static org.springframework.social.test.client.ResponseCreators.withResponse;
/**
* @author Bryce Fischer
* @author Robert Drysdale
*/
public class DropboxTemplateTest extends AbstractDropboxApiTest {
@Test
public void getUserProfileValid() throws Exception {
mockServer
.expect(requestTo("https://api.dropbox.com/1/account/info"))
.andExpect(method(GET))
.andRespond(withResponse(jsonResource("/profileValid"), responseHeaders));
DropboxUserProfile profile = dropbox.getUserProfile();
assertEquals("US", profile.getCountry());
assertEquals("Some User", profile.getDisplayName());
assertEquals("some email", profile.getEmail());
assertEquals(BigInteger.valueOf(10), profile.getUid());
assertEquals("referralLink", profile.getReferralLink());
assertEquals(BigInteger.valueOf(108179488768L), profile.getQuota());
assertEquals(BigInteger.valueOf(44962990383L), profile.getSharedQuota());
assertEquals(BigInteger.valueOf(46970996076L), profile.getNormalQuota());
}
@Test
public void putFile() throws Exception {
mockServer
.expect(requestTo(DropboxTemplate.FILE_PUT_URL
.replaceFirst("\\{appFolderUrl\\}", "dropbox")
.replaceFirst("\\{path\\}", "file.json")))
.andExpect(method(PUT))
.andRespond(withResponse(jsonResource("/file_put_metadata"), responseHeaders));
FileInputStream stream = new FileInputStream(jsonResource("metadata").getFile());
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
while(true) {
int b = stream.read();
if (b == -1) {
break;
}
bytes.write(b);
}
Metadata metadata = dropbox.putFile("file.json", bytes.toByteArray());
assertEquals("7702a9405f", metadata.getRev());
assertEquals(false, metadata.isThumbExists());
assertEquals(12265, metadata.getBytes());
assertEquals(fromDropboxDate("Fri, 02 Dec 2011 11:27:27 +0000"), metadata.getModified());
assertEquals("/file.json", metadata.getPath());
assertEquals(false, metadata.isDir());
assertEquals("page_white", metadata.getIcon());
assertEquals("dropbox", metadata.getRoot());
assertEquals("application/octet-stream", metadata.getMimeType());
assertEquals("12KB", metadata.getSize());
}
@Test
public void copyFile() throws Exception {
mockServer
.expect(requestTo(DropboxTemplate.COPY_URL))
.andExpect(method(POST))
.andRespond(withResponse(jsonResource("/copy"), responseHeaders));
Metadata metadata = dropbox.copy("file.json", "file3.json");
assertEquals("8e02a9405f", metadata.getRev());
assertEquals(false, metadata.isThumbExists());
assertEquals(12265, metadata.getBytes());
assertEquals(fromDropboxDate("Fri, 16 Dec 2011 12:24:07 +0000"), metadata.getModified());
assertEquals("/file3.json", metadata.getPath());
assertEquals(false, metadata.isDir());
assertEquals("page_white", metadata.getIcon());
assertEquals("dropbox", metadata.getRoot());
assertEquals("application/octet-stream", metadata.getMimeType());
assertEquals("12KB", metadata.getSize());
}
@Test
public void moveFile() throws Exception {
mockServer
.expect(requestTo(DropboxTemplate.MOVE_URL))
.andExpect(method(POST))
.andRespond(withResponse(jsonResource("/file_moved"), responseHeaders));
Metadata metadata = dropbox.move("file.json", "file_moved.json");
assertEquals("9202a9405f", metadata.getRev());
assertEquals(false, metadata.isThumbExists());
assertEquals(12265, metadata.getBytes());
assertEquals(fromDropboxDate("Fri, 16 Dec 2011 14:39:42 +0000"), metadata.getModified());
assertEquals("/file_moved.json", metadata.getPath());
assertEquals(false, metadata.isDir());
assertEquals("page_white", metadata.getIcon());
assertEquals("dropbox", metadata.getRoot());
assertEquals("application/octet-stream", metadata.getMimeType());
assertEquals("12KB", metadata.getSize());
}
@Test
public void restoreFile() throws Exception {
mockServer
.expect(requestTo(DropboxTemplate.RESTORE_URL
.replaceFirst("\\{appFolderUrl\\}", "dropbox")
.replaceFirst("\\{path\\}", "file3.json")
+ "?rev=8e02a9405f"))
.andExpect(method(GET))
.andRespond(withResponse(jsonResource("/restored"), responseHeaders));
Metadata metadata = dropbox.restore("file3.json", "8e02a9405f");
assertEquals("9302a9405f", metadata.getRev());
assertEquals(false, metadata.isThumbExists());
assertEquals(12265, metadata.getBytes());
assertEquals(fromDropboxDate("Fri, 16 Dec 2011 14:48:58 +0000"), metadata.getModified());
assertEquals("/file3.json", metadata.getPath());
assertEquals(false, metadata.isDir());
assertEquals("page_white", metadata.getIcon());
assertEquals("dropbox", metadata.getRoot());
assertEquals("application/octet-stream", metadata.getMimeType());
assertEquals("12KB", metadata.getSize());
}
@Test
public void getMedia() throws Exception {
mockServer
.expect(requestTo(DropboxTemplate.MEDIA_URL
.replaceFirst("\\{appFolderUrl\\}", "dropbox")
.replaceFirst("\\{path\\}", "file3.json")))
.andExpect(method(GET))
.andRespond(withResponse(jsonResource("/media"), responseHeaders));
FileUrl url = dropbox.getMedia("file3.json");
assertEquals("https://dl.dropbox.com/0/view/6rcp09bdfz1kxfv/file3.json", url.getUrl());
assertEquals(fromDropboxDate("Sun, 15 Jan 2012 15:24:47 +0000"), url.getExpires());
}
@Test
public void getShare() throws Exception {
mockServer
.expect(requestTo(DropboxTemplate.SHARES_URL
.replaceFirst("\\{appFolderUrl\\}", "dropbox")
.replaceFirst("\\{path\\}", "file3.json")))
.andExpect(method(GET))
.andRespond(withResponse(jsonResource("/share"), responseHeaders));
FileUrl url = dropbox.getShare("file3.json");
assertEquals("http://db.tt/LnS1qL1q", url.getUrl());
assertEquals(fromDropboxDate("Sun, 15 Jan 2012 15:24:47 +0000"), url.getExpires());
}
@Test
public void searchFile() throws Exception {
mockServer
.expect(requestTo(DropboxTemplate.SEARCH_URL
.replaceFirst("\\{appFolderUrl\\}", "dropbox")
.replaceFirst("\\{path\\}", "")
+ "?query=json"))
.andExpect(method(GET))
.andRespond(withResponse(jsonResource("/search"), responseHeaders));
List<Metadata> list = dropbox.search("", "json");
assertEquals(3, list.size());
Metadata metadata = list.get(0);
assertEquals("8d02a9405f", metadata.getRev());
assertEquals(false, metadata.isThumbExists());
assertEquals(12265, metadata.getBytes());
assertEquals(fromDropboxDate("Fri, 16 Dec 2011 12:23:30 +0000"), metadata.getModified());
assertEquals("/file2.json", metadata.getPath());
assertEquals(false, metadata.isDir());
assertEquals("page_white", metadata.getIcon());
assertEquals("dropbox", metadata.getRoot());
assertEquals("application/octet-stream", metadata.getMimeType());
assertEquals("12KB", metadata.getSize());
}
@Test
public void createFolder() throws Exception {
mockServer
.expect(requestTo(DropboxTemplate.CREATE_FOLDER_URL))
.andExpect(method(POST))
.andRespond(withResponse(jsonResource("/create_folder"), responseHeaders));
Metadata metadata = dropbox.createFolder("test");
assertEquals("8f02a9405f", metadata.getRev());
assertEquals(false, metadata.isThumbExists());
assertEquals(0, metadata.getBytes());
assertEquals(fromDropboxDate("Fri, 16 Dec 2011 12:35:37 +0000"), metadata.getModified());
assertEquals("/test", metadata.getPath());
assertEquals(true, metadata.isDir());
assertEquals("folder", metadata.getIcon());
assertEquals("dropbox", metadata.getRoot());
assertEquals("0 bytes", metadata.getSize());
}
@Test
public void delete() throws Exception {
mockServer
.expect(requestTo(DropboxTemplate.DELETE_URL))
.andExpect(method(POST))
.andRespond(withResponse(jsonResource("/delete"), responseHeaders));
Metadata metadata = dropbox.delete("file3.json");
assertEquals("9002a9405f", metadata.getRev());
assertEquals(false, metadata.isThumbExists());
assertEquals(0, metadata.getBytes());
assertEquals(fromDropboxDate("Fri, 16 Dec 2011 12:57:00 +0000"), metadata.getModified());
assertEquals("/file3.json", metadata.getPath());
assertEquals(false, metadata.isDir());
assertEquals("page_white", metadata.getIcon());
assertEquals("dropbox", metadata.getRoot());
assertEquals("0 bytes", metadata.getSize());
assertEquals(true, metadata.isDeleted());
assertEquals("application/octet-stream", metadata.getMimeType());
}
@Test
public void getFile() throws Exception {
HttpHeaders h = new HttpHeaders();
h.setContentType(MediaType.APPLICATION_JSON);
h.setContentLength(1234);
mockServer
.expect(requestTo(DropboxTemplate.FILE_URL
.replaceFirst("\\{appFolderUrl\\}", "dropbox")
.replaceFirst("\\{path\\}", "Getting%20Started.pdf")))
.andExpect(method(GET))
.andRespond(withResponse(jsonResource("/metadata"), h));
DropboxFile file = dropbox.getFile("Getting Started.pdf");
byte[] bytes = file.getBytes();
assertEquals(1234, bytes.length);
}
@Test
public void getRevisions() throws Exception {
mockServer.expect(requestTo(DropboxTemplate.REVISIONS_URL.replaceFirst("\\{appFolderUrl\\}", "dropbox").replaceFirst("\\{path\\}", "file.json"))).andExpect(method(GET))
.andRespond(withResponse(jsonResource("/revisions"), responseHeaders));
List<Metadata> revisions = dropbox.getRevisions("file.json");
Metadata file = revisions.get(0);
assertEquals("7702a9405f", file.getRev());
assertEquals(false, file.isThumbExists());
assertEquals(12265, file.getBytes());
assertEquals(fromDropboxDate("Fri, 02 Dec 2011 11:27:27 +0000"), file.getModified());
assertEquals("/file.json", file.getPath());
assertEquals(false, file.isDir());
assertEquals("12KB", file.getSize());
assertEquals("dropbox", file.getRoot());
assertEquals("page_white", file.getIcon());
assertEquals("application/octet-stream", file.getMimeType());
file = revisions.get(1);
assertEquals("7602a9405f", file.getRev());
assertEquals(false, file.isThumbExists());
assertEquals(556035, file.getBytes());
assertEquals(fromDropboxDate("Fri, 02 Dec 2011 11:24:16 +0000"), file.getModified());
assertEquals("/file.json", file.getPath());
assertEquals(false, file.isDir());
assertEquals("543KB", file.getSize());
assertEquals("dropbox", file.getRoot());
assertEquals("page_white", file.getIcon());
assertEquals("application/octet-stream", file.getMimeType());
}
@Test
public void getMetadata() throws Exception {
mockServer.expect(requestTo(DropboxTemplate.METADATA_URL.replaceFirst("\\{appFolderUrl\\}", "dropbox").replaceFirst("\\{path\\}", ""))).andExpect(method(GET))
.andRespond(withResponse(jsonResource("/metadata"), responseHeaders));
Metadata metadata = dropbox.getItemMetadata("");
assertEquals("0881bfe7f09e0fe856cf9a27000ac00c", metadata.getHash());
assertEquals(false, metadata.isThumbExists());
assertEquals(0, metadata.getBytes());
assertEquals("/", metadata.getPath());
assertEquals(true, metadata.isDir());
assertEquals("0 bytes", metadata.getSize());
assertEquals("dropbox", metadata.getRoot());
assertEquals("folder", metadata.getIcon());
List<Metadata> contents = metadata.getContents();
assertEquals(9, contents.size());
Metadata folder = contents.get(0);
assertEquals("1202a9405f", folder.getRev());
assertEquals(false, folder.isThumbExists());
assertEquals(0, folder.getBytes());
assertEquals(fromDropboxDate("Wed, 08 Jun 2011 20:58:29 +0000"), folder.getModified());
assertEquals("/cv", folder.getPath());
assertEquals(true, folder.isDir());
assertEquals("0 bytes", folder.getSize());
assertEquals("dropbox", folder.getRoot());
assertEquals("folder", folder.getIcon());
Metadata file = contents.get(1);
assertEquals("702a9405f", file.getRev());
assertEquals(false, file.isThumbExists());
assertEquals(230783, file.getBytes());
assertEquals(fromDropboxDate("Thu, 05 May 2011 14:28:24 +0000"), file.getModified());
assertEquals("/Getting Started.pdf", file.getPath());
assertEquals(false, file.isDir());
assertEquals("225.4KB", file.getSize());
assertEquals("dropbox", file.getRoot());
assertEquals("page_white_acrobat", file.getIcon());
assertEquals("application/pdf", file.getMimeType());
}
}