93 lines
3.2 KiB
Elixir
93 lines
3.2 KiB
Elixir
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
|