56 lines
1.9 KiB
Elixir
56 lines
1.9 KiB
Elixir
defmodule Shift73kWeb.UserLive.ResetPasswordTest do
|
|
use Shift73kWeb.ConnCase
|
|
|
|
import Phoenix.LiveViewTest
|
|
import Shift73k.AccountsFixtures
|
|
|
|
alias Shift73k.Repo
|
|
alias Shift73k.Accounts
|
|
alias Shift73k.Accounts.{User, UserToken}
|
|
|
|
setup %{conn: conn} do
|
|
user = user_fixture()
|
|
conn = init_test_session(conn, %{"user_id" => user.id})
|
|
%{conn: conn, user: user}
|
|
end
|
|
|
|
test "displays registration form", %{conn: conn, user: user} do
|
|
{:ok, _view, html} = live_isolated(conn, Shift73kWeb.UserLive.ResetPassword)
|
|
|
|
assert html =~ "Reset password\n </h2>"
|
|
assert html =~ user.email
|
|
assert html =~ "New password</label>"
|
|
end
|
|
|
|
test "render errors for invalid data", %{conn: conn} do
|
|
{:ok, view, _html} = live_isolated(conn, Shift73kWeb.UserLive.ResetPassword)
|
|
|
|
form_data = %{"user" => %{"password" => "abc", "password_confirmation" => "def"}}
|
|
html = form(view, "#pw_reset_form", form_data) |> render_change()
|
|
|
|
assert html =~ "Reset password\n </h2>"
|
|
assert html =~ "should be at least #{User.min_password()} character(s)"
|
|
assert html =~ "does not match password"
|
|
assert html =~ "type=\"submit\" disabled=\"disabled\""
|
|
end
|
|
|
|
@tag :capture_log
|
|
test "saves new password once", %{conn: conn, user: user} do
|
|
{:ok, view, _html} = live_isolated(conn, Shift73kWeb.UserLive.ResetPassword)
|
|
|
|
# Render submitting a new password
|
|
new_pw = "Valid_new_pass_123"
|
|
form_data = %{"user" => %{"password" => new_pw, "password_confirmation" => new_pw}}
|
|
_html = form(view, "#pw_reset_form", form_data) |> render_submit()
|
|
|
|
# Confirm redirected
|
|
flash = assert_redirected(view, Routes.user_session_path(conn, :new))
|
|
assert flash["info"] == "Password reset successfully."
|
|
|
|
# Confirm password was updated
|
|
assert Accounts.get_user_by_email_and_password(user.email, new_pw)
|
|
|
|
# Tokens have been deleted
|
|
assert [] == Repo.all(UserToken.user_and_contexts_query(user, :all))
|
|
end
|
|
end
|