Skip to content

Commit

Permalink
Merge branch 'disabled-flags-should-have-disabled-variants' into 'main'
Browse files Browse the repository at this point in the history
Disabled flags should not produce an active variant

See merge request afontaine/unleash_ex!20
  • Loading branch information
Andrew Fontaine committed Apr 30, 2021
2 parents 6e60fc4 + 40bf06e commit c098a16
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 17 deletions.
48 changes: 32 additions & 16 deletions lib/unleash/variant.ex
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,12 @@ defmodule Unleash.Variant do
optional(:payload) => map()
}

def select_variant(%Feature{variants: variants, name: name}, context)
def select_variant(%Feature{variants: variants} = feature, context)
when is_list(variants) and length(variants) > 0 do
total_weight =
variants
|> Enum.map(fn %{weight: w} -> w end)
|> Enum.sum()

variants
|> find_override(context)
|> case do
nil ->
variants
|> find_variant(Utils.normalize(get_seed(context), name, total_weight))

v ->
v
case Feature.enabled?(feature, context) do
true -> variants(feature, context)
_ -> disabled()
end
|> to_map(true)
end

def from_map(map) when is_map(map) do
Expand Down Expand Up @@ -100,4 +88,32 @@ defmodule Unleash.Variant do
defp get_context_name("userId"), do: :user_id
defp get_context_name("sessionId"), do: :session_id
defp get_context_name("remoteAddress"), do: :remote_address

defp disabled do
%{
enabled: false,
name: "disabled",
payload: %{}
}
end

defp variants(%Feature{variants: variants, name: name}, context)
when is_list(variants) and length(variants) > 0 do
total_weight =
variants
|> Enum.map(fn %{weight: w} -> w end)
|> Enum.sum()

variants
|> find_override(context)
|> case do
nil ->
variants
|> find_variant(Utils.normalize(get_seed(context), name, total_weight))

v ->
v
end
|> to_map(true)
end
end
47 changes: 47 additions & 0 deletions test/unleash/variant_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
defmodule Unleash.VariantTest do
use ExUnit.Case

setup :start_repo

test "return a disabled variant if the flag is disabled" do
assert %{
enabled: false,
name: "disabled",
payload: %{}
} == Unleash.get_variant(:disabled_variant)
end

defp start_repo(_) do
stop_supervised(Unleash.Repo)

state = Unleash.Features.from_map!(state())

{:ok, _pid} = start_supervised({Unleash.Repo, state})
:ok
end

defp state,
do: %{
"version" => 1,
"features" => [
%{
"name" => "disabled_variant",
"description" => "variant with enabled set to false",
"enabled" => false,
"strategies" => [
%{
"name" => "default",
"parameters" => %{}
}
],
"variants" => [
%{
"name" => "variant1",
"weight" => 100,
"payload" => %{"type" => "string", "value" => "val1"}
}
]
}
]
}
end
2 changes: 1 addition & 1 deletion test/unleash_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ defmodule UnleashTest do
"name" => "variant",
"description" => "variant",
"enabled" => true,
"startegies" => [
"strategies" => [
%{
"name" => "default",
"parameters" => %{}
Expand Down

0 comments on commit c098a16

Please sign in to comment.