diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fad94273..f848d60f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,7 +44,7 @@ jobs: fail-fast: false matrix: include: - - elixir: 1.18.x + - elixir: 1.19.x otp: 27 steps: diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 00000000..c6f8cdff --- /dev/null +++ b/.tool-versions @@ -0,0 +1,2 @@ +elixir 1.19-otp-27 +erlang 27.3.2 diff --git a/lib/commanded/aggregates/aggregate.ex b/lib/commanded/aggregates/aggregate.ex index 37e7a514..f16057ad 100644 --- a/lib/commanded/aggregates/aggregate.ex +++ b/lib/commanded/aggregates/aggregate.ex @@ -361,7 +361,7 @@ defmodule Commanded.Aggregates.Aggregate do # be taken. When it finishes, it will set the timeout. {:reply, formatted_reply, state} else - state = %Aggregate{state | lifespan_timeout: lifespan_timeout} + state = %{state | lifespan_timeout: lifespan_timeout} reply_with_lifespan(formatted_reply, state) end diff --git a/lib/commanded/aggregates/aggregate_state_builder.ex b/lib/commanded/aggregates/aggregate_state_builder.ex index a6f135a3..21634ae3 100644 --- a/lib/commanded/aggregates/aggregate_state_builder.ex +++ b/lib/commanded/aggregates/aggregate_state_builder.ex @@ -96,7 +96,7 @@ defmodule Commanded.Aggregates.AggregateStateBuilder do %RecordedEvent{data: data, stream_version: stream_version} = event %Aggregate{aggregate_module: aggregate_module, aggregate_state: aggregate_state} = state - state = %Aggregate{ + state = %{ state | aggregate_version: stream_version, aggregate_state: aggregate_module.apply(aggregate_state, data) diff --git a/mix.exs b/mix.exs index f95048d4..4aebaf6e 100644 --- a/mix.exs +++ b/mix.exs @@ -20,23 +20,24 @@ defmodule Commanded.Mixfile do start_permanent: Mix.env() == :prod, consolidate_protocols: Mix.env() == :prod, dialyzer: dialyzer(), - source_url: @source_url, - preferred_cli_env: preferred_cli_env() + source_url: @source_url ] end - def application do + def cli do [ - extra_applications: extra_applications(Mix.env()), - mod: {Commanded, []} + preferred_envs: [ + setup: :test, + reset: :test, + "test.all": :test + ] ] end - defp preferred_cli_env do + def application do [ - setup: :test, - reset: :test, - "test.all": :test + extra_applications: extra_applications(Mix.env()), + mod: {Commanded, []} ] end diff --git a/test/aggregates/aggregate_subscription_test.exs b/test/aggregates/aggregate_subscription_test.exs index 54ea430d..833ace49 100644 --- a/test/aggregates/aggregate_subscription_test.exs +++ b/test/aggregates/aggregate_subscription_test.exs @@ -60,12 +60,9 @@ defmodule Commanded.Aggregates.AggregateSubscriptionTest do events = EventStore.stream_forward(DefaultApp, account_number) |> Enum.to_list() - |> Enum.map(fn recorded_event -> + |> Enum.map(fn %EventStore.RecordedEvent{} = recorded_event -> # specify invalid stream version - %EventStore.RecordedEvent{ - recorded_event - | stream_version: 999 - } + %{recorded_event | stream_version: 999} end) # send invalid events, should stop the aggregate process diff --git a/test/event/support/error/error_event_handler.ex b/test/event/support/error/error_event_handler.ex index 8cc12c0a..7862ce24 100644 --- a/test/event/support/error/error_event_handler.ex +++ b/test/event/support/error/error_event_handler.ex @@ -67,7 +67,7 @@ defmodule Commanded.Event.ErrorEventHandler do def error( {:error, :failed}, %ErrorEvent{strategy: "retry_failure_context"} = event, - failure_context + %FailureContext{} = failure_context ) do %ErrorEvent{delay: delay, reply_to: reply_to} = event %FailureContext{context: context} = failure_context @@ -78,7 +78,7 @@ defmodule Commanded.Event.ErrorEventHandler do |> Map.put(:delay, delay) # Record failure count in context map - failure_context = %FailureContext{failure_context | context: context} + failure_context = %{failure_context | context: context} if Map.get(context, :failures) >= 3 do # Stop error handler after third failure