package com.box.sdk;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertThat;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import com.eclipsesource.json.JsonObject;
import com.github.tomakehurst.wiremock.client.WireMock;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
public class BoxCollectionTest {
@Rule
public final WireMockRule wireMockRule = new WireMockRule(8080);
@Test
@Category(UnitTest.class)
public void testGetCollectionsParsesAllFieldsCorrectly() {
final String id = "405151";
final String name = "Favorites";
final String collectionType = "favorites";
JsonObject fakeJSONResponse = JsonObject.readFrom("{\n"
+ " \"total_count\": 1,\n"
+ " \"entries\": [\n"
+ " {\n"
+ " \"type\": \"collection\",\n"
+ " \"id\": \"405151\",\n"
+ " \"name\": \"Favorites\",\n"
+ " \"collection_type\": \"favorites\"\n"
+ " }\n"
+ " ],\n"
+ " \"limit\": 100,\n"
+ " \"offset\": 0\n"
+ "}");
BoxAPIConnection api = new BoxAPIConnection("");
api.setRequestInterceptor(JSONRequestInterceptor.respondWith(fakeJSONResponse));
Iterator<BoxCollection.Info> iterator = BoxCollection.getAllCollections(api).iterator();
BoxCollection.Info collection = iterator.next();
Assert.assertEquals(id, collection.getID());
Assert.assertEquals(name, collection.getName());
Assert.assertEquals(collectionType, collection.getCollectionType());
Assert.assertEquals(false, iterator.hasNext());
}
@Test
@Category(UnitTest.class)
public void testGetItemsParsesFieldsCorrectly() {
final String idFirst = "192429928";
final String sequenceIDFirst = "1";
final String etagFirst = "1";
final String nameFirst = "Stephen Curry Three Pointers";
final String idSecond = "818853862";
final String sequenceIDSecond = "0";
final String etagSecond = "0";
final String nameSecond = "Warriors.jpg";
BoxAPIConnection api = new BoxAPIConnection("");
api.setBaseURL("http://localhost:8080/");
WireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/collections/0/items/"))
.willReturn(WireMock.aResponse()
.withHeader("Content-Type", "application/json")
.withBody("{\n"
+ " \"total_count\": 24,\n"
+ " \"entries\": [\n"
+ " {\n"
+ " \"type\": \"folder\",\n"
+ " \"id\": \"192429928\",\n"
+ " \"sequence_id\": \"1\",\n"
+ " \"etag\": \"1\",\n"
+ " \"name\": \"Stephen Curry Three Pointers\"\n"
+ " },\n"
+ " {\n"
+ " \"type\": \"file\",\n"
+ " \"id\": \"818853862\",\n"
+ " \"sequence_id\": \"0\",\n"
+ " \"etag\": \"0\",\n"
+ " \"name\": \"Warriors.jpg\"\n"
+ " }\n"
+ " ],\n"
+ " \"offset\": 0,\n"
+ " \"limit\": 2\n"
+ "}")));
BoxCollection collection = new BoxCollection(api, "0");
Iterator<BoxItem.Info> iterator = collection.getItems().iterator();
BoxItem.Info info = iterator.next();
Assert.assertEquals(idFirst, info.getID());
Assert.assertEquals(nameFirst, info.getName());
Assert.assertEquals(sequenceIDFirst, info.getSequenceID());
Assert.assertEquals(etagFirst, info.getEtag());
info = iterator.next();
Assert.assertEquals(idSecond, info.getID());
Assert.assertEquals(nameSecond, info.getName());
Assert.assertEquals(sequenceIDSecond, info.getSequenceID());
Assert.assertEquals(etagSecond, info.getEtag());
Assert.assertEquals(false, iterator.hasNext());
}
@Test
@Category(UnitTest.class)
public void testGetItemsRequestCorrectFields() {
BoxAPIConnection api = new BoxAPIConnection("");
api.setBaseURL("http://localhost:8080/");
WireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/collections/0/items/"))
.withQueryParam("fields", WireMock.containing("name"))
.withQueryParam("fields", WireMock.containing("description"))
.willReturn(WireMock.aResponse()
.withHeader("Content-Type", "application/json")
.withBody("{}")));
BoxCollection collection = new BoxCollection(api, "0");
collection.getItems("name", "description");
}
@Test
@Category(UnitTest.class)
public void testGetItemsRangeRequestsCorrectOffsetLimitAndFields() {
BoxAPIConnection api = new BoxAPIConnection("");
api.setBaseURL("http://localhost:8080/");
WireMock.stubFor(WireMock.get(WireMock.urlPathEqualTo("/collections/0/items/"))
.withQueryParam("offset", WireMock.equalTo("0"))
.withQueryParam("limit", WireMock.equalTo("2"))
.withQueryParam("fields", WireMock.containing("name"))
.withQueryParam("fields", WireMock.containing("description"))
.willReturn(WireMock.aResponse()
.withHeader("Content-Type", "application/json")
.withBody("{\"total_count\": 3, \"entries\":[]}")));
BoxCollection collection = new BoxCollection(api, "0");
PartialCollection<BoxItem.Info> items = collection.getItemsRange(0, 2, "name", "description");
Assert.assertEquals(3L, items.fullSize());
Assert.assertEquals(0, items.offset());
Assert.assertEquals(2L, items.limit());
}
@Test
@Category(IntegrationTest.class)
public void getAllCollectionsReturnsFavorites() {
BoxAPIConnection api = new BoxAPIConnection(TestConfig.getAccessToken());
ArrayList<BoxCollection.Info> collectionList = new ArrayList<BoxCollection.Info>();
for (BoxCollection.Info info : BoxCollection.getAllCollections(api)) {
collectionList.add(info);
}
assertThat(collectionList.size(), is(equalTo(1)));
BoxCollection.Info firstCollection = collectionList.get(0);
assertThat(firstCollection.getName(), is(equalTo("Favorites")));
assertThat(firstCollection.getCollectionType(), is(equalTo("favorites")));
}
@Test
@Category(IntegrationTest.class)
public void getCollectionItemsSucceeds() {
BoxAPIConnection api = new BoxAPIConnection(TestConfig.getAccessToken());
BoxFolder rootFolder = BoxFolder.getRootFolder(api);
String fileName = "[getCollectionItemsSucceeds] Test File.txt";
String fileContent = "Test file";
byte[] fileBytes = fileContent.getBytes(StandardCharsets.UTF_8);
InputStream uploadStream = new ByteArrayInputStream(fileBytes);
BoxFile uploadedFile = rootFolder.uploadFile(uploadStream, fileName).getResource();
BoxCollection favorites = null;
for (BoxCollection.Info info : BoxCollection.getAllCollections(api)) {
if (info.getCollectionType().equals("favorites")) {
favorites = info.getResource();
break;
}
}
assertThat(favorites, is(notNullValue()));
uploadedFile.setCollections(favorites);
assertThat(favorites, hasItem(Matchers.<BoxItem.Info>hasProperty("ID", equalTo(uploadedFile.getID()))));
uploadedFile.delete();
}
}