package com.mozilla.grouperfish.integration.rest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.jayway.restassured.RestAssured;
import com.mozilla.grouperfish.integration.IntegrationTestHelper;
import com.mozilla.grouperfish.model.Document;
import com.mozilla.grouperfish.util.loader.DocumentLoader;
import com.mozilla.grouperfish.util.loader.Loader;
import static java.lang.String.format;
import static org.testng.AssertJUnit.assertEquals;
import static com.jayway.restassured.RestAssured.expect;
import static com.mozilla.grouperfish.base.ImmutableTools.put;
import static com.mozilla.grouperfish.integration.IntegrationTestHelper.NS;
@Test(groups="integration")
public class DocumentLoaderTest {
@SuppressWarnings({"serial"})
private static final Map<String, String> template = ImmutableMap.copyOf(new HashMap<String, String>() {{
put("description", "Whatever");
put("text", "This is the kind of text you'd expect in a document like this.");
put("title", "Ph.D.");
}});
private String baseUrl;
private Loader<Document> loader;
@BeforeTest(groups="integration")
public void setUp() {
IntegrationTestHelper.setUpRestAssured();
baseUrl = RestAssured.baseURI + ':' + RestAssured.port;
loader = new DocumentLoader(baseUrl, NS);
}
public void testLoadSingleDoc() {
loader.load(new Document(put(template, "id", "A_")));
}
public void testLoadSingleDocPlusVerify() {
loader.load(new Document(put(template, "id", "AP_")));
expect().
statusCode(200).
when().get(format("/documents/%s/%s", NS, "AP_"));
}
public void testLoadDuplicateDoc() {
loader.load(new Document(put(template, "id", "B_")));
loader.load(new Document(put(template, "id", "B_")));
}
public void testLoadSingleDocBatch() {
final List<Document> batch = new ArrayList<Document>();
batch.add(new Document(put(template, "id", "C_")));
assertEquals(1, loader.load(batch));
}
public void testLoadSomeDocsBatch() {
final List<Document> batch = new ArrayList<Document>();
final int n = 10;
for (int i = 0; i < n; ++i) {
batch.add(new Document(put(template, "id", "D_" + i)));
}
assertEquals(n, loader.load(batch));
}
public void testLoadManyDocsBatch() {
final List<Document> batch = new ArrayList<Document>();
final int n = 1000;
for (int i = 0; i < n; ++i) {
batch.add(new Document(put(template, "id", "E_" + i)));
}
assertEquals(n, loader.load(batch));
}
public void testPlusVerify() {
final List<Document> batch = new ArrayList<Document>();
final int n = 20;
for (int i = 0; i < n; ++i) {
Document doc = new Document(put(template, "id", "F_" + i));
batch.add(doc);
}
assertEquals(n, loader.load(batch));
for (int i = 0; i < n; ++i) {
expect().
statusCode(200).
when().get(format("/documents/%s/%s", NS, "F_" + i));
}
}
}