defmodule Towerops.OnCallFixtures do @moduledoc """ Test helpers for creating on-call schedule and escalation policy entities. """ alias Towerops.OnCall.EscalationPolicy alias Towerops.OnCall.EscalationRule alias Towerops.OnCall.EscalationTarget alias Towerops.OnCall.Layer alias Towerops.OnCall.LayerMember alias Towerops.OnCall.Override alias Towerops.OnCall.Schedule alias Towerops.Repo def schedule_fixture(organization_id, attrs \\ %{}) do attrs = Enum.into(attrs, %{ name: "Schedule #{System.unique_integer([:positive])}", timezone: "America/Chicago", organization_id: organization_id }) %Schedule{} |> Schedule.changeset(attrs) |> Repo.insert!() end def layer_fixture(schedule_id, attrs \\ %{}) do attrs = Enum.into(attrs, %{ name: "Layer #{System.unique_integer([:positive])}", position: 1, rotation_type: "weekly", rotation_interval: 1, handoff_time: ~T[09:00:00], handoff_day: 1, start_date: ~U[2026-01-01 09:00:00Z], schedule_id: schedule_id }) %Layer{} |> Layer.changeset(attrs) |> Repo.insert!() end def layer_member_fixture(layer_id, user_id, attrs \\ %{}) do attrs = Enum.into(attrs, %{ position: 0, layer_id: layer_id, user_id: user_id }) %LayerMember{} |> LayerMember.changeset(attrs) |> Repo.insert!() end def override_fixture(schedule_id, user_id, attrs \\ %{}) do attrs = Enum.into(attrs, %{ start_time: ~U[2026-03-15 09:00:00Z], end_time: ~U[2026-03-16 09:00:00Z], schedule_id: schedule_id, user_id: user_id }) %Override{} |> Override.changeset(attrs) |> Repo.insert!() end def escalation_policy_fixture(organization_id, attrs \\ %{}) do attrs = Enum.into(attrs, %{ name: "Policy #{System.unique_integer([:positive])}", repeat_count: 3, organization_id: organization_id }) %EscalationPolicy{} |> EscalationPolicy.changeset(attrs) |> Repo.insert!() end def escalation_rule_fixture(escalation_policy_id, attrs \\ %{}) do attrs = Enum.into(attrs, %{ position: 0, timeout_minutes: 30, escalation_policy_id: escalation_policy_id }) %EscalationRule{} |> EscalationRule.changeset(attrs) |> Repo.insert!() end def escalation_target_fixture(escalation_rule_id, attrs \\ %{}) do attrs = Enum.into(attrs, %{ target_type: "user", escalation_rule_id: escalation_rule_id }) %EscalationTarget{} |> EscalationTarget.changeset(attrs) |> Repo.insert!() end end