daily-tracker

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

login_test.exs (3323B)


      1 defmodule DailyTrackerWeb.UserLive.LoginTest do
      2   use DailyTrackerWeb.ConnCase, async: true
      3 
      4   import Phoenix.LiveViewTest
      5   import DailyTracker.AccountsFixtures
      6 
      7   describe "login page" do
      8     test "renders login page", %{conn: conn} do
      9       {:ok, _lv, html} = live(conn, ~p"/users/log-in")
     10 
     11       assert html =~ "Log in"
     12       assert html =~ "Register"
     13       assert html =~ "Log in with email"
     14     end
     15   end
     16 
     17   describe "user login - magic link" do
     18     test "sends magic link email when user exists", %{conn: conn} do
     19       user = user_fixture()
     20 
     21       {:ok, lv, _html} = live(conn, ~p"/users/log-in")
     22 
     23       {:ok, _lv, html} =
     24         form(lv, "#login_form_magic", user: %{email: user.email})
     25         |> render_submit()
     26         |> follow_redirect(conn, ~p"/users/log-in")
     27 
     28       assert html =~ "If your email is in our system"
     29 
     30       assert DailyTracker.Repo.get_by!(DailyTracker.Accounts.UserToken, user_id: user.id).context ==
     31                "login"
     32     end
     33 
     34     test "does not disclose if user is registered", %{conn: conn} do
     35       {:ok, lv, _html} = live(conn, ~p"/users/log-in")
     36 
     37       {:ok, _lv, html} =
     38         form(lv, "#login_form_magic", user: %{email: "idonotexist@example.com"})
     39         |> render_submit()
     40         |> follow_redirect(conn, ~p"/users/log-in")
     41 
     42       assert html =~ "If your email is in our system"
     43     end
     44   end
     45 
     46   describe "user login - password" do
     47     test "redirects if user logs in with valid credentials", %{conn: conn} do
     48       user = user_fixture() |> set_password()
     49 
     50       {:ok, lv, _html} = live(conn, ~p"/users/log-in")
     51 
     52       form =
     53         form(lv, "#login_form_password",
     54           user: %{email: user.email, password: valid_user_password(), remember_me: true}
     55         )
     56 
     57       conn = submit_form(form, conn)
     58 
     59       assert redirected_to(conn) == ~p"/"
     60     end
     61 
     62     test "redirects to login page with a flash error if credentials are invalid", %{
     63       conn: conn
     64     } do
     65       {:ok, lv, _html} = live(conn, ~p"/users/log-in")
     66 
     67       form =
     68         form(lv, "#login_form_password", user: %{email: "test@email.com", password: "123456"})
     69 
     70       render_submit(form, %{user: %{remember_me: true}})
     71 
     72       conn = follow_trigger_action(form, conn)
     73       assert Phoenix.Flash.get(conn.assigns.flash, :error) == "Invalid email or password"
     74       assert redirected_to(conn) == ~p"/users/log-in"
     75     end
     76   end
     77 
     78   describe "login navigation" do
     79     test "redirects to registration page when the Register button is clicked", %{conn: conn} do
     80       {:ok, lv, _html} = live(conn, ~p"/users/log-in")
     81 
     82       {:ok, _login_live, login_html} =
     83         lv
     84         |> element("main a", "Sign up")
     85         |> render_click()
     86         |> follow_redirect(conn, ~p"/users/register")
     87 
     88       assert login_html =~ "Register"
     89     end
     90   end
     91 
     92   describe "re-authentication (sudo mode)" do
     93     setup %{conn: conn} do
     94       user = user_fixture()
     95       %{user: user, conn: log_in_user(conn, user)}
     96     end
     97 
     98     test "shows login page with email filled in", %{conn: conn, user: user} do
     99       {:ok, _lv, html} = live(conn, ~p"/users/log-in")
    100 
    101       assert html =~ "You need to reauthenticate"
    102       refute html =~ "Register"
    103       assert html =~ "Log in with email"
    104 
    105       assert html =~
    106                ~s(<input type="email" name="user[email]" id="login_form_magic_email" value="#{user.email}")
    107     end
    108   end
    109 end