diff --git a/lib/polar/streams.ex b/lib/polar/streams.ex index 39410fe..5f68124 100644 --- a/lib/polar/streams.ex +++ b/lib/polar/streams.ex @@ -23,7 +23,7 @@ defmodule Polar.Streams do to: Version.Manager, as: :create - defdelegate deactivate_previous_versions(version), + defdelegate deactivate_previous_versions(event, version), to: Version.Manager, as: :deactivate_previous diff --git a/lib/polar/streams/version.ex b/lib/polar/streams/version.ex index 56faa1b..cf9dfe2 100644 --- a/lib/polar/streams/version.ex +++ b/lib/polar/streams/version.ex @@ -16,7 +16,7 @@ defmodule Polar.Streams.Version do import Ecto.Query, only: [from: 2] schema "versions" do - field :current_state, :string, default: "active" + field :current_state, :string, default: "created" field :serial, :string belongs_to :product, Product diff --git a/lib/polar/streams/version/manager.ex b/lib/polar/streams/version/manager.ex index 25813ad..0df7d2a 100644 --- a/lib/polar/streams/version/manager.ex +++ b/lib/polar/streams/version/manager.ex @@ -9,18 +9,9 @@ defmodule Polar.Streams.Version.Manager do %Version{product_id: product.id} |> Version.changeset(attrs) |> Repo.insert() - |> case do - {:ok, version} = result -> - deactivate_previous(version) - - result - - error -> - error - end end - def deactivate_previous(version) do + def deactivate_previous(event, version) do basic_setting = Globals.get("basic") bot = Polar.Accounts.Automation.get_bot!() @@ -34,7 +25,10 @@ defmodule Polar.Streams.Version.Manager do ) |> Repo.all() |> Enum.map(fn v -> - Eventful.Transit.perform(v, bot, "deactivate") + Eventful.Transit.perform(v, bot, "deactivate", + comment: "New version activated.", + parameters: %{"event_id" => event.id} + ) end) end end diff --git a/lib/polar/streams/version/transitions.ex b/lib/polar/streams/version/transitions.ex index 30e0c18..41c5ab8 100644 --- a/lib/polar/streams/version/transitions.ex +++ b/lib/polar/streams/version/transitions.ex @@ -4,6 +4,18 @@ defmodule Polar.Streams.Version.Transitions do alias Polar.Streams.Version + Version + |> transition( + [from: "created", to: "testing", via: "test"], + fn changes -> transit(changes) end + ) + + Version + |> transition( + [from: "testing", to: "active", via: "activate"], + fn changes -> transit(changes, Version.Triggers) end + ) + Version |> transition( [from: "active", to: "inactive", via: "deactivate"], diff --git a/lib/polar/streams/version/triggers.ex b/lib/polar/streams/version/triggers.ex new file mode 100644 index 0000000..b5f62ac --- /dev/null +++ b/lib/polar/streams/version/triggers.ex @@ -0,0 +1,9 @@ +defmodule Polar.Streams.Version.Triggers do + use Eventful.Trigger + + alias Polar.Streams + alias Polar.Streams.Version + + Version + |> trigger([currently: "active"], &Streams.deactivate_previous_versions/2) +end diff --git a/test/polar/streams/product/manager_test.exs b/test/polar/streams/product/manager_test.exs index da1d6a9..6cee99d 100644 --- a/test/polar/streams/product/manager_test.exs +++ b/test/polar/streams/product/manager_test.exs @@ -11,13 +11,13 @@ defmodule Polar.Streams.Product.ManagerTest do setup do password = Accounts.generate_automation_password() - _bot = bot_fixture(%{password: password}) + bot = bot_fixture(%{password: password}) - :ok + {:ok, bot: bot} end describe "filter" do - setup do + setup %{bot: bot} do {:ok, %Product{} = without_active_versions} = Streams.create_product(%{ aliases: ["alpine/3.19", "alpine/3.19/default"], @@ -44,7 +44,7 @@ defmodule Polar.Streams.Product.ManagerTest do } }) - {:ok, _version} = + {:ok, version} = Streams.create_version(with_active_versions, %{ serial: "20240209_13:00", items: [ @@ -65,6 +65,12 @@ defmodule Polar.Streams.Product.ManagerTest do ] }) + {:ok, %{resource: testing_version}} = + Eventful.Transit.perform(version, bot, "test") + + {:ok, %{resource: _active_version}} = + Eventful.Transit.perform(testing_version, bot, "activate") + {:ok, without_active_versions: without_active_versions, with_active_versions: with_active_versions} diff --git a/test/polar/streams/version/manager_test.exs b/test/polar/streams/version/manager_test.exs index bd06003..d127911 100644 --- a/test/polar/streams/version/manager_test.exs +++ b/test/polar/streams/version/manager_test.exs @@ -10,7 +10,7 @@ defmodule Polar.Streams.Version.ManagerTest do setup do password = Accounts.generate_automation_password() - _bot = bot_fixture(%{password: password}) + bot = bot_fixture(%{password: password}) {:ok, product} = Streams.create_product(%{ @@ -25,7 +25,7 @@ defmodule Polar.Streams.Version.ManagerTest do } }) - {:ok, product: product} + {:ok, product: product, bot: bot} end describe "create_version" do @@ -43,7 +43,7 @@ defmodule Polar.Streams.Version.ManagerTest do %{existing_version: version} end - test "creating a new version deactivates old versions", %{ + test "activating a new version deactivates old versions", %{ product: product, existing_version: existing_version } do