Skip to content

Commit

Permalink
add a check for the existence of the config/config.exs file fixes #23
Browse files Browse the repository at this point in the history
  • Loading branch information
TheEndIsNear committed May 30, 2020
1 parent 5565889 commit 769e677
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 0 deletions.
19 changes: 19 additions & 0 deletions lib/ironman/checks/git_hooks_config.ex
Expand Up @@ -2,6 +2,7 @@ defmodule Ironman.Checks.GitHooksConfig do
@moduledoc false
alias Ironman.{Config, Utils}
alias Ironman.Utils.Deps
alias Ironman.Utils.File, as: IFile

@spec run(Config.t()) :: {:error, any()} | {:no | :yes | :up_to_date | :skip, Config.t()}
def run(%Config{} = config) do
Expand Down Expand Up @@ -31,6 +32,7 @@ defmodule Ironman.Checks.GitHooksConfig do
defp do_add_config(%Config{} = config) do
config =
config
|> maybe_create_config()
|> set_config_exs()
|> set_config_dev_exs()
|> set_config_prod_exs()
Expand All @@ -39,6 +41,23 @@ defmodule Ironman.Checks.GitHooksConfig do
{:yes, config}
end

defp maybe_create_config(config) do
config_exs =
case Config.get(config, :config_exs) do
nil ->
Utils.puts("Adding config/config.exs")
IFile.mkdir!("config")
IFile.touch!("config/config.exs")

"use Mix.Config\n\nimport_config \"\#{Mix.env()}.exs\"\n"

config_exs ->
config_exs
end

Config.set(config, :config_exs, config_exs)
end

defp set_config_exs(config) do
config_exs = Config.get(config, :config_exs)

Expand Down
2 changes: 2 additions & 0 deletions lib/ironman/utils/file.ex
Expand Up @@ -5,6 +5,8 @@ defmodule Ironman.Utils.File do
def exists?(path), do: impl().exists?(path)
def read!(path), do: impl().read!(path)
def write!(path, contents), do: impl().write!(path, contents)
def mkdir!(path), do: impl().mkdir!(path)
def touch!(filename), do: impl().touch!(filename)

defp impl, do: Application.get_env(:ironman, :file, Ironman.Utils.File.DefaultImpl)
end
2 changes: 2 additions & 0 deletions lib/ironman/utils/file/default_impl.ex
Expand Up @@ -5,4 +5,6 @@ defmodule Ironman.Utils.File.DefaultImpl do
def exists?(path), do: File.exists?(path)
def read!(path), do: File.read!(path)
def write!(path, contents), do: File.write!(path, contents)
def mkdir!(path), do: File.mkdir!(path)
def touch!(filename), do: File.touch!(filename)
end
2 changes: 2 additions & 0 deletions lib/ironman/utils/file/impl.ex
Expand Up @@ -4,4 +4,6 @@ defmodule Ironman.Utils.File.Impl do
@callback exists?(path :: String.t()) :: boolean()
@callback read!(path :: String.t()) :: String.t()
@callback write!(path :: String.t(), contents :: String.t()) :: :ok
@callback mkdir!(path :: String.t()) :: :ok
@callback touch!(filename :: String.t()) :: :ok
end
21 changes: 21 additions & 0 deletions test/ironman/checks/git_hooks_config_test.exs
Expand Up @@ -66,6 +66,27 @@ defmodule Ironman.Checks.GitHooksConfigTest do
assert "use Mix.Config\n\n" = Config.get(config2, :config_test_exs)
assert "use Mix.Config\n\n" = Config.get(config2, :config_prod_exs)
end

test "runs when config not present - config directory not present" do
config =
ConfigFactory.with_deps(git_hooks: "~> 1.2.3")
|> Config.set(:config_exs, nil)
|> Config.set(:config_dev_exs, "use Mix.Config\n\n")
|> Config.set(:config_test_exs, "use Mix.Config\n\n")
|> Config.set(:config_prod_exs, "use Mix.Config\n\n")

MoxHelpers.expect_io("\nAdd git_hooks config to project? [Yn] ", "Y")
MoxHelpers.expect_directory_create("config")
MoxHelpers.expect_file_touch!("config/config.exs")

{:yes, config2} = GitHooksConfig.run(config)
assert "use Mix.Config\n\nimport_config \"\#{Mix.env()}.exs\"\n" = Config.get(config2, :config_exs)
assert String.starts_with?(Config.get(config2, :config_dev_exs), "use Mix.Config\n\n\n\nconfig :git_hooks,")
refute String.contains?(Config.get(config2, :config_dev_exs), "credo --strict")
refute String.contains?(Config.get(config2, :config_dev_exs), "dialyzer")
assert "use Mix.Config\n\n" = Config.get(config2, :config_test_exs)
assert "use Mix.Config\n\n" = Config.get(config2, :config_prod_exs)
end
end

test "includes credo line when credo dep exists" do
Expand Down
10 changes: 10 additions & 0 deletions test/support/mox_helpers.ex
Expand Up @@ -44,4 +44,14 @@ defmodule Ironman.Test.Helpers.MoxHelpers do
Ironman.MockFile
|> expect(:write!, fn ^file, ^contents -> :ok end)
end

def expect_directory_create(path) do
Ironman.MockFile
|> expect(:mkdir!, fn ^path -> :ok end)
end

def expect_file_touch!(filename) do
Ironman.MockFile
|> expect(:touch!, fn ^filename -> :ok end)
end
end

0 comments on commit 769e677

Please sign in to comment.