import com.baasbox.db.DbHelper;
import com.baasbox.service.scripting.js.Json;
import com.baasbox.service.storage.CollectionService;
import com.baasbox.service.user.UserService;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.NullNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import core.TestConfig;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.fest.assertions.Assert;
import org.fest.assertions.Assertions;
import org.hamcrest.CoreMatchers;
import org.junit.BeforeClass;
import org.junit.Test;
import play.mvc.Result;
import play.test.FakeRequest;
import java.util.Date;
import java.util.UUID;
import java.util.function.Consumer;
import static org.junit.Assert.*;
import static play.test.Helpers.*;
import static play.test.Helpers.fakeApplication;
import static play.test.Helpers.running;
/**
* Created by eto on 1/13/15.
*/
public class ScriptRequestTest {
private final static String USER = "user_test_script_request-"+ UUID.randomUUID();
private final static String TEST_CALL="test.script_request_"+ScriptTestHelpers.randomScriptName();
private final static String PATH="/test/path";
private final static String QUERY="?q=2&p=x&p=y";
private final static String HEADER_KEY="X-Test";
private final static String HEADER_VALUE="header-val";
private final static JsonNode QSTRINGJSON = queryStringAsJson();
private static JsonNode queryStringAsJson(){
ObjectNode node=Json.mapper().createObjectNode();
node.put("q",Json.mapper().createArrayNode().add("2"));
node.put("p",Json.mapper().createArrayNode().add("x").add("y"));
return node;
}
private static void createUser(){
try {
UserService.signUp(USER, USER, new Date(), null, null, null, null, false);
} catch (Exception e) {
fail(ExceptionUtils.getStackTrace(e));
}
}
@BeforeClass
public static void initTest(){
running(fakeApplication(),()->{
try {
DbHelper.open("1234567890", "admin", "admin");
createUser();
ScriptTestHelpers.createScript(TEST_CALL, "/scripts/test_request.js");
}catch (Throwable e){
fail(ExceptionUtils.getStackTrace(e));
} finally {
DbHelper.close(DbHelper.getConnection());
}
});
}
@Test
public void testGet() {
makeRequest(GET,null,(resp)->{
//todo disabled null body test
//assertTrue(resp.get("body").isNull());
});
}
private void makeRequest(String method,JsonNode body,Consumer<JsonNode> asserts) {
running(fakeApplication(),()->{
FakeRequest req = new FakeRequest(method,"/plugin/"+TEST_CALL+PATH+QUERY);
req = req.withHeader(TestConfig.KEY_APPCODE,TestConfig.VALUE_APPCODE);
req = req.withHeader(TestConfig.KEY_AUTH,TestConfig.encodeAuth(USER,USER));
req = req.withHeader(HEADER_KEY,HEADER_VALUE);
if (body != null){
req=req.withJsonBody(body);
req = req.withHeader(CONTENT_TYPE,"application/json");
}
Result res = route(req);
String content= contentAsString(res);
JsonNode node = Json.mapper().readTreeOrMissing(content);
JsonNode data = node.get("data");
assertEquals(method,data.get("method").asText());
assertEquals(PATH.substring(1),data.get("path").asText());
assertNotNull(data.get("remote"));
assertEquals(QSTRINGJSON,data.get("queryString"));
assertEquals(HEADER_VALUE,data.path("headers").path(HEADER_KEY).path(0).asText());
asserts.accept(data);
});
}
}