diff --git a/lib/beacon/types/site.ex b/lib/beacon/types/site.ex index 3175de36a..30bd0d13a 100644 --- a/lib/beacon/types/site.ex +++ b/lib/beacon/types/site.ex @@ -36,6 +36,14 @@ defmodule Beacon.Types.Site do def valid?(_site), do: false + def valid_name?(site) when is_atom(site) do + valid_name?(Atom.to_string(site)) + end + + def valid_name?(site) when is_binary(site) do + not String.starts_with?(site, "beacon_") + end + @doc false def safe_to_atom(site) when is_atom(site), do: site def safe_to_atom(site) when is_binary(site), do: String.to_existing_atom(site) diff --git a/lib/mix/tasks/install.ex b/lib/mix/tasks/install.ex index 772da9508..8081f2206 100644 --- a/lib/mix/tasks/install.ex +++ b/lib/mix/tasks/install.ex @@ -338,6 +338,7 @@ defmodule Mix.Tasks.Beacon.Install do cond do !Beacon.Types.Site.valid?(site) -> raise_with_help!("Invalid site name. It should not contain special characters.") + !Beacon.Types.Site.valid_name?(site) -> raise_with_help!("Invalid site name. The site name can't start with \"beacon_\".") :default -> options end end diff --git a/test/beacon/types/site_test.exs b/test/beacon/types/site_test.exs index 924e4fb0f..f30296ee3 100644 --- a/test/beacon/types/site_test.exs +++ b/test/beacon/types/site_test.exs @@ -24,4 +24,14 @@ defmodule Beacon.Types.SiteTest do assert Site.load("site") == {:ok, :site} assert Site.load(0) == :error end + + describe "valid_name?/1" do + test "SUCCESS: Return TRUE if it is a valid name" do + assert Site.valid_name?("some_name") + end + + test "SUCCESS: Return FALSE if it is an invalid name" do + refute Site.valid_name?("beacon_some_name") + end + end end diff --git a/test/mix/tasks/install_test.exs b/test/mix/tasks/install_test.exs index 7495a9a64..c253e5f67 100644 --- a/test/mix/tasks/install_test.exs +++ b/test/mix/tasks/install_test.exs @@ -443,6 +443,11 @@ defmodule Mix.Tasks.Beacon.InstallTest do Install.run(["--site", "my@site!"]) end + # Invalid site name + assert_raise Mix.Error, fn -> + Install.run(["--site", "beacon_"]) + end + # Invalid option assert_raise OptionParser.ParseError, ~r/1 error found!\n--invalid-argument : Unknown option/, fn -> Install.run(["--invalid-argument", "invalid"])