blonk is a radar for your web, where you follow vibes for cool blips on the radar
at main 99 lines 3.2 kB view raw
1defmodule ElixirBlonkWeb.UserSessionControllerTest do 2 use ElixirBlonkWeb.ConnCase, async: true 3 4 import ElixirBlonk.AccountsFixtures 5 6 setup do 7 %{user: user_fixture()} 8 end 9 10 describe "GET /users/log_in" do 11 test "renders log in page", %{conn: conn} do 12 conn = get(conn, ~p"/users/log_in") 13 response = html_response(conn, 200) 14 assert response =~ "Log in" 15 assert response =~ ~p"/users/register" 16 assert response =~ "Forgot your password?" 17 end 18 19 test "redirects if already logged in", %{conn: conn, user: user} do 20 conn = conn |> log_in_user(user) |> get(~p"/users/log_in") 21 assert redirected_to(conn) == ~p"/" 22 end 23 end 24 25 describe "POST /users/log_in" do 26 test "logs the user in", %{conn: conn, user: user} do 27 conn = 28 post(conn, ~p"/users/log_in", %{ 29 "user" => %{"email" => user.email, "password" => valid_user_password()} 30 }) 31 32 assert get_session(conn, :user_token) 33 assert redirected_to(conn) == ~p"/" 34 35 # Now do a logged in request and assert on the menu 36 conn = get(conn, ~p"/") 37 response = html_response(conn, 200) 38 assert response =~ user.email 39 assert response =~ ~p"/users/settings" 40 assert response =~ ~p"/users/log_out" 41 end 42 43 test "logs the user in with remember me", %{conn: conn, user: user} do 44 conn = 45 post(conn, ~p"/users/log_in", %{ 46 "user" => %{ 47 "email" => user.email, 48 "password" => valid_user_password(), 49 "remember_me" => "true" 50 } 51 }) 52 53 assert conn.resp_cookies["_elixir_blonk_web_user_remember_me"] 54 assert redirected_to(conn) == ~p"/" 55 end 56 57 test "logs the user in with return to", %{conn: conn, user: user} do 58 conn = 59 conn 60 |> init_test_session(user_return_to: "/foo/bar") 61 |> post(~p"/users/log_in", %{ 62 "user" => %{ 63 "email" => user.email, 64 "password" => valid_user_password() 65 } 66 }) 67 68 assert redirected_to(conn) == "/foo/bar" 69 assert Phoenix.Flash.get(conn.assigns.flash, :info) =~ "Welcome back!" 70 end 71 72 test "emits error message with invalid credentials", %{conn: conn, user: user} do 73 conn = 74 post(conn, ~p"/users/log_in", %{ 75 "user" => %{"email" => user.email, "password" => "invalid_password"} 76 }) 77 78 response = html_response(conn, 200) 79 assert response =~ "Log in" 80 assert response =~ "Invalid email or password" 81 end 82 end 83 84 describe "DELETE /users/log_out" do 85 test "logs the user out", %{conn: conn, user: user} do 86 conn = conn |> log_in_user(user) |> delete(~p"/users/log_out") 87 assert redirected_to(conn) == ~p"/" 88 refute get_session(conn, :user_token) 89 assert Phoenix.Flash.get(conn.assigns.flash, :info) =~ "Logged out successfully" 90 end 91 92 test "succeeds even if the user is not logged in", %{conn: conn} do 93 conn = delete(conn, ~p"/users/log_out") 94 assert redirected_to(conn) == ~p"/" 95 refute get_session(conn, :user_token) 96 assert Phoenix.Flash.get(conn.assigns.flash, :info) =~ "Logged out successfully" 97 end 98 end 99end