pass user auth test
This commit is contained in:
		| @@ -17,30 +17,33 @@ defmodule CanneryWeb.UserAuthTest do | ||||
|       |> Map.replace!(:secret_key_base, CanneryWeb.Endpoint.config(:secret_key_base)) | ||||
|       |> init_test_session(%{}) | ||||
|  | ||||
|     %{user: user_fixture(), conn: conn} | ||||
|     [current_user: user_fixture() |> confirm_user(), conn: conn] | ||||
|   end | ||||
|  | ||||
|   describe "log_in_user/3" do | ||||
|     test "stores the user token in the session", %{conn: conn, user: user} do | ||||
|       conn = UserAuth.log_in_user(conn, user) | ||||
|     test "stores the user token in the session", %{conn: conn, current_user: current_user} do | ||||
|       conn = UserAuth.log_in_user(conn, current_user) | ||||
|       assert token = get_session(conn, :user_token) | ||||
|       assert get_session(conn, :live_socket_id) == "users_sessions:#{Base.url_encode64(token)}" | ||||
|       assert redirected_to(conn) == "/" | ||||
|       assert Accounts.get_user_by_session_token(token) | ||||
|     end | ||||
|  | ||||
|     test "clears everything previously stored in the session", %{conn: conn, user: user} do | ||||
|       conn = conn |> put_session(:to_be_removed, "value") |> UserAuth.log_in_user(user) | ||||
|     test "clears everything previously stored in the session", | ||||
|          %{conn: conn, current_user: current_user} do | ||||
|       conn = conn |> put_session(:to_be_removed, "value") |> UserAuth.log_in_user(current_user) | ||||
|       refute get_session(conn, :to_be_removed) | ||||
|     end | ||||
|  | ||||
|     test "redirects to the configured path", %{conn: conn, user: user} do | ||||
|       conn = conn |> put_session(:user_return_to, "/hello") |> UserAuth.log_in_user(user) | ||||
|     test "redirects to the configured path", %{conn: conn, current_user: current_user} do | ||||
|       conn = conn |> put_session(:user_return_to, "/hello") |> UserAuth.log_in_user(current_user) | ||||
|       assert redirected_to(conn) == "/hello" | ||||
|     end | ||||
|  | ||||
|     test "writes a cookie if remember_me is configured", %{conn: conn, user: user} do | ||||
|       conn = conn |> fetch_cookies() |> UserAuth.log_in_user(user, %{"remember_me" => "true"}) | ||||
|     test "writes a cookie if remember_me is configured", %{conn: conn, current_user: current_user} do | ||||
|       conn = | ||||
|         conn |> fetch_cookies() |> UserAuth.log_in_user(current_user, %{"remember_me" => "true"}) | ||||
|  | ||||
|       assert get_session(conn, :user_token) == conn.cookies[@remember_me_cookie] | ||||
|  | ||||
|       assert %{value: signed_token, max_age: max_age} = conn.resp_cookies[@remember_me_cookie] | ||||
| @@ -50,8 +53,8 @@ defmodule CanneryWeb.UserAuthTest do | ||||
|   end | ||||
|  | ||||
|   describe "logout_user/1" do | ||||
|     test "erases session and cookies", %{conn: conn, user: user} do | ||||
|       user_token = Accounts.generate_user_session_token(user) | ||||
|     test "erases session and cookies", %{conn: conn, current_user: current_user} do | ||||
|       user_token = Accounts.generate_user_session_token(current_user) | ||||
|  | ||||
|       conn = | ||||
|         conn | ||||
| @@ -90,15 +93,15 @@ defmodule CanneryWeb.UserAuthTest do | ||||
|   end | ||||
|  | ||||
|   describe "fetch_current_user/2" do | ||||
|     test "authenticates user from session", %{conn: conn, user: user} do | ||||
|       user_token = Accounts.generate_user_session_token(user) | ||||
|     test "authenticates user from session", %{conn: conn, current_user: current_user} do | ||||
|       user_token = Accounts.generate_user_session_token(current_user) | ||||
|       conn = conn |> put_session(:user_token, user_token) |> UserAuth.fetch_current_user([]) | ||||
|       assert conn.assigns.current_user.id == user.id | ||||
|       assert conn.assigns.current_user.id == current_user.id | ||||
|     end | ||||
|  | ||||
|     test "authenticates user from cookies", %{conn: conn, user: user} do | ||||
|     test "authenticates user from cookies", %{conn: conn, current_user: current_user} do | ||||
|       logged_in_conn = | ||||
|         conn |> fetch_cookies() |> UserAuth.log_in_user(user, %{"remember_me" => "true"}) | ||||
|         conn |> fetch_cookies() |> UserAuth.log_in_user(current_user, %{"remember_me" => "true"}) | ||||
|  | ||||
|       user_token = logged_in_conn.cookies[@remember_me_cookie] | ||||
|       %{value: signed_token} = logged_in_conn.resp_cookies[@remember_me_cookie] | ||||
| @@ -109,11 +112,11 @@ defmodule CanneryWeb.UserAuthTest do | ||||
|         |> UserAuth.fetch_current_user([]) | ||||
|  | ||||
|       assert get_session(conn, :user_token) == user_token | ||||
|       assert conn.assigns.current_user.id == user.id | ||||
|       assert conn.assigns.current_user.id == current_user.id | ||||
|     end | ||||
|  | ||||
|     test "does not authenticate if data is missing", %{conn: conn, user: user} do | ||||
|       _ = Accounts.generate_user_session_token(user) | ||||
|     test "does not authenticate if data is missing", %{conn: conn, current_user: current_user} do | ||||
|       _ = Accounts.generate_user_session_token(current_user) | ||||
|       conn = UserAuth.fetch_current_user(conn, []) | ||||
|       refute get_session(conn, :user_token) | ||||
|       refute conn.assigns.current_user | ||||
| @@ -121,8 +124,12 @@ defmodule CanneryWeb.UserAuthTest do | ||||
|   end | ||||
|  | ||||
|   describe "redirect_if_user_is_authenticated/2" do | ||||
|     test "redirects if user is authenticated", %{conn: conn, user: user} do | ||||
|       conn = conn |> assign(:current_user, user) |> UserAuth.redirect_if_user_is_authenticated([]) | ||||
|     test "redirects if user is authenticated", %{conn: conn, current_user: current_user} do | ||||
|       conn = | ||||
|         conn | ||||
|         |> assign(:current_user, current_user) | ||||
|         |> UserAuth.redirect_if_user_is_authenticated([]) | ||||
|  | ||||
|       assert conn.halted | ||||
|       assert redirected_to(conn) == "/" | ||||
|     end | ||||
| @@ -139,7 +146,9 @@ defmodule CanneryWeb.UserAuthTest do | ||||
|       conn = conn |> fetch_flash() |> UserAuth.require_authenticated_user([]) | ||||
|       assert conn.halted | ||||
|       assert redirected_to(conn) == Routes.user_session_path(conn, :new) | ||||
|       assert get_flash(conn, :error) == dgettext("errors", "You must log in to access this page.") | ||||
|  | ||||
|       assert get_flash(conn, :error) == | ||||
|                dgettext("errors", "You must confirm your account and log in to access this page.") | ||||
|     end | ||||
|  | ||||
|     test "stores the path to redirect to on GET", %{conn: conn} do | ||||
| @@ -168,8 +177,10 @@ defmodule CanneryWeb.UserAuthTest do | ||||
|       refute get_session(halted_conn, :user_return_to) | ||||
|     end | ||||
|  | ||||
|     test "does not redirect if user is authenticated", %{conn: conn, user: user} do | ||||
|       conn = conn |> assign(:current_user, user) |> UserAuth.require_authenticated_user([]) | ||||
|     test "does not redirect if user is authenticated", %{conn: conn, current_user: current_user} do | ||||
|       conn = | ||||
|         conn |> assign(:current_user, current_user) |> UserAuth.require_authenticated_user([]) | ||||
|  | ||||
|       refute conn.halted | ||||
|       refute conn.status | ||||
|     end | ||||
|   | ||||
| @@ -49,15 +49,19 @@ defmodule CanneryWeb.ConnCase do | ||||
|   It stores an updated connection and a registered user in the | ||||
|   test context. | ||||
|   """ | ||||
|   @spec register_and_log_in_user(%{conn: Plug.Conn.t()}) :: | ||||
|           %{conn: Plug.Conn.t(), current_user: User.t()} | ||||
|   def register_and_log_in_user(%{conn: conn}) do | ||||
|     current_user = user_fixture() | ||||
|  | ||||
|     {:ok, %{user: current_user}} = | ||||
|       current_user |> Accounts.confirm_user_multi() |> Repo.transaction() | ||||
|  | ||||
|     current_user = user_fixture() |> confirm_user() | ||||
|     %{conn: log_in_user(conn, current_user), current_user: current_user} | ||||
|   end | ||||
|  | ||||
|   @spec confirm_user(User.t()) :: User.t() | ||||
|   def confirm_user(user) do | ||||
|     {:ok, %{user: user}} = user |> Accounts.confirm_user_multi() |> Repo.transaction() | ||||
|     user | ||||
|   end | ||||
|  | ||||
|   @doc """ | ||||
|   Logs the given `user` into the `conn`. | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user