package com.belladati.sdk.dataset.impl;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.testng.annotations.Test;
import com.belladati.sdk.dataset.DataSet;
import com.belladati.sdk.dataset.data.DataTable;
import com.belladati.sdk.dataset.impl.DataSetImpl;
import com.belladati.sdk.exception.dataset.data.UnknownServerColumnException;
import com.belladati.sdk.exception.server.UnexpectedResponseException;
import com.belladati.sdk.test.SDKTest;
import com.belladati.sdk.test.TestRequestHandler;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@Test
public class DataImportTest extends SDKTest {
private final String id = "id";
private final String column = "column";
private final String url = "/api/import/" + id;
/** JSON data is sent correctly */
public void uploadJson() {
final DataTable table = DataTable.createBasicInstance(column).createRow("content");
server.register(url, new TestRequestHandler() {
@Override
protected void handle(HttpHolder holder) throws IOException {
HttpEntity entity = ((BasicHttpEntityEnclosingRequest) holder.request).getEntity();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
entity.writeTo(baos);
JsonNode json = new ObjectMapper().readTree(baos.toByteArray());
baos.close();
assertEquals(json, table.toJson());
}
});
service.uploadData(id, table);
server.assertRequestUris(url);
}
/** can import data from a data set */
public void uploadFromDataSet() {
final DataTable table = DataTable.createBasicInstance(column).createRow("content");
DataSet dataSet = new DataSetImpl(service, builder.buildDataSetNode(id, "", "", "", ""));
server.register(url, new TestRequestHandler() {
@Override
protected void handle(HttpHolder holder) throws IOException {
HttpEntity entity = ((BasicHttpEntityEnclosingRequest) holder.request).getEntity();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
entity.writeTo(baos);
JsonNode json = new ObjectMapper().readTree(baos.toByteArray());
baos.close();
assertEquals(json, table.toJson());
}
});
dataSet.uploadData(table);
server.assertRequestUris(url);
}
/** nothing happens when uploading empty data */
public void uploadNoData() {
service.uploadData(id, DataTable.createBasicInstance(column));
server.assertRequestUris();
}
/** non-existing column server error */
public void nonExistingColumn() {
server.registerError(url, 400, "Indicator/attribute '" + column + "' doesn't exist");
try {
service.uploadData(id, DataTable.createBasicInstance(column).createRow("content"));
fail("No exception thrown");
} catch (UnknownServerColumnException e) {
assertEquals(e.getId(), id);
assertEquals(e.getColumn(), column);
}
}
/** unrelated server error */
@Test(expectedExceptions = UnexpectedResponseException.class)
public void otherError() {
server.registerError(url, 400, "something else");
service.uploadData(id, DataTable.createBasicInstance(column).createRow("content"));
}
}