feat: add decimal type support to ApplicationSetting
This commit is contained in:
parent
7d61d8fb0a
commit
a16ce2b9dd
2 changed files with 29 additions and 1 deletions
|
|
@ -35,7 +35,7 @@ defmodule Towerops.Settings.ApplicationSetting do
|
|||
setting
|
||||
|> cast(attrs, [:key, :value, :value_type, :description])
|
||||
|> validate_required([:key, :value_type])
|
||||
|> validate_inclusion(:value_type, ["string", "integer", "uuid", "boolean", "json"])
|
||||
|> validate_inclusion(:value_type, ["string", "integer", "uuid", "boolean", "json", "decimal"])
|
||||
|> unique_constraint(:key)
|
||||
end
|
||||
|
||||
|
|
@ -72,4 +72,11 @@ defmodule Towerops.Settings.ApplicationSetting do
|
|||
{:error, _} -> nil
|
||||
end
|
||||
end
|
||||
|
||||
def parse_value(%__MODULE__{value: value, value_type: "decimal"}) do
|
||||
case Decimal.parse(value) do
|
||||
{decimal, _remainder} -> decimal
|
||||
:error -> nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -50,6 +50,27 @@ defmodule Towerops.SettingsTest do
|
|||
{:ok, _setting} = create_setting("test_invalid_json", "not json", "json")
|
||||
assert Settings.get_setting("test_invalid_json") == nil
|
||||
end
|
||||
|
||||
test "parses decimal values correctly" do
|
||||
{:ok, _setting} = create_setting("test_decimal", "123.45", "decimal")
|
||||
|
||||
result = Settings.get_setting("test_decimal")
|
||||
assert result == Decimal.new("123.45")
|
||||
assert %Decimal{} = result
|
||||
end
|
||||
|
||||
test "returns nil for invalid decimal" do
|
||||
{:ok, _setting} = create_setting("test_invalid_decimal", "not_a_number", "decimal")
|
||||
|
||||
assert Settings.get_setting("test_invalid_decimal") == nil
|
||||
end
|
||||
|
||||
test "parses decimal with remainder correctly" do
|
||||
{:ok, _setting} = create_setting("test_decimal_remainder", "123.45abc", "decimal")
|
||||
|
||||
# Decimal.parse stops at invalid chars, returns parsed portion
|
||||
assert Settings.get_setting("test_decimal_remainder") == Decimal.new("123.45")
|
||||
end
|
||||
end
|
||||
|
||||
describe "get_setting_record/1" do
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue