test/openagents/deployments/lifecycle_test.exs

58e6347eeb72 · 1 KB

defmodule OpenAgents.Deployments.LifecycleTest do
  use ExUnit.Case, async: true

  alias OpenAgents.Deployments.Lifecycle

  test "every terminal state is final" do
    for state <- ~w(succeeded failed cancelled superseded) do
      assert Lifecycle.successors(state) == []
    end
  end

  test "only a deploying run can succeed" do
    for {state, successors} <- Lifecycle.transitions(), state != "deploying" do
      refute "succeeded" in successors
    end

    assert Lifecycle.allowed?("deploying", "succeeded")
  end

  test "a run cannot skip the provider" do
    refute Lifecycle.allowed?("queued", "succeeded")
    refute Lifecycle.allowed?("requested", "deploying")
  end

  test "a deploying run cannot be superseded out from under the provider" do
    refute Lifecycle.allowed?("deploying", "superseded")
    assert Lifecycle.allowed?("deploying", "cancelled")
  end

  test "an illegal transition is reported as itself" do
    assert Lifecycle.check("succeeded", "deploying") ==
             {:error, {:illegal_transition, "succeeded", "deploying"}}

    assert Lifecycle.check("queued", "deploying") == :ok
  end

  test "an unknown state has no successors" do
    assert Lifecycle.successors("nonsense") == []
    refute Lifecycle.allowed?("nonsense", "queued")
  end
end