Files

93 lines
3.2 KiB
Elixir
Raw Permalink Normal View History

2026-07-04 19:27:17 +09:00
defmodule Rsh26poolWeb.RoomControllerTest do
use Rsh26poolWeb.ConnCase, async: true
alias Rsh26pool.Voting
defp valid_room_params(overrides \\ %{}) do
Map.merge(
%{
"name" => "テストルーム",
"votes_per_user" => "3",
"grouping_mode" => "false",
"leader_threshold" => "2",
"closes_at_local" => ""
},
overrides
)
end
describe "POST /create" do
test "valid params redirect to the manage page and log in the owner", %{conn: conn} do
conn = post(conn, ~p"/create", room: valid_room_params(%{"name" => "作成テスト"}))
path = redirected_to(conn)
assert "/manage/" <> number = path
assert number =~ ~r/^\d{6}$/
token = get_session(conn, "participant_token")
assert token
owner = Voting.get_participant_by_token(token)
assert owner.role == "owner"
assert owner.room.room_number == number
assert owner.room.name == "作成テスト"
end
test "invalid params re-render the form with a Japanese error and no login", %{conn: conn} do
conn = post(conn, ~p"/create", room: valid_room_params(%{"name" => ""}))
assert html_response(conn, 200)
assert Phoenix.Flash.get(conn.assigns.flash, :error) =~ "ルームを作成できませんでした"
assert get_session(conn, "participant_token") == nil
end
end
describe "POST /enter" do
test "a valid room number and name redirect to the vote page and log in", %{conn: conn} do
{:ok, %{room: room}} = Voting.create_room(valid_room_params(%{"name" => "参加先"}))
conn = post(conn, ~p"/enter", enter: %{"room_number" => room.room_number, "name" => "花子"})
assert redirected_to(conn) == ~p"/vote/#{room.room_number}"
token = get_session(conn, "participant_token")
assert token
participant = Voting.get_participant_by_token(token)
assert participant.name == "花子"
assert participant.role == "member"
assert participant.room.id == room.id
end
test "an unknown room number stays on the page with a not-found flash", %{conn: conn} do
conn = post(conn, ~p"/enter", enter: %{"room_number" => "000000", "name" => "花子"})
assert html_response(conn, 200)
assert Phoenix.Flash.get(conn.assigns.flash, :error) =~ "見つかりません"
assert get_session(conn, "participant_token") == nil
end
test "blank fields stay on the page with a validation flash", %{conn: conn} do
conn = post(conn, ~p"/enter", enter: %{"room_number" => "", "name" => ""})
assert html_response(conn, 200)
assert Phoenix.Flash.get(conn.assigns.flash, :error) =~ "ルーム番号と名前を入力してください"
assert get_session(conn, "participant_token") == nil
end
end
describe "DELETE /logout" do
test "clears the session token and redirects home", %{conn: conn} do
{:ok, %{owner: owner}} = Voting.create_room(valid_room_params())
conn =
conn
|> Plug.Test.init_test_session(%{"participant_token" => owner.token})
|> delete(~p"/logout")
assert redirected_to(conn) == ~p"/"
assert get_session(conn, "participant_token") == nil
end
end
end