defmodule DatabaseTest do use MyArangoex.TestCase doctest MyArangoex # import MyArangoex.TestHelper alias MyArangoex.Database alias MyArangoex.User test "creates a database" do new_dbname = Faker.Lorem.word {:ok, original_dbs} = Database.databases(test_endpoint()) {:ok, true} = Database.create(test_endpoint(), %Database{name: new_dbname}) {:ok, after_dbs} = Database.databases(test_endpoint()) assert (after_dbs -- original_dbs) == [new_dbname] end test "creates a database with users" do new_dbname = Faker.Lorem.word {:ok, original_dbs} = Database.databases(test_endpoint()) {:ok, true} = Database.create(test_endpoint(), %Database{ name: new_dbname, users: [ %{username: "admin", passwd: "secret", active: true}, %{username: "tester", passwd: "test001", active: false}, %{username: "eddie", passwd: "eddie001", active: false, extra: %{foo: 1, bar: 2}}, ] } ) # assert created {:ok, after_dbs} = Database.databases(test_endpoint()) assert (after_dbs -- original_dbs) == [new_dbname] # assert metadata {:ok, _db_info} = Database.database(test_endpoint(), new_dbname) # assert users {:ok, %User{user: "admin"}} = User.user(test_endpoint(), %User{user: "admin"}) {:ok, %User{user: "tester"}} = User.user(test_endpoint(), %User{user: "tester"}) {:ok, %User{user: "eddie"}} = User.user(test_endpoint(), %User{user: "eddie"}) end test "fails to create a database" do new_dbname = "#$%^&" {:error, %{"error" => true, "errorMessage" => "database name invalid"}} = Database.create(test_endpoint(), %Database{name: new_dbname}) end test "drops a database" do new_dbname = Faker.Lorem.word # create one to drop {:ok, true} = Database.create(test_endpoint(), %Database{name: new_dbname}) {:ok, dbs} = Database.databases(test_endpoint()) assert new_dbname in dbs # drop and make sure it's gone {:ok, true} = Database.drop(test_endpoint(), new_dbname) {:ok, dbs} = Database.databases(test_endpoint()) refute new_dbname in dbs end test "looks up database information" do {:ok, db} = Database.database(test_endpoint(), "_system") %MyArangoex.Database{id: "1", isSystem: true, name: "_system", path: "/var/lib/arangodb3/databases/database-1", users: nil} = db new_dbname = Faker.Lorem.word {:ok, true} = Database.create(test_endpoint(), %Database{name: new_dbname}) {:ok, db} = Database.database(test_endpoint(), new_dbname) %MyArangoex.Database{id: _, isSystem: false, name: ^new_dbname, path: _, users: nil} = db end test "lists existing databases" do {:ok, dbs} = Database.databases(test_endpoint()) assert is_list(dbs) assert length(dbs) > 0 assert "_system" in dbs end test "lists accessible databases" do new_dbname = Faker.Lorem.word {:ok, true} = Database.create(test_endpoint(), %Database{name: new_dbname}) {:ok, dbs} = Database.user_databases(test_endpoint()) assert is_list(dbs) assert "_system" in dbs assert new_dbname in dbs end end