Current section

Files

Jump to
dbml test mix tasks dbml_schemas_test.exs
Raw

test/mix/tasks/dbml_schemas_test.exs

defmodule Mix.Tasks.Dbml.SchemasTest do
use ExUnit.Case, async: true
import ExUnit.CaptureIO
setup do
dir = Path.join(System.tmp_dir!(), "mix_dbml_schemas_#{:erlang.unique_integer([:positive])}")
File.mkdir_p!(dir)
on_exit(fn -> File.rm_rf!(dir) end)
{:ok, dir: dir}
end
test "run with valid arguments generates schemas", %{dir: dir} do
dbml_file = Path.join(dir, "schema.dbml")
File.write!(dbml_file, "table users { id int [pk] }")
output_dir = Path.join(dir, "schemas")
File.mkdir_p!(output_dir)
output = capture_io(fn ->
Mix.Tasks.Dbml.Schemas.run([dbml_file, "-o", output_dir])
end)
assert output =~ "Generated:"
assert File.exists?(Path.join(output_dir, "users.ex"))
end
test "run with namespace option", %{dir: dir} do
dbml_file = Path.join(dir, "schema.dbml")
File.write!(dbml_file, "table products { id int [pk] }")
output_dir = Path.join(dir, "schemas")
File.mkdir_p!(output_dir)
capture_io(fn ->
Mix.Tasks.Dbml.Schemas.run([dbml_file, "-o", output_dir, "-n", "MyApp.Schema"])
end)
content = File.read!(Path.join(output_dir, "products.ex"))
assert content =~ "defmodule MyApp.Schema.Product do"
end
test "run with help flag" do
output = capture_io(fn ->
Mix.Tasks.Dbml.Schemas.run(["--help"])
end)
assert output =~ "Generate Ecto schemas"
end
test "run with missing output-dir raises" do
assert_raise Mix.Error, fn ->
capture_io(fn ->
Mix.Tasks.Dbml.Schemas.run(["schema.dbml"])
end)
end
end
test "run with nonexistent file raises" do
assert_raise Mix.Error, fn ->
capture_io(fn ->
Mix.Tasks.Dbml.Schemas.run(["nonexistent.dbml", "-o", "/tmp"])
end)
end
end
test "run with update option overwrites existing files", %{dir: dir} do
dbml_file = Path.join(dir, "schema.dbml")
File.write!(dbml_file, "table users { id int [pk] }")
output_dir = Path.join(dir, "schemas")
File.mkdir_p!(output_dir)
File.write!(Path.join(output_dir, "users.ex"), "old content")
output = capture_io(fn ->
Mix.Tasks.Dbml.Schemas.run([dbml_file, "-o", output_dir, "--update"])
end)
assert output =~ "Generated:"
content = File.read!(Path.join(output_dir, "users.ex"))
assert content =~ "defmodule"
refute content == "old content"
end
test "run with long option names" do
assert_raise Mix.Error, fn ->
capture_io(fn ->
Mix.Tasks.Dbml.Schemas.run(["--output-dir"])
end)
end
end
end