Packages
ash_authentication
4.6.1
5.0.0-rc.12
5.0.0-rc.11
5.0.0-rc.10
5.0.0-rc.9
5.0.0-rc.8
5.0.0-rc.7
5.0.0-rc.6
5.0.0-rc.5
5.0.0-rc.4
5.0.0-rc.3
5.0.0-rc.2
5.0.0-rc.1
5.0.0-rc.0
4.14.1
4.14.0
4.13.7
4.13.6
4.13.5
4.13.4
4.13.3
4.13.2
retired
4.13.1
retired
4.13.0
4.12.0
4.11.0
4.10.0
4.9.9
4.9.8
4.9.7
4.9.6
4.9.5
4.9.4
4.9.3
4.9.2
4.9.1
4.9.0
4.8.7
4.8.6
4.8.5
4.8.3
4.8.2
4.8.1
4.8.0
4.7.6
4.7.5
4.7.4
4.7.3
4.7.2
4.7.1
4.7.0
4.6.4
4.6.3
4.6.2
4.6.1
4.6.0
4.5.6
4.5.5
4.5.4
4.5.3
4.5.2
4.5.1
4.5.0
4.4.9
4.4.8
4.4.7
4.4.6
4.4.5
4.4.4
4.4.3
4.4.2
4.4.1
4.4.0
4.3.12
4.3.11
4.3.10
4.3.9
4.3.8
4.3.7
4.3.6
4.3.5
4.3.4
4.3.3
4.3.2
4.3.1
4.3.0
4.2.7
4.2.6
4.2.5
4.2.4
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.4
4.0.3
4.0.2
4.0.1
4.0.0
4.0.0-rc.6
4.0.0-rc.5
4.0.0-rc.3
4.0.0-rc.2
4.0.0-rc.1
4.0.0-rc.0
3.12.4
3.12.3
3.12.2
3.12.1
3.12.0
3.11.16
3.11.15
3.11.14
3.11.13
3.11.12
3.11.11
3.11.10
3.11.9
3.11.8
3.11.7
3.11.6
3.11.5
3.11.4
3.11.3
3.11.2
3.11.1
3.11.0
3.10.8
3.10.7
3.10.6
3.10.5
3.10.4
3.10.3
3.10.2
3.10.1
3.10.0
3.9.6
3.9.5
3.9.4
3.9.3
3.9.2
3.9.1
3.9.0
3.8.0
3.7.9
3.7.8
3.7.6
3.7.5
3.7.4
3.7.3
3.7.2
3.7.1
3.7.0
3.6.1
3.6.0
3.5.3
3.5.2
3.5.1
3.5.0
3.3.1
3.3.0
3.2.2
3.2.1
3.2.0
3.1.0
3.0.3
Authentication extension for the Ash Framework.
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
documentation/topics/testing.md
# Testing
Tips and tricks to help test your apps.
## When using the Password strategy
AshAuthentication uses `bcrypt_elixir` for hashing passwords for secure storage, which by design has a high computational cost. To reduce the cost (make hashing faster), you can reduce the number of computation rounds it performs in tests:
```elixir
# in config/test.exs
# Do NOT set this value for production
config :bcrypt_elixir, log_rounds: 1
```
## Testing authenticated LiveViews
In order to test authenticated LiveViews, you will need to seed a test user and
log in it. While you may certainly use a helper that logs in through the UI
each time, it's a little more efficient to call the sign-in code directly.
This can be done by adding a helper function called `MyAppWeb.ConnCase` found in
`test/support/conn_case.ex`. In this example it's called
`register_and_log_in_user`.
```elixir
defmodule MyAppWeb.ConnCase do
use ExUnit.CaseTemplate
using do
# ...
end
def register_and_log_in_user(%{conn: conn}) do
email = "user@example.com"
password = "password"
{:ok, hashed_password} = AshAuthentication.BcryptProvider.hash(password)
Ash.Seed.seed!(MyApp.Accounts.User, %{
email: email,
hashed_password: hashed_password
})
# Replace `:password` with the appropriate strategy for your application.
strategy = AshAuthentication.Info.strategy!(MyApp.Accounts.User, :password)
{:ok, user} =
AshAuthentication.Strategy.action(strategy, :sign_in, %{
email: email,
password: password
})
conn =
conn
|> Phoenix.ConnTest.init_test_session(%{})
|> AshAuthentication.Plug.Helpers.store_in_session(user)
%{conn: conn}
end
end
```
Now in your LiveView tests you can pass this function to `setup`:
```elixir
defmodule MyAppWeb.MyLiveTest do
use MyAppWeb.ConnCase
setup :register_and_log_in_user
test "some test", %{conn: conn} do
{:ok, lv, _html} = live(conn, ~p"/authenticated-route")
# ...
end
end
```
If required, it can also be called directly inside a `test` block:
```elixir
test "some test", context do
%{conn: conn} = register_and_log_in_user(context)
{:ok, lv, _html} = live(conn, ~p"/authenticated-route")
# ...
end
```