mirror of https://gitee.com/bigwinds/arangodb
394 lines
15 KiB
Ruby
394 lines
15 KiB
Ruby
# coding: utf-8
|
|
|
|
require 'rspec'
|
|
require 'arangodb.rb'
|
|
|
|
describe ArangoDB do
|
|
prefix = "api-database"
|
|
api = "/_api/database"
|
|
|
|
context "dealing with database information methods:" do
|
|
|
|
################################################################################
|
|
## retrieving the list of databases
|
|
################################################################################
|
|
|
|
it "retrieves the list of databases" do
|
|
doc = ArangoDB.log_get("#{prefix}-list", api)
|
|
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
|
|
result.should include("_system")
|
|
end
|
|
|
|
################################################################################
|
|
## retrieving the list of databases for the current user
|
|
################################################################################
|
|
|
|
it "retrieves the list of user-specific databases" do
|
|
doc = ArangoDB.log_get("#{prefix}-list-user", api + "/user")
|
|
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
|
|
result.should include("_system")
|
|
end
|
|
|
|
################################################################################
|
|
## checking information about current database
|
|
################################################################################
|
|
|
|
it "retrieves information about the current database" do
|
|
doc = ArangoDB.log_get("#{prefix}-get-current", api + "/current")
|
|
|
|
doc.code.should eq(200)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
result = doc.parsed_response["result"]
|
|
result["name"].should eq("_system")
|
|
result["path"].should be_kind_of(String)
|
|
result["isSystem"].should eq(true)
|
|
end
|
|
|
|
end
|
|
|
|
################################################################################
|
|
## checking information about current database
|
|
################################################################################
|
|
|
|
context "dealing with database manipulation methods:" do
|
|
name = "UnitTestsDatabase"
|
|
|
|
before do
|
|
ArangoDB.delete(api + "/#{name}")
|
|
end
|
|
|
|
after do
|
|
ArangoDB.delete(api + "/#{name}")
|
|
end
|
|
|
|
it "creates a new database, old return code" do
|
|
body = "{\"name\" : \"#{name}\" }"
|
|
doc = ArangoDB.log_post("#{prefix}-create", api, :body => body, :headers => { "X-Arango-Version" => "1.4" })
|
|
|
|
doc.code.should eq(200)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
end
|
|
|
|
it "creates a new database, new return code" do
|
|
body = "{\"name\" : \"#{name}\" }"
|
|
doc = ArangoDB.log_post("#{prefix}-create", api, :body => body, :headers => { "X-Arango-Version" => "1.5" })
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
end
|
|
|
|
it "creates a new database" do
|
|
body = "{\"name\" : \"#{name}\" }"
|
|
doc = ArangoDB.log_post("#{prefix}-create", api, :body => body)
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
end
|
|
|
|
it "creates a database without a name" do
|
|
body = "{ }"
|
|
doc = ArangoDB.log_post("#{prefix}-create-invalid-non", api, :body => body)
|
|
|
|
doc.code.should eq(400)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["error"].should eq(true)
|
|
response["errorNum"].should eq(1229)
|
|
end
|
|
|
|
it "creates a database with an empty name" do
|
|
body = "{ \"name\": \" \" }"
|
|
doc = ArangoDB.log_post("#{prefix}-create-invalid-empty", api, :body => body)
|
|
|
|
doc.code.should eq(400)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["error"].should eq(true)
|
|
response["errorNum"].should eq(1229)
|
|
end
|
|
|
|
it "creates a database with an invalid name" do
|
|
body = "{\"name\" : \"_#{name}\" }"
|
|
doc = ArangoDB.log_post("#{prefix}-create-invalid-system", api, :body => body)
|
|
|
|
doc.code.should eq(400)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["error"].should eq(true)
|
|
response["errorNum"].should eq(1229)
|
|
end
|
|
|
|
it "re-creates an existing database" do
|
|
body = "{\"name\" : \"#{name}\" }"
|
|
doc = ArangoDB.log_post("#{prefix}-re-create", api, :body => body)
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
|
|
doc = ArangoDB.log_post("#{prefix}-re-create", api, :body => body)
|
|
doc.code.should eq(409)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
|
|
response = doc.parsed_response
|
|
response["error"].should eq(true)
|
|
response["errorNum"].should eq(1207)
|
|
end
|
|
|
|
it "creates a database with users = null" do
|
|
body = "{\"name\" : \"#{name}\", \"users\" : null }"
|
|
doc = ArangoDB.log_post("#{prefix}-create-no-users1", api, :body => body)
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
end
|
|
|
|
it "creates a database with users = [ ]" do
|
|
body = "{\"name\" : \"#{name}\", \"users\" : [ ] }"
|
|
doc = ArangoDB.log_post("#{prefix}-create-no-users2", api, :body => body)
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
end
|
|
|
|
it "drops an existing database" do
|
|
cmd = api + "/#{name}"
|
|
body = "{\"name\" : \"#{name}\" }"
|
|
doc = ArangoDB.log_post("#{prefix}-drop", api, :body => body)
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
|
|
doc = ArangoDB.log_delete("#{prefix}-drop", cmd)
|
|
doc.code.should eq(200)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
end
|
|
|
|
it "drops a non-existing database" do
|
|
cmd = api + "/#{name}"
|
|
doc = ArangoDB.log_delete("#{prefix}-drop-nonexisting", cmd)
|
|
|
|
doc.code.should eq(404)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["errorNum"].should eq(1228)
|
|
response["error"].should eq(true)
|
|
end
|
|
|
|
it "creates a new database and retrieves the properties" do
|
|
body = "{\"name\" : \"#{name}\" }"
|
|
doc = ArangoDB.log_post("#{prefix}-create-properties", api, :body => body)
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
|
|
# list of databases should include the new database
|
|
doc = ArangoDB.log_get("#{prefix}-create-properties", api)
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
|
|
result.should include("_system")
|
|
result.should include(name)
|
|
|
|
# retrieve information about _system database
|
|
doc = ArangoDB.log_get("#{prefix}-create-current", api + "/current")
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
result["name"].should eq("_system")
|
|
result["path"].should be_kind_of(String)
|
|
result["isSystem"].should eq(true)
|
|
|
|
# retrieve information about new database
|
|
doc = ArangoDB.log_get("#{prefix}-create-current", "/_db/#{name}" + api + "/current")
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
result["name"].should eq(name)
|
|
result["path"].should be_kind_of(String)
|
|
result["isSystem"].should eq(false)
|
|
|
|
# retrieve user for new database
|
|
doc = ArangoDB.log_get("#{prefix}-create-current", "/_db/#{name}/_api/user/root")
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response
|
|
result["user"].should eq("root")
|
|
result["active"].should eq(true)
|
|
|
|
doc = ArangoDB.log_delete("#{prefix}-create-current", api + "/#{name}")
|
|
doc.code.should eq(200)
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
end
|
|
|
|
it "creates a new database with two users" do
|
|
body = "{\"name\" : \"#{name}\", \"users\": [ { \"username\": \"admin\", \"password\": \"secret\", \"extra\": { \"gender\": \"m\" } }, { \"username\": \"foxx\", \"active\": false } ] }"
|
|
doc = ArangoDB.log_post("#{prefix}-create-users", api, :body => body)
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
|
|
# list of databases should include the new database
|
|
doc = ArangoDB.log_get("#{prefix}-create-users", api)
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
|
|
result.should include("_system")
|
|
result.should include(name)
|
|
|
|
# retrieve information about new database
|
|
doc = ArangoDB.log_get("#{prefix}-create-users", "/_db/#{name}" + api + "/current")
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
result["name"].should eq(name)
|
|
result["path"].should be_kind_of(String)
|
|
result["isSystem"].should eq(false)
|
|
|
|
# retrieve information about user "admin"
|
|
doc = ArangoDB.log_get("#{prefix}-create-users", "/_db/#{name}/_api/user/admin")
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response
|
|
result["user"].should eq("admin")
|
|
result["active"].should eq(true)
|
|
result["extra"]["gender"].should eq("m")
|
|
|
|
# retrieve information about user "foxx"
|
|
doc = ArangoDB.log_get("#{prefix}-create-users", "/_db/#{name}/_api/user/foxx")
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response
|
|
result["user"].should eq("foxx")
|
|
result["active"].should eq(false)
|
|
|
|
# retrieve information about user "root"
|
|
doc = ArangoDB.log_get("#{prefix}-create-users", "/_db/#{name}/_api/user/root")
|
|
doc.code.should eq(404)
|
|
|
|
doc = ArangoDB.log_delete("#{prefix}-create-users", api + "/#{name}")
|
|
doc.code.should eq(200)
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
end
|
|
|
|
it "creates a new database with an invalid user object" do
|
|
body = "{\"name\" : \"#{name}\", \"users\": [ { } ] }"
|
|
doc = ArangoDB.log_post("#{prefix}-create-users-missing", api, :body => body)
|
|
|
|
doc.code.should eq(400)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["error"].should eq(true)
|
|
end
|
|
|
|
it "creates a new database with an invalid user" do
|
|
body = "{\"name\" : \"#{name}\", \"users\": [ { \"username\": \"\" } ] }"
|
|
doc = ArangoDB.log_post("#{prefix}-create-users-invalid", api, :body => body)
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
|
|
# list of databases should include the new database
|
|
doc = ArangoDB.log_get("#{prefix}-create-users-invalid", api)
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
|
|
result.should include("_system")
|
|
result.should include(name)
|
|
|
|
# retrieve information about new database
|
|
doc = ArangoDB.log_get("#{prefix}-create-users-invalid", "/_db/#{name}" + api + "/current")
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
result["name"].should eq(name)
|
|
result["path"].should be_kind_of(String)
|
|
result["isSystem"].should eq(false)
|
|
|
|
# retrieve information about user "root"
|
|
doc = ArangoDB.log_get("#{prefix}-create-users-invalid", "/_db/#{name}/_api/user/root")
|
|
doc.code.should eq(404)
|
|
|
|
doc = ArangoDB.log_delete("#{prefix}-create-users-invalid", api + "/#{name}")
|
|
doc.code.should eq(200)
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
end
|
|
|
|
it "checks _system database restrictions" do
|
|
body = "{\"name\" : \"#{name}\" }"
|
|
doc = ArangoDB.log_post("#{prefix}-check-system", api, :body => body)
|
|
|
|
doc.code.should eq(201)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["result"].should eq(true)
|
|
response["error"].should eq(false)
|
|
|
|
# listing databases is disallowed in non-system
|
|
doc = ArangoDB.log_get("#{prefix}-check-system", "/_db/#{name}" + api)
|
|
doc.code.should eq(403)
|
|
response = doc.parsed_response
|
|
response["error"].should eq(true)
|
|
response["errorNum"].should eq(1230)
|
|
|
|
# retrieve information about _system database. this is still allowed
|
|
doc = ArangoDB.log_get("#{prefix}-check-system", "/_db/#{name}" + api + "/current")
|
|
doc.code.should eq(200)
|
|
result = doc.parsed_response["result"]
|
|
result["name"].should eq(name)
|
|
result["path"].should be_kind_of(String)
|
|
result["isSystem"].should eq(false)
|
|
|
|
# creating a new database is disallowed in non-system
|
|
body = "{\"name\" : \"UnitTestsWontWork\" }"
|
|
doc = ArangoDB.log_post("#{prefix}-check-system", "/_db/#{name}" + api, :body => body)
|
|
|
|
doc.code.should eq(403)
|
|
doc.headers['content-type'].should eq("application/json; charset=utf-8")
|
|
response = doc.parsed_response
|
|
response["error"].should eq(true)
|
|
response["errorNum"].should eq(1230)
|
|
|
|
# dropping the database is disallowed in non-system
|
|
doc = ArangoDB.log_delete("#{prefix}-check-system", "/_db/#{name}" + api + "/#{name}")
|
|
doc.code.should eq(403)
|
|
response = doc.parsed_response
|
|
response["error"].should eq(true)
|
|
response["errorNum"].should eq(1230)
|
|
end
|
|
|
|
end
|
|
|
|
end
|