package com.box.sdk;
import java.util.Iterator;
import java.util.NoSuchElementException;
import org.junit.Assert;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import com.eclipsesource.json.JsonObject;
/**
* {@link BoxResourceIterable} related unit tests.
*/
public class BoxResourceIterableTest {
/**
* Unit test for {@link BoxResourceIterable.IteratorImpl#next()}.
*/
@Test(expected = NoSuchElementException.class)
@Category(UnitTest.class)
public void testNextSendsCorrectRequestWithLimit() {
final URLTemplate urlTemplate = new URLTemplate("endpoint/%s");
final int limit = 19;
BoxAPIConnection api = new BoxAPIConnection("");
api.setRequestInterceptor(new RequestInterceptor() {
@Override
public BoxAPIResponse onRequest(BoxAPIRequest request) {
Assert.assertEquals(
"https://api.box.com/2.0/endpoint/0?limit=19", request.getUrl().toString());
return new BoxJSONResponse() {
@Override
public String getJSON() {
return "{\"entries\":[]}";
}
};
}
});
Iterator<Void> iterator = new BoxResourceIterable<Void>(api, urlTemplate.build(api.getBaseURL(), "0"), limit) {
@Override
protected Void factory(JsonObject jsonObject) {
return null;
}
}
.iterator();
iterator.next();
}
/**
* Unit test for {@link BoxResourceIterable.IteratorImpl#hasNext()}.
*/
@Test
@Category(UnitTest.class)
public void testNextSendsCorrectRequestWithMarker() {
final URLTemplate urlTemplate = new URLTemplate("endpoint/%s");
final int limit = 19;
BoxAPIConnection api = new BoxAPIConnection("");
api.setRequestInterceptor(new RequestInterceptor() {
@Override
public BoxAPIResponse onRequest(BoxAPIRequest request) {
return new BoxJSONResponse() {
@Override
public String getJSON() {
return "{\"entries\":[{\"field\": \"value\"}], \"next_marker\": \"marker\"}";
}
};
}
});
Iterator<Void> iterator = new BoxResourceIterable<Void>(api, urlTemplate.build(api.getBaseURL(), "0"), limit) {
@Override
protected Void factory(JsonObject jsonObject) {
return null;
}
}
.iterator();
iterator.next();
api.setRequestInterceptor(new RequestInterceptor() {
@Override
public BoxAPIResponse onRequest(BoxAPIRequest request) {
Assert.assertEquals(
"https://api.box.com/2.0/endpoint/0?limit=19&marker=marker", request.getUrl().toString());
return new BoxJSONResponse() {
@Override
public String getJSON() {
return "{\"entries\":[]}";
}
};
}
});
Assert.assertEquals(false, iterator.hasNext());
}
/**
* Unit test for {@link BoxResourceIterable.IteratorImpl#next()}.
*/
@Test
@Category(UnitTest.class)
public void testIteratorIteratesThruEntriesCorrectly() {
final String value1 = "1";
final String value2 = "2";
final String value3 = "3";
final URLTemplate urlTemplate = new URLTemplate("endpoint/%s");
final int limit = 19;
BoxAPIConnection api = new BoxAPIConnection("");
api.setRequestInterceptor(new RequestInterceptor() {
@Override
public BoxAPIResponse onRequest(BoxAPIRequest request) {
return new BoxJSONResponse() {
@Override
public String getJSON() {
return "{\"entries\":[{\"field\": \"1\"}, {\"field\": \"2\"}], \"next_marker\": \"marker\"}";
}
};
}
});
Iterator<String> iterator = new BoxResourceIterable<String>(api, urlTemplate.build(api.getBaseURL(), "0"),
limit) {
@Override
protected String factory(JsonObject jsonObject) {
return jsonObject.get("field").asString();
}
}
.iterator();
Assert.assertEquals(true, iterator.hasNext());
String field = iterator.next();
Assert.assertEquals(value1, field);
Assert.assertEquals(true, iterator.hasNext());
field = iterator.next();
Assert.assertEquals(value2, field);
api.setRequestInterceptor(new RequestInterceptor() {
@Override
public BoxAPIResponse onRequest(BoxAPIRequest request) {
return new BoxJSONResponse() {
@Override
public String getJSON() {
return "{\"entries\":[{\"field\": \"3\"}]}";
}
};
}
});
Assert.assertEquals(true, iterator.hasNext());
field = iterator.next();
Assert.assertEquals(value3, field);
Assert.assertEquals(false, iterator.hasNext());
}
}