diff --git a/lib/ash_gen_server/server.ex b/lib/ash_gen_server/server.ex index ce422ec..766c2ec 100644 --- a/lib/ash_gen_server/server.ex +++ b/lib/ash_gen_server/server.ex @@ -122,6 +122,10 @@ defmodule AshGenServer.Server do end end + def handle_info(:keep_alive, state) do + {:noreply, maybe_set_inactivity_timer(state)} + end + defp primary_key_from_resource_and_changeset(resource, changeset) do resource |> Resource.Info.primary_key() diff --git a/test/ash_gen_server/server_test.exs b/test/ash_gen_server/server_test.exs index 06e9fb4..6d793bf 100644 --- a/test/ash_gen_server/server_test.exs +++ b/test/ash_gen_server/server_test.exs @@ -38,4 +38,17 @@ defmodule AshGenServer.ServerTest do refute state.record.nickname end end + + describe "handle_info/3" do + test "when send :keep_alive to server resets inactivity timer" do + changeset = + TimeTravel.Character + |> Changeset.for_create(:create, %{name: "Biff Tannen", current_year: 2015}) + + {:ok, old_state} = Server.init([TimeTravel.Character, changeset]) + {:noreply, new_state} = Server.handle_info(:keep_alive, old_state) + + refute old_state.inactivity_timer == new_state.inactivity_timer + end + end end diff --git a/test/support/time_travel/character.ex b/test/support/time_travel/character.ex index 7860352..61250e6 100644 --- a/test/support/time_travel/character.ex +++ b/test/support/time_travel/character.ex @@ -37,4 +37,8 @@ defmodule TimeTravel.Character do create_timestamp(:created_at) update_timestamp(:updated_at) end + + gen_server do + inactivity_timeout(:timer.minutes(1)) + end end