kamaroly
Ash Authentication - How To Test Liveview with Authentication
I am getting error (ArgumentError) session not fetched, call fetch_session/2 while testing liveview that require authentication. I am using Ash Authentication.
How do I test liveviews with Ash Authentication?
Here is the helper function I am using to login while testing
def login(conn, email\\ "test@example.com", hashed_password \\ "$2b$12$mZjy/lPACxT/WcwL8V9og.MtGzgOZc9VEuDdbnRZ2mmHbRV/9xvdK") do
{:ok, user} = Accounts.create_user(email, hashed_password)
conn
|> assign(:current_user, user)
|> put_session(:user, user)
end
Here is a test I am trying to run.
@tag run: true
test "User can list stock categories", %{conn: conn} do
{:ok, view, html} =
conn
|> login()
|> live(~p"/stock/categories")
# Click on each one of them to be edited
for category <- Category.all!() do
assert html =~ category.name
assert html =~ category.description
end
end
Marked As Solved
shamanime
You can use Phoenix.ConnTest — Phoenix v1.7.12 in your pipeline to get rid of the fetch_session/2 error.
Your tests will run your router pipeline, and somewhere there will be some code that will read the session and try to load the user from it. So all you need to do is add to session whatever will please that logic.
If I’m not mistaken, Ash will store a key user with value like user?id=ce7969f9-afa5-474c-bc52-ac23a103cef6.
This way you might be able to just do:
conn
|> Phoenix.ConnTest.init_test_session(%{})
|> Plug.Conn.put_session(:user, "user?id=#{user.id}")
Also Liked
zachdaniel
I don’t believe a helper exists, but you can write your own. This thread has an example How to test live views with ash authentication plugs - #5 by zachdaniel
zachdaniel
That looks nice ![]()
kamaroly
@zachdaniel, for some reasons, I could not edit that question hours after I notice it was not well framed. So, I had to ask again and delete the former one.







