2024-06-01 14:09:38 +12:00
|
|
|
defmodule Igniter.ConfigTest do
|
|
|
|
use ExUnit.Case
|
|
|
|
|
|
|
|
alias Rewrite.Source
|
|
|
|
|
|
|
|
describe "configure/6" do
|
|
|
|
test "it creates the config file if it does not exist" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.Config.configure(Igniter.new(), "fake.exs", :fake, [:foo, :bar], "baz")
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.from?(config_file, :string)
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
|
|
|
import Config
|
|
|
|
config :fake, foo: [bar: "baz"]
|
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
|
|
|
test "it merges with 2 arg version of existing config" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.create_new_elixir_file("config/fake.exs", """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
config :fake, buz: [:blat]
|
|
|
|
""")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [:foo, :bar], "baz")
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-06 02:12:07 +12:00
|
|
|
config :fake, buz: [:blat], foo: [bar: "baz"]
|
2024-06-01 14:09:38 +12:00
|
|
|
"""
|
|
|
|
end
|
2024-06-03 08:05:31 +12:00
|
|
|
|
|
|
|
@tag :regression
|
|
|
|
test "it merges the spark formatter plugins" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.Config.configure(
|
|
|
|
"fake.exs",
|
|
|
|
:spark,
|
|
|
|
[:formatter, :"Ash.Resource"],
|
|
|
|
[],
|
|
|
|
fn x ->
|
|
|
|
x
|
|
|
|
end
|
|
|
|
)
|
|
|
|
|> Igniter.Config.configure("fake.exs", :spark, [:formatter, :"Ash.Domain"], [], fn x ->
|
|
|
|
x
|
|
|
|
end)
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
|
|
|
import Config
|
2024-06-06 02:12:07 +12:00
|
|
|
config :spark, formatter: ["Ash.Resource": [], "Ash.Domain": []]
|
2024-06-03 08:05:31 +12:00
|
|
|
"""
|
|
|
|
end
|
2024-06-01 14:09:38 +12:00
|
|
|
|
|
|
|
test "it merges with 2 arg version of existing config with a single path item" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.create_new_elixir_file("config/fake.exs", """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
config :fake, buz: [:blat]
|
|
|
|
""")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [:foo], "baz")
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-06 02:12:07 +12:00
|
|
|
config :fake, buz: [:blat], foo: "baz"
|
2024-06-01 14:09:38 +12:00
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
2024-06-12 09:33:05 +12:00
|
|
|
test "it choosees the thre 3 arg version when first item in path is not pretty" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.create_new_elixir_file("config/fake.exs", """
|
|
|
|
import Config
|
|
|
|
""")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [Foo.Bar, :bar], "baz")
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
|
|
|
import Config
|
|
|
|
config :fake, Foo.Bar, bar: "baz"
|
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
|
|
|
test "it choosees the thre 3 arg version when first item in path is not pretty, and merges that way" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.create_new_elixir_file("config/fake.exs", """
|
|
|
|
import Config
|
|
|
|
""")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [Foo.Bar, :bar], "baz")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [Foo.Bar, :buz], "biz")
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
|
|
|
import Config
|
|
|
|
config :fake, Foo.Bar, bar: "baz", buz: "biz"
|
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
test "it merges with 3 arg version of existing config" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.create_new_elixir_file("config/fake.exs", """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
config :fake, :buz, [:blat]
|
|
|
|
""")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [:foo, :bar], "baz")
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
config :fake, foo: [bar: "baz"]
|
2024-06-11 01:58:20 +12:00
|
|
|
config :fake, :buz, [:blat]
|
2024-06-01 14:09:38 +12:00
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
|
|
|
test "it merges with 3 arg version of existing config with a single path item" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.create_new_elixir_file("config/fake.exs", """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
config :fake, :buz, [:blat]
|
|
|
|
""")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [:foo], "baz")
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
config :fake, foo: "baz"
|
2024-06-11 01:58:20 +12:00
|
|
|
config :fake, :buz, [:blat]
|
2024-06-01 14:09:38 +12:00
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
|
|
|
test "present values can be updated" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.create_new_elixir_file("config/fake.exs", """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
config :fake, :buz, [:blat]
|
|
|
|
""")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [:buz], "baz", fn list ->
|
2024-06-13 10:22:08 +12:00
|
|
|
Igniter.Code.List.prepend_new_to_list(list, "baz")
|
2024-06-01 14:09:38 +12:00
|
|
|
end)
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
config :fake, :buz, ["baz", :blat]
|
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
2024-06-11 01:58:20 +12:00
|
|
|
test "integers can be used as values" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.create_new_elixir_file("config/fake.exs", """
|
|
|
|
import Config
|
|
|
|
|
|
|
|
config :fake, :buz, [:blat]
|
|
|
|
""")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [:buz], 12)
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
|
|
|
import Config
|
|
|
|
|
|
|
|
config :fake, :buz, 12
|
|
|
|
"""
|
|
|
|
end
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
test "present values can be updated by updating map keys" do
|
|
|
|
%{rewrite: rewrite} =
|
|
|
|
Igniter.new()
|
|
|
|
|> Igniter.create_new_elixir_file("config/fake.exs", """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-01 14:09:38 +12:00
|
|
|
config :fake, foo: %{"a" => ["a", "b"]}
|
|
|
|
""")
|
|
|
|
|> Igniter.Config.configure("fake.exs", :fake, [:foo], %{"b" => ["c", "d"]}, fn zipper ->
|
2024-06-13 10:22:08 +12:00
|
|
|
Igniter.Code.Map.set_map_key(zipper, "b", ["c", "d"], fn zipper ->
|
|
|
|
with {:ok, zipper} <- Igniter.Code.List.prepend_new_to_list(zipper, "c") do
|
|
|
|
Igniter.Code.List.prepend_new_to_list(zipper, "d")
|
|
|
|
end
|
2024-06-01 14:09:38 +12:00
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
config_file = Rewrite.source!(rewrite, "config/fake.exs")
|
|
|
|
|
|
|
|
assert Source.get(config_file, :content) == """
|
2024-06-11 01:58:20 +12:00
|
|
|
import Config
|
|
|
|
|
2024-06-06 02:12:07 +12:00
|
|
|
config :fake, foo: %{"a" => ["a", "b"], "b" => ["c", "d"]}
|
2024-06-01 14:09:38 +12:00
|
|
|
"""
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|