diff --git a/lib/mv_web/components/layouts.ex b/lib/mv_web/components/layouts.ex
index 4baae08..b7f7568 100644
--- a/lib/mv_web/components/layouts.ex
+++ b/lib/mv_web/components/layouts.ex
@@ -31,9 +31,10 @@ defmodule MvWeb.Layouts do
attr :flash, :map, required: true, doc: "the map of flash messages"
attr :current_user, :map, default: nil, doc: "the current user, if authenticated"
+
attr :current_scope, :map,
- default: nil,
- doc: "the current [scope](https://hexdocs.pm/phoenix/scopes.html)"
+ default: nil,
+ doc: "the current [scope](https://hexdocs.pm/phoenix/scopes.html)"
slot :inner_block, required: true
@@ -52,7 +53,6 @@ defmodule MvWeb.Layouts do
"""
end
-
@doc """
Shows the flash group with standard titles and content.
diff --git a/lib/mv_web/components/layouts/navbar.ex b/lib/mv_web/components/layouts/navbar.ex
index 47b4f2e..9009329 100644
--- a/lib/mv_web/components/layouts/navbar.ex
+++ b/lib/mv_web/components/layouts/navbar.ex
@@ -6,7 +6,9 @@ defmodule MvWeb.Layouts.Navbar do
use Gettext, backend: MvWeb.Gettext
use MvWeb, :verified_routes
- attr :current_user, :map, required: true, doc: "The current user - navbar is only shown when user is present"
+ attr :current_user, :map,
+ required: true,
+ doc: "The current user - navbar is only shown when user is present"
def navbar(assigns) do
~H"""
diff --git a/lib/mv_web/live_user_auth.ex b/lib/mv_web/live_user_auth.ex
index 8fc5224..b78ba21 100644
--- a/lib/mv_web/live_user_auth.ex
+++ b/lib/mv_web/live_user_auth.ex
@@ -34,8 +34,10 @@ defmodule MvWeb.LiveUserAuth do
case socket.assigns do
%{current_user: %{} = user} ->
{:cont, assign(socket, :current_user, user)}
+
_ ->
- {:halt, Phoenix.LiveView.redirect(socket, to: ~p"/sign-in")}
+ socket = Phoenix.LiveView.redirect(socket, to: ~p"/sign-in")
+ {:halt, socket}
end
end
diff --git a/test/mv_web/components/layouts/navbar_test.exs b/test/mv_web/components/layouts/navbar_test.exs
index 25cfe78..b6fa556 100644
--- a/test/mv_web/components/layouts/navbar_test.exs
+++ b/test/mv_web/components/layouts/navbar_test.exs
@@ -7,9 +7,10 @@ defmodule MvWeb.Layouts.NavbarTest do
# Setup: Create a user
user = create_test_user(%{email: "test@example.com"})
- html = render_component(&MvWeb.Layouts.Navbar.navbar/1, %{
- current_user: user
- })
+ html =
+ render_component(&MvWeb.Layouts.Navbar.navbar/1, %{
+ current_user: user
+ })
# Test dropdown structure
assert html =~ "dropdown-content"
@@ -27,11 +28,13 @@ defmodule MvWeb.Layouts.NavbarTest do
# Setup: Create a user with specific email for testing initials
user = create_test_user(%{email: "test.user@example.com"})
- html = render_component(&MvWeb.Layouts.Navbar.navbar/1, %{
- current_user: user
- })
+ html =
+ render_component(&MvWeb.Layouts.Navbar.navbar/1, %{
+ current_user: user
+ })
- assert html =~ "TU" # Initials from test.user@example.com
+ # Initials from test.user@example.com
+ assert html =~ "TU"
end
@tag :skip
@@ -42,31 +45,36 @@ defmodule MvWeb.Layouts.NavbarTest do
"sub" => "oidc_123",
"preferred_username" => "oidc.user@example.com"
}
+
oauth_tokens = %{
"access_token" => "test_token",
"id_token" => "test_id_token"
}
- user = Mv.Accounts.User
- |> Ash.Changeset.for_create(:register_with_rauthy, %{
- user_info: user_info,
- oauth_tokens: oauth_tokens
- })
- |> Ash.create!(domain: Mv.Accounts)
+ user =
+ Mv.Accounts.User
+ |> Ash.Changeset.for_create(:register_with_rauthy, %{
+ user_info: user_info,
+ oauth_tokens: oauth_tokens
+ })
+ |> Ash.create!(domain: Mv.Accounts)
- html = render_component(&MvWeb.Layouts.Navbar.navbar/1, %{
- current_user: user
- })
+ html =
+ render_component(&MvWeb.Layouts.Navbar.navbar/1, %{
+ current_user: user
+ })
- assert html =~ "OU" # Initials from oidc.user@example.com
+ # Initials from oidc.user@example.com
+ assert html =~ "OU"
end
test "includes all required navigation items", %{conn: _conn} do
user = create_test_user(%{email: "test@example.com"})
- html = render_component(&MvWeb.Layouts.Navbar.navbar/1, %{
- current_user: user
- })
+ html =
+ render_component(&MvWeb.Layouts.Navbar.navbar/1, %{
+ current_user: user
+ })
# Check for all required menu items
assert html =~ "Profil"
diff --git a/test/mv_web/live/profile_navigation_test.exs b/test/mv_web/live/profile_navigation_test.exs
index 8ec3b5f..b90c74b 100644
--- a/test/mv_web/live/profile_navigation_test.exs
+++ b/test/mv_web/live/profile_navigation_test.exs
@@ -66,7 +66,8 @@ defmodule MvWeb.ProfileNavigationTest do
conn = conn_with_password_user(conn, user)
{:ok, _view, html} = live(conn, "/")
- assert html =~ "TU" # Initials from test.user@example.com
+ # Initials from test.user@example.com
+ assert html =~ "TU"
end
end
@@ -77,17 +78,19 @@ defmodule MvWeb.ProfileNavigationTest do
"sub" => "oidc_123",
"preferred_username" => "oidc.user@example.com"
}
+
oauth_tokens = %{
"access_token" => "test_token",
"id_token" => "test_id_token"
}
- user = Mv.Accounts.User
- |> Ash.Changeset.for_create(:register_with_rauthy, %{
- user_info: user_info,
- oauth_tokens: oauth_tokens
- })
- |> Ash.create!(domain: Mv.Accounts)
+ user =
+ Mv.Accounts.User
+ |> Ash.Changeset.for_create(:register_with_rauthy, %{
+ user_info: user_info,
+ oauth_tokens: oauth_tokens
+ })
+ |> Ash.create!(domain: Mv.Accounts)
# Login user via OIDC
conn = sign_in_user_via_oidc(conn, user)
@@ -99,32 +102,38 @@ defmodule MvWeb.ProfileNavigationTest do
# Verify we're on the correct profile page with OIDC specific information
{:ok, _profile_view, html} = live(conn, "/users/#{user.id}")
assert html =~ to_string(user.email)
- assert html =~ "oidc_123" # OIDC ID should be visible
- assert html =~ "Not enabled" # Password auth should be disabled for OIDC users
+ # OIDC ID should be visible
+ assert html =~ "oidc_123"
+ # Password auth should be disabled for OIDC users
+ assert html =~ "Not enabled"
end
test "profile navigation works across different authentication methods", %{conn: conn} do
# Create password user
- password_user = create_test_user(%{
- email: "password2@example.com",
- password: "test_password123"
- })
+ password_user =
+ create_test_user(%{
+ email: "password2@example.com",
+ password: "test_password123"
+ })
# Create OIDC user
user_info = %{
"sub" => "oidc_789",
"preferred_username" => "oidc@example.com"
}
+
oauth_tokens = %{
"access_token" => "test_token",
"id_token" => "test_id_token"
}
- oidc_user = Mv.Accounts.User
- |> Ash.Changeset.for_create(:register_with_rauthy, %{
- user_info: user_info,
- oauth_tokens: oauth_tokens
- })
- |> Ash.create!(domain: Mv.Accounts)
+
+ oidc_user =
+ Mv.Accounts.User
+ |> Ash.Changeset.for_create(:register_with_rauthy, %{
+ user_info: user_info,
+ oauth_tokens: oauth_tokens
+ })
+ |> Ash.create!(domain: Mv.Accounts)
# Test with password user
conn_password = conn_with_password_user(conn, password_user)
@@ -139,5 +148,4 @@ defmodule MvWeb.ProfileNavigationTest do
assert_redirected(view_oidc, "/users/#{oidc_user.id}")
end
end
-
end
diff --git a/test/mv_web/user_live/index_test.exs b/test/mv_web/user_live/index_test.exs
index af217e3..bb78377 100644
--- a/test/mv_web/user_live/index_test.exs
+++ b/test/mv_web/user_live/index_test.exs
@@ -388,7 +388,8 @@ defmodule MvWeb.UserLive.IndexTest do
assert html =~ "Email"
assert html =~ "OIDC ID"
# Should show the authenticated user at minimum
- assert html =~ "oidc.user" # Matches the generated email pattern oidc.user{unique_id}@example.com
+ # Matches the generated email pattern oidc.user{unique_id}@example.com
+ assert html =~ "oidc.user"
end
test "handles users with missing OIDC ID", %{conn: conn} do
diff --git a/test/support/conn_case.ex b/test/support/conn_case.ex
index d4263d5..0ee2364 100644
--- a/test/support/conn_case.ex
+++ b/test/support/conn_case.ex
@@ -103,6 +103,7 @@ defmodule MvWeb.ConnCase do
def conn_with_oidc_user(conn, user_attrs \\ %{}) do
# Ensure unique email for OIDC users
unique_id = System.unique_integer([:positive])
+
default_attrs = %{
email: "oidc.user#{unique_id}@example.com",
oidc_id: "oidc_#{unique_id}"