1
0
Fork 0
arangodb/tests/rb/HttpInterface/api-aqlfunction-spec.rb

258 lines
11 KiB
Ruby

# coding: utf-8
require 'rspec'
require 'arangodb.rb'
describe ArangoDB do
api = "/_api/aqlfunction"
prefix = "api-aqlfunction"
context "AQL user functions:" do
################################################################################
## error handling
################################################################################
context "error handling" do
it "add function, without name" do
body = "{ \"code\" : \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-no-name", api, :body => body)
doc.code.should eq(400)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(true)
doc.parsed_response['code'].should eq(400)
doc.parsed_response['errorNum'].should eq(1580)
end
it "add function, invalid name" do
body = "{ \"name\" : \"\", \"code\" : \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-invalid1", api, :body => body)
doc.code.should eq(400)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(true)
doc.parsed_response['code'].should eq(400)
doc.parsed_response['errorNum'].should eq(1580)
end
it "add function, invalid name" do
body = "{ \"name\" : \"_aql::foobar\", \"code\" : \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-invalid2", api, :body => body)
doc.code.should eq(400)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(true)
doc.parsed_response['code'].should eq(400)
doc.parsed_response['errorNum'].should eq(1580)
end
it "add function, invalid name" do
body = "{ \"name\" : \"foobar\", \"code\" : \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-invalid3", api, :body => body)
doc.code.should eq(400)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(true)
doc.parsed_response['code'].should eq(400)
doc.parsed_response['errorNum'].should eq(1580)
end
it "add function, no code" do
body = "{ \"name\" : \"myfunc::mytest\" }"
doc = ArangoDB.log_post("#{prefix}-add-no-code", api, :body => body)
doc.code.should eq(400)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(true)
doc.parsed_response['code'].should eq(400)
doc.parsed_response['errorNum'].should eq(1581)
end
it "add function, invalid code" do
body = "{ \"name\" : \"myfunc::mytest\", \"code\" : \"function ()\" }"
doc = ArangoDB.log_post("#{prefix}-add-invalid-code", api, :body => body)
doc.code.should eq(400)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(true)
doc.parsed_response['code'].should eq(400)
doc.parsed_response['errorNum'].should eq(1581)
end
it "deleting non-existing function" do
doc = ArangoDB.log_delete("#{prefix}-delete", api + "/mytest%3A%3Amynonfunc")
doc.code.should eq(404)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(true)
doc.parsed_response['code'].should eq(404)
doc.parsed_response['errorNum'].should eq(1582)
end
end
################################################################################
## adding and deleting functions
################################################################################
context "adding and deleting functions" do
before do
ArangoDB.delete("/_api/aqlfunction/UnitTests%3A%3Amytest")
end
after do
ArangoDB.delete("/_api/aqlfunction/UnitTests%3A%3Amytest")
end
it "add function, valid code" do
body = "{ \"name\" : \"UnitTests::mytest\", \"code\": \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-function1", api, :body => body)
doc.code.should eq(201)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(false)
doc.parsed_response['code'].should eq(201)
doc.parsed_response['isNewlyCreated'].should eq(true)
end
it "add function, update" do
body = "{ \"name\" : \"UnitTests::mytest\", \"code\": \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-function2", api, :body => body)
doc.code.should eq(201)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(false)
doc.parsed_response['code'].should eq(201)
doc.parsed_response['isNewlyCreated'].should eq(true)
doc = ArangoDB.log_post("#{prefix}-add-function2", api, :body => body)
doc.code.should eq(200)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(false)
doc.parsed_response['code'].should eq(200)
doc.parsed_response['isNewlyCreated'].should eq(false)
end
it "add function, delete" do
body = "{ \"name\" : \"UnitTests::mytest\", \"code\": \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-function3", api, :body => body)
doc.code.should eq(201)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(false)
doc.parsed_response['code'].should eq(201)
doc.parsed_response['isNewlyCreated'].should eq(true)
doc = ArangoDB.log_delete("#{prefix}-add-function3", api + "/UnitTests%3A%3Amytest")
doc.code.should eq(200)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(false)
doc.parsed_response['code'].should eq(200)
doc = ArangoDB.log_delete("#{prefix}-add-function3", api + "/UnitTests%3A%3Amytest")
doc.code.should eq(404)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(true)
doc.parsed_response['code'].should eq(404)
doc.parsed_response['errorNum'].should eq(1582)
end
it "add function, delete multiple" do
body = "{ \"name\" : \"UnitTests::mytest::one\", \"code\": \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-function4", api, :body => body)
doc.code.should eq(201)
doc.parsed_response['isNewlyCreated'].should eq(true)
body = "{ \"name\" : \"UnitTests::mytest::two\", \"code\": \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-function4", api, :body => body)
doc.code.should eq(201)
doc.parsed_response['isNewlyCreated'].should eq(true)
body = "{ \"name\" : \"UnitTests::foo\", \"code\": \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-add-function4", api, :body => body)
doc.code.should eq(201)
doc.parsed_response['isNewlyCreated'].should eq(true)
doc = ArangoDB.log_delete("#{prefix}-add-function4", api + "/UnitTests%3A%3Amytest?group=true")
doc.code.should eq(200)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(false)
doc.parsed_response['code'].should eq(200)
doc = ArangoDB.log_delete("#{prefix}-add-function4", api + "/UnitTests%3A%3Amytest%3A%3Aone")
doc.code.should eq(404)
doc = ArangoDB.log_delete("#{prefix}-add-function4", api + "/UnitTests%3A%3Amytest%3A%3Atwo")
doc.code.should eq(404)
doc = ArangoDB.log_delete("#{prefix}-add-function4", api + "/UnitTests%3A%3Afoo")
doc.code.should eq(200)
end
end
################################################################################
## retrieving the list of functions
################################################################################
context "retrieving functions" do
before do
reply = ArangoDB.delete("/_api/aqlfunction/UnitTests?group=true")
reply.code.should eq(200)
end
after do
reply = ArangoDB.delete("/_api/aqlfunction/UnitTests?group=true")
reply.code.should eq(200)
end
it "add function and retrieve the list" do
body = "{ \"name\" : \"UnitTests::mytest\", \"code\": \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-list-functions1", api, :body => body)
doc.parsed_response['isNewlyCreated'].should eq(true)
doc.code.should eq(201)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response['error'].should eq(false)
doc.parsed_response['code'].should eq(201)
doc = ArangoDB.log_get("#{prefix}-list-functions1", api + "?prefix=UnitTests")
doc.code.should eq(200)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response.length.should eq(3)
doc.parsed_response['result'].length.should eq(1)
doc.parsed_response['result'][0]['name'].should eq("UnitTests::mytest")
doc.parsed_response['result'][0]['code'].should eq("function () { return 1; }")
end
it "add functions and retrieve the list" do
body = "{ \"name\" : \"UnitTests::mytest1\", \"code\": \"function () { return 1; }\" }"
doc = ArangoDB.log_post("#{prefix}-list-functions2", api, :body => body)
doc.code.should eq(201)
doc.parsed_response['isNewlyCreated'].should eq(true)
doc = ArangoDB.log_get("#{prefix}-list-functions2", api + "?prefix=UnitTests")
doc.code.should eq(200)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response.length.should eq(3)
doc.parsed_response['result'].length.should eq(1)
doc.parsed_response['result'][0]['name'].should eq("UnitTests::mytest1")
doc.parsed_response['result'][0]['code'].should eq("function () { return 1; }")
body = "{ \"name\" : \"UnitTests::mytest1\", \"code\": \"( function () { return 3 * 5; } ) \" }"
doc = ArangoDB.log_post("#{prefix}-list-functions2", api, :body => body)
doc.code.should eq(200)
doc = ArangoDB.log_get("#{prefix}-list-functions2", api + "?prefix=UnitTests")
doc.code.should eq(200)
doc.headers['content-type'].should eq("application/json; charset=utf-8")
doc.parsed_response.length.should eq(3)
doc.parsed_response['result'].length.should eq(1)
doc.parsed_response['result'][0]['name'].should eq("UnitTests::mytest1")
doc.parsed_response['result'][0]['code'].should eq("( function () { return 3 * 5; } )")
end
end
end
end