Current section

Files

Jump to
commanded test event handler_config_test.exs
Raw

test/event/handler_config_test.exs

defmodule Commanded.Event.HandlerConfigTest do
use Commanded.StorageCase
defmodule DefaultConfigHandler do
use Commanded.Event.Handler,
name: __MODULE__
end
test "should default to `:eventual` consistency and start from `:origin`" do
{:ok, handler} = DefaultConfigHandler.start_link()
assert_config handler, [consistency: :eventual, start_from: :origin]
end
defmodule ExampleHandler do
use Commanded.Event.Handler,
name: __MODULE__,
consistency: :strong,
start_from: :current
end
describe "config provided to `start_link/1`" do
test "should use config defined in handler" do
{:ok, handler} = ExampleHandler.start_link()
assert_config handler, [consistency: :strong, start_from: :current]
end
test "should use overriden config when provided" do
{:ok, handler} = ExampleHandler.start_link(consistency: :eventual, start_from: :origin)
assert_config handler, [consistency: :eventual, start_from: :origin]
end
test "should use default config when not provided" do
{:ok, handler} = ExampleHandler.start_link(start_from: :origin)
assert_config handler, [consistency: :strong, start_from: :origin]
end
end
describe "config provided to `child_spec`" do
test "should use config defined in handler" do
{:ok, sup} = Supervisor.start_link([
ExampleHandler,
], strategy: :one_for_one)
[{_, handler, _, _}] = Supervisor.which_children(sup)
assert_config handler, [consistency: :strong, start_from: :current]
end
test "should use overriden config when provided" do
{:ok, sup} = Supervisor.start_link([
{ExampleHandler, [consistency: :eventual, start_from: :origin]},
], strategy: :one_for_one)
[{_, handler, _, _}] = Supervisor.which_children(sup)
assert_config handler, [consistency: :eventual, start_from: :origin]
end
end
defmodule InvalidConfiguredHandler do
use Commanded.Event.Handler,
name: __MODULE__,
invalid_config_option: "invalid"
end
test "should validate provided config" do
assert_raise RuntimeError, "Commanded.Event.HandlerConfigTest.InvalidConfiguredHandler specifies invalid options: [:invalid_config_option]", fn ->
Code.eval_string """
alias Commanded.Event.HandlerConfigTest.InvalidConfiguredHandler
{:ok, _pid} = InvalidConfiguredHandler.start_link()
"""
end
end
defp assert_config(handler, expected_config) do
actual_config = GenServer.call(handler, :config)
assert actual_config == expected_config
end
end