The hidden 'false' shadow input was rendered after the checkbox, so when both were submitted the 'false' value overwrote the checkbox 'true' in the resulting params map. Move the hidden input before the checkbox so the checked value wins (matching the core_components checkbox pattern).
140 lines
4.4 KiB
Elixir
140 lines
4.4 KiB
Elixir
defmodule MicrowavepropWeb.RoverPlanningLiveTest do
|
|
use MicrowavepropWeb.ConnCase, async: true
|
|
|
|
import Phoenix.LiveViewTest
|
|
|
|
alias Microwaveprop.AccountsFixtures
|
|
alias Microwaveprop.Rover
|
|
alias Microwaveprop.RoverPlanning
|
|
alias Microwaveprop.Terrain.ElevationClient
|
|
|
|
setup do
|
|
Req.Test.stub(ElevationClient, fn conn ->
|
|
params = Plug.Conn.fetch_query_params(conn).query_params
|
|
lat_count = params["latitude"] |> String.split(",") |> length()
|
|
Req.Test.json(conn, %{"elevation" => List.duplicate(200.0, lat_count)})
|
|
end)
|
|
|
|
:ok
|
|
end
|
|
|
|
defp create_mission(user, name) do
|
|
{:ok, _} = Rover.create_location(user, %{lat: 32.0, lon: -97.0, status: :good})
|
|
|
|
{:ok, mission} =
|
|
RoverPlanning.create_mission(user, %{
|
|
"name" => name,
|
|
"band_mhz" => 10_000,
|
|
"only_known_good" => true,
|
|
"rover_height_ft" => 8.0,
|
|
"station_height_ft" => 30.0,
|
|
"stations" => %{"0" => %{"input" => "EM12kp", "position" => 0}}
|
|
})
|
|
|
|
mission
|
|
end
|
|
|
|
describe "index" do
|
|
test "anonymous visitor sees the table and a sign-in prompt", %{conn: conn} do
|
|
{:ok, _lv, html} = live(conn, ~p"/rover-planning")
|
|
assert html =~ "Rover Planning"
|
|
assert html =~ "Sign in"
|
|
end
|
|
|
|
test "logged-in user sees the New mission button", %{conn: conn} do
|
|
user = AccountsFixtures.user_fixture()
|
|
conn = log_in_user(conn, user)
|
|
{:ok, _lv, html} = live(conn, ~p"/rover-planning")
|
|
assert html =~ "New mission"
|
|
end
|
|
|
|
test "table shows existing missions and links to the show page", %{conn: conn} do
|
|
user = AccountsFixtures.user_fixture()
|
|
mission = create_mission(user, "Visible mission")
|
|
|
|
{:ok, _lv, html} = live(conn, ~p"/rover-planning")
|
|
assert html =~ "Visible mission"
|
|
assert html =~ ~s(href="/rover-planning/#{mission.id}")
|
|
end
|
|
end
|
|
|
|
describe "show" do
|
|
test "renders mission details + path table", %{conn: conn} do
|
|
user = AccountsFixtures.user_fixture()
|
|
mission = create_mission(user, "Detail mission")
|
|
|
|
{:ok, _lv, html} = live(conn, ~p"/rover-planning/#{mission.id}")
|
|
assert html =~ "Detail mission"
|
|
assert html =~ "Stationary stations"
|
|
assert html =~ "Path profiles"
|
|
end
|
|
|
|
test "redirects when mission missing", %{conn: conn} do
|
|
missing = Ecto.UUID.generate()
|
|
|
|
assert {:error, {:live_redirect, %{to: "/rover-planning"}}} =
|
|
live(conn, ~p"/rover-planning/#{missing}")
|
|
end
|
|
end
|
|
|
|
describe "form" do
|
|
test "anonymous user gets redirected to /rover-planning", %{conn: conn} do
|
|
assert {:error, {:live_redirect, %{to: "/rover-planning"}}} =
|
|
live(conn, ~p"/rover-planning/new")
|
|
end
|
|
|
|
test "typing into the form does not flip the only_known_good checkbox", %{conn: conn} do
|
|
user = AccountsFixtures.user_fixture()
|
|
conn = log_in_user(conn, user)
|
|
{:ok, lv, _html} = live(conn, ~p"/rover-planning/new")
|
|
|
|
html =
|
|
lv
|
|
|> form("#mission-form",
|
|
mission: %{
|
|
name: "Some name",
|
|
band_mhz: "10000",
|
|
rover_height_ft: "8.0",
|
|
station_height_ft: "30.0",
|
|
only_known_good: "true",
|
|
stations: %{"0" => %{input: ""}}
|
|
}
|
|
)
|
|
|> render_change()
|
|
|
|
# The default-checked box must STILL be checked after a phx-change.
|
|
# Hidden "false" + checkbox "true" with hidden first = checkbox wins.
|
|
assert html =~
|
|
~s(name="mission[only_known_good]" value="true" checked)
|
|
end
|
|
|
|
test "logged-in user can create a mission with a callsign-input station",
|
|
%{conn: conn} do
|
|
user = AccountsFixtures.user_fixture()
|
|
{:ok, _} = Rover.create_location(user, %{lat: 32.0, lon: -97.0, status: :good})
|
|
conn = log_in_user(conn, user)
|
|
|
|
{:ok, lv, html} = live(conn, ~p"/rover-planning/new")
|
|
assert html =~ "Only check against known good locations"
|
|
assert html =~ ~s(checked)
|
|
|
|
{:error, {:live_redirect, %{to: redirect_to}}} =
|
|
lv
|
|
|> form("#mission-form",
|
|
mission: %{
|
|
name: "From form",
|
|
band_mhz: "10000",
|
|
only_known_good: "true",
|
|
rover_height_ft: "8.0",
|
|
station_height_ft: "30.0",
|
|
stations: %{
|
|
"0" => %{input: "EM12kp"}
|
|
}
|
|
}
|
|
)
|
|
|> render_submit()
|
|
|
|
assert redirect_to =~ ~r{^/rover-planning/[0-9a-f-]+$}
|
|
end
|
|
end
|
|
end
|