Fix remaining 12 multi-line conn shadowing issues
Manually refactor multi-line conn = post/put(conn, ...) patterns across user_session, user_settings, and user_registration controller tests. Rename shadowed conn to response using pipeline operator. Also add plans/multi-line-conn-refactoring.md spec for future Elixir-based tooling to handle these patterns automatically.
This commit is contained in:
@@ -25,15 +25,16 @@ defmodule FirehoseWeb.UserRegistrationControllerTest do
|
||||
Application.put_env(:firehose, :allowed_registration_email, email)
|
||||
on_exit(fn -> Application.delete_env(:firehose, :allowed_registration_email) end)
|
||||
|
||||
conn =
|
||||
post(conn, ~p"/users/register", %{
|
||||
response =
|
||||
conn
|
||||
|> post(~p"/users/register", %{
|
||||
"user" => valid_user_attributes(email: email)
|
||||
})
|
||||
|
||||
refute get_session(conn, :user_token)
|
||||
assert redirected_to(conn) == ~p"/users/log-in"
|
||||
refute get_session(response, :user_token)
|
||||
assert redirected_to(response) == ~p"/users/log-in"
|
||||
|
||||
assert conn.assigns.flash["info"] =~
|
||||
assert response.assigns.flash["info"] =~
|
||||
~r/An email was sent to .*, please access it to confirm your account/
|
||||
end
|
||||
|
||||
@@ -41,12 +42,13 @@ defmodule FirehoseWeb.UserRegistrationControllerTest do
|
||||
Application.put_env(:firehose, :allowed_registration_email, "with spaces")
|
||||
on_exit(fn -> Application.delete_env(:firehose, :allowed_registration_email) end)
|
||||
|
||||
conn =
|
||||
post(conn, ~p"/users/register", %{
|
||||
response =
|
||||
conn
|
||||
|> post(~p"/users/register", %{
|
||||
"user" => %{"email" => "with spaces"}
|
||||
})
|
||||
|> html_response(200)
|
||||
|
||||
response = html_response(conn, 200)
|
||||
assert response =~ "Register"
|
||||
assert response =~ "must have the @ sign and no spaces"
|
||||
end
|
||||
|
||||
@@ -73,20 +73,22 @@ defmodule FirehoseWeb.UserSessionControllerTest do
|
||||
test "logs the user in", %{conn: conn, user: user} do
|
||||
user = set_password(user)
|
||||
|
||||
conn =
|
||||
post(conn, ~p"/users/log-in", %{
|
||||
response =
|
||||
conn
|
||||
|> post(~p"/users/log-in", %{
|
||||
"user" => %{"email" => user.email, "password" => valid_user_password()}
|
||||
})
|
||||
|
||||
assert get_session(conn, :user_token)
|
||||
assert redirected_to(conn) == ~p"/"
|
||||
assert get_session(response, :user_token)
|
||||
assert redirected_to(response) == ~p"/"
|
||||
end
|
||||
|
||||
test "logs the user in with remember me", %{conn: conn, user: user} do
|
||||
user = set_password(user)
|
||||
|
||||
conn =
|
||||
post(conn, ~p"/users/log-in", %{
|
||||
response =
|
||||
conn
|
||||
|> post(~p"/users/log-in", %{
|
||||
"user" => %{
|
||||
"email" => user.email,
|
||||
"password" => valid_user_password(),
|
||||
@@ -94,14 +96,14 @@ defmodule FirehoseWeb.UserSessionControllerTest do
|
||||
}
|
||||
})
|
||||
|
||||
assert conn.resp_cookies["_firehose_web_user_remember_me"]
|
||||
assert redirected_to(conn) == ~p"/"
|
||||
assert response.resp_cookies["_firehose_web_user_remember_me"]
|
||||
assert redirected_to(response) == ~p"/"
|
||||
end
|
||||
|
||||
test "logs the user in with return to", %{conn: conn, user: user} do
|
||||
user = set_password(user)
|
||||
|
||||
conn =
|
||||
response =
|
||||
conn
|
||||
|> init_test_session(user_return_to: "/foo/bar")
|
||||
|> post(~p"/users/log-in", %{
|
||||
@@ -111,17 +113,18 @@ defmodule FirehoseWeb.UserSessionControllerTest do
|
||||
}
|
||||
})
|
||||
|
||||
assert redirected_to(conn) == "/foo/bar"
|
||||
assert Phoenix.Flash.get(conn.assigns.flash, :info) =~ "Welcome back!"
|
||||
assert redirected_to(response) == "/foo/bar"
|
||||
assert Phoenix.Flash.get(response.assigns.flash, :info) =~ "Welcome back!"
|
||||
end
|
||||
|
||||
test "emits error message with invalid credentials", %{conn: conn, user: user} do
|
||||
conn =
|
||||
post(conn, ~p"/users/log-in?mode=password", %{
|
||||
response =
|
||||
conn
|
||||
|> post(~p"/users/log-in?mode=password", %{
|
||||
"user" => %{"email" => user.email, "password" => "invalid_password"}
|
||||
})
|
||||
|> html_response(200)
|
||||
|
||||
response = html_response(conn, 200)
|
||||
assert response =~ "Log in"
|
||||
assert response =~ "Invalid email or password"
|
||||
end
|
||||
@@ -129,51 +132,56 @@ defmodule FirehoseWeb.UserSessionControllerTest do
|
||||
|
||||
describe "POST /users/log-in - magic link" do
|
||||
test "sends magic link email when user exists", %{conn: conn, user: user} do
|
||||
conn =
|
||||
post(conn, ~p"/users/log-in", %{
|
||||
response =
|
||||
conn
|
||||
|> post(~p"/users/log-in", %{
|
||||
"user" => %{"email" => user.email}
|
||||
})
|
||||
|
||||
assert Phoenix.Flash.get(conn.assigns.flash, :info) =~ "If your email is in our system"
|
||||
assert Phoenix.Flash.get(response.assigns.flash, :info) =~ "If your email is in our system"
|
||||
assert Firehose.Repo.get_by!(Accounts.UserToken, user_id: user.id).context == "login"
|
||||
end
|
||||
|
||||
test "logs the user in", %{conn: conn, user: user} do
|
||||
{token, _hashed_token} = generate_user_magic_link_token(user)
|
||||
|
||||
conn =
|
||||
post(conn, ~p"/users/log-in", %{
|
||||
response =
|
||||
conn
|
||||
|> post(~p"/users/log-in", %{
|
||||
"user" => %{"token" => token}
|
||||
})
|
||||
|
||||
assert get_session(conn, :user_token)
|
||||
assert redirected_to(conn) == ~p"/"
|
||||
assert get_session(response, :user_token)
|
||||
assert redirected_to(response) == ~p"/"
|
||||
end
|
||||
|
||||
test "confirms unconfirmed user", %{conn: conn, unconfirmed_user: user} do
|
||||
{token, _hashed_token} = generate_user_magic_link_token(user)
|
||||
refute user.confirmed_at
|
||||
|
||||
conn =
|
||||
post(conn, ~p"/users/log-in", %{
|
||||
response =
|
||||
conn
|
||||
|> post(~p"/users/log-in", %{
|
||||
"user" => %{"token" => token},
|
||||
"_action" => "confirmed"
|
||||
})
|
||||
|
||||
assert get_session(conn, :user_token)
|
||||
assert redirected_to(conn) == ~p"/"
|
||||
assert Phoenix.Flash.get(conn.assigns.flash, :info) =~ "User confirmed successfully."
|
||||
assert get_session(response, :user_token)
|
||||
assert redirected_to(response) == ~p"/"
|
||||
assert Phoenix.Flash.get(response.assigns.flash, :info) =~ "User confirmed successfully."
|
||||
|
||||
assert Accounts.get_user!(user.id).confirmed_at
|
||||
end
|
||||
|
||||
test "emits error message when magic link is invalid", %{conn: conn} do
|
||||
conn =
|
||||
post(conn, ~p"/users/log-in", %{
|
||||
response =
|
||||
conn
|
||||
|> post(~p"/users/log-in", %{
|
||||
"user" => %{"token" => "invalid"}
|
||||
})
|
||||
|> html_response(200)
|
||||
|
||||
assert html_response(conn, 200) =~ "The link is invalid or it has expired."
|
||||
assert response =~ "The link is invalid or it has expired."
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -71,28 +71,30 @@ defmodule FirehoseWeb.UserSettingsControllerTest do
|
||||
describe "PUT /users/settings (change email form)" do
|
||||
@tag :capture_log
|
||||
test "updates the user email", %{conn: conn, user: user} do
|
||||
conn =
|
||||
put(conn, ~p"/users/settings", %{
|
||||
response =
|
||||
conn
|
||||
|> put(~p"/users/settings", %{
|
||||
"action" => "update_email",
|
||||
"user" => %{"email" => unique_user_email()}
|
||||
})
|
||||
|
||||
assert redirected_to(conn) == ~p"/users/settings"
|
||||
assert redirected_to(response) == ~p"/users/settings"
|
||||
|
||||
assert Phoenix.Flash.get(conn.assigns.flash, :info) =~
|
||||
assert Phoenix.Flash.get(response.assigns.flash, :info) =~
|
||||
"A link to confirm your email"
|
||||
|
||||
assert Accounts.get_user_by_email(user.email)
|
||||
end
|
||||
|
||||
test "does not update email on invalid data", %{conn: conn} do
|
||||
conn =
|
||||
put(conn, ~p"/users/settings", %{
|
||||
response =
|
||||
conn
|
||||
|> put(~p"/users/settings", %{
|
||||
"action" => "update_email",
|
||||
"user" => %{"email" => "with spaces"}
|
||||
})
|
||||
|> html_response(200)
|
||||
|
||||
response = html_response(conn, 200)
|
||||
assert response =~ "Settings"
|
||||
assert response =~ "must have the @ sign and no spaces"
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user