defmodule Microwaveprop.Radio.ContactTest do use Microwaveprop.DataCase, async: true alias Microwaveprop.Radio.Contact @valid_attrs %{ station1: "W1AW", station2: "K3LR", qso_timestamp: ~U[2026-03-28 12:00:00Z], grid1: "FN31pr", grid2: "EN91jm", pos1: %{lat: 41.714, lon: -72.727}, pos2: %{lat: 41.049, lon: -80.166}, mode: "SSB", band: Decimal.new("144.2"), distance_km: Decimal.new("623.4") } describe "changeset/2" do test "valid attributes" do changeset = Contact.changeset(%Contact{}, @valid_attrs) assert changeset.valid? end test "requires station1, station2, qso_timestamp, and band (mode is optional)" do changeset = Contact.changeset(%Contact{}, %{}) errors = errors_on(changeset) assert errors.station1 == ["can't be blank"] assert errors.station2 == ["can't be blank"] assert errors.qso_timestamp == ["can't be blank"] assert errors.band == ["can't be blank"] refute Map.has_key?(errors, :mode) end test "persists to the database" do changeset = Contact.changeset(%Contact{}, @valid_attrs) assert {:ok, contact} = Repo.insert(changeset) assert contact.station1 == "W1AW" assert contact.station2 == "K3LR" assert contact.mode == "SSB" assert Decimal.equal?(contact.band, Decimal.new("144.2")) assert Decimal.equal?(contact.distance_km, Decimal.new("623.4")) end test "accepts optional height1_ft and height2_ft" do attrs = Map.merge(@valid_attrs, %{height1_ft: 25, height2_ft: 60}) changeset = Contact.changeset(%Contact{}, attrs) assert changeset.valid? assert {:ok, contact} = Repo.insert(changeset) assert contact.height1_ft == 25 assert contact.height2_ft == 60 end end describe "submission_changeset/2" do @submission_attrs %{ "station1" => "W1AW", "station2" => "K3LR", "qso_timestamp" => "2026-03-28T12:00:00Z", "grid1" => "FN31pr", "grid2" => "EN91jm", "mode" => "SSB", "band" => Decimal.new("144"), "submitter_email" => "test@example.com" } test "accepts height1_ft and height2_ft" do attrs = Map.merge(@submission_attrs, %{"height1_ft" => 10, "height2_ft" => 50}) changeset = Contact.submission_changeset(%Contact{}, attrs) assert changeset.valid?, inspect(errors_on(changeset)) assert Ecto.Changeset.get_field(changeset, :height1_ft) == 10 assert Ecto.Changeset.get_field(changeset, :height2_ft) == 50 end end end