From 789f1510fdcf95bcaf336615b5f2e802c767b4ca Mon Sep 17 00:00:00 2001 From: Neil Menne Date: Mon, 25 Jun 2018 15:12:59 -0400 Subject: [PATCH] README revelation: remove redundancy --- README.md | 2 +- lib/maestro/aggregate/root.ex | 8 ++++++-- test/maestro/aggregate_test.exs | 31 +++++++++++++++++++------------ 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 3430aff..1581829 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,6 @@ end ```elixir iex(1)> {:ok, id} = MyApp.Aggregate.new() -iex(2)> :ok = MyApp.Aggregate.evaluate(id, %Maestro.Types.Command{aggregate_id: id, type: "increment_counter", data: %{}}) +iex(2)> :ok = MyApp.Aggregate.evaluate(%Maestro.Types.Command{aggregate_id: id, type: "increment_counter", data: %{}}) iex(3)> {:ok, %{"value" => 1}} = MyApp.Aggregate.get(id) ``` diff --git a/lib/maestro/aggregate/root.ex b/lib/maestro/aggregate/root.ex index 8dbdcbe..51b8082 100644 --- a/lib/maestro/aggregate/root.ex +++ b/lib/maestro/aggregate/root.ex @@ -87,7 +87,11 @@ defmodule Maestro.Aggregate.Root do def replay(agg_id, seq), do: call(agg_id, {:replay, seq}) - def evaluate(agg_id, command), do: call(agg_id, {:eval_command, command}) + def evaluate(%Maestro.Types.Command{} = command) do + call(command.aggregate_id, {:eval_command, command}) + end + + def evaluate(_), do: raise(ArgumentError, "invalid command") def snapshot(agg_id) do with {:ok, snap} <- call(agg_id, :get_snapshot) do @@ -233,7 +237,7 @@ defmodule Maestro.Aggregate.Root do @doc """ Evaluate the command within the aggregate's context. """ - @callback evaluate(id(), command()) :: :ok | {:error, any(), stack()} + @callback evaluate(command()) :: :ok | {:error, any(), stack()} @doc """ Using the aggregate root's `prepare_snapshot` function, generate and store a diff --git a/test/maestro/aggregate_test.exs b/test/maestro/aggregate_test.exs index 66b5087..8d9f478 100644 --- a/test/maestro/aggregate_test.exs +++ b/test/maestro/aggregate_test.exs @@ -34,7 +34,7 @@ defmodule Maestro.AggregateTest do check all agg_id <- timestamp(), coms <- commands(agg_id, max_commands: 200) do for com <- coms do - :ok = SampleAggregate.evaluate(agg_id, com) + :ok = SampleAggregate.evaluate(com) end {:ok, %{"value" => value}} = SampleAggregate.get(agg_id) @@ -51,13 +51,13 @@ defmodule Maestro.AggregateTest do {:ok, %{"value" => value}} = SampleAggregate.get(agg_id) assert value == 0 - SampleAggregate.evaluate(agg_id, %Command{ + SampleAggregate.evaluate(%Command{ type: "increment_counter", aggregate_id: agg_id, data: %{} }) - SampleAggregate.evaluate(agg_id, %Command{ + SampleAggregate.evaluate(%Command{ type: "increment_counter", aggregate_id: agg_id, data: %{} @@ -69,7 +69,7 @@ defmodule Maestro.AggregateTest do {:ok, _pid} = SampleAggregate.start_link(agg_id) - SampleAggregate.evaluate(agg_id, %Command{ + SampleAggregate.evaluate(%Command{ type: "increment_counter", aggregate_id: agg_id, data: %{} @@ -91,7 +91,7 @@ defmodule Maestro.AggregateTest do commands = repeat(base_command, 10) for com <- commands do - res = SampleAggregate.evaluate(agg_id, com) + res = SampleAggregate.evaluate(com) case res do :ok -> :ok @@ -116,9 +116,16 @@ defmodule Maestro.AggregateTest do data: %{} } - {:error, err, _stack} = SampleAggregate.evaluate(agg_id, com) + {:error, err, _stack} = SampleAggregate.evaluate(com) assert err == InvalidHandlerError.exception(type: "invalid") + + assert_raise(ArgumentError, fn -> + SampleAggregate.evaluate(%{ + type: "increment_counter", + data: %{} + }) + end) end test "handler rejected command" do @@ -130,7 +137,7 @@ defmodule Maestro.AggregateTest do data: %{"do_inc" => false} } - {:error, err, _stack} = SampleAggregate.evaluate(agg_id, com) + {:error, err, _stack} = SampleAggregate.evaluate(com) assert err == InvalidCommandError.exception( @@ -147,7 +154,7 @@ defmodule Maestro.AggregateTest do data: %{"raise" => true} } - {:error, err, _stack} = SampleAggregate.evaluate(agg_id, com) + {:error, err, _stack} = SampleAggregate.evaluate(com) assert err == ArgumentError.exception( @@ -169,7 +176,7 @@ defmodule Maestro.AggregateTest do get_snapshot: fn _, _, _ -> raise(ConnectionError, "some") end do - {:error, err, _stack} = SampleAggregate.evaluate(agg_id, com) + {:error, err, _stack} = SampleAggregate.evaluate(com) assert err == ConnectionError.exception("some") end end @@ -191,9 +198,9 @@ defmodule Maestro.AggregateTest do data: %{"name" => "sample"} } - :ok = SampleAggregate.evaluate(agg_id, com) + :ok = SampleAggregate.evaluate(com) - {:error, err, _stack} = SampleAggregate.evaluate(agg_id, com) + {:error, err, _stack} = SampleAggregate.evaluate(com) assert err == InvalidCommandError.exception( @@ -204,7 +211,7 @@ defmodule Maestro.AggregateTest do com_2 = Map.put(com, :aggregate_id, agg_id_2) - {:error, err, _stack} = SampleAggregate.evaluate(agg_id_2, com_2) + {:error, err, _stack} = SampleAggregate.evaluate(com_2) assert err.__struct__ == Ecto.ConstraintError