From 863821f3aea9da3125562ba09d284fda6783c038 Mon Sep 17 00:00:00 2001 From: Simon Date: Mon, 29 Sep 2025 16:05:00 +0200 Subject: [PATCH] test: fix tests and skip tests for initials generation --- lib/mv_web/live/user_live/show.ex | 2 +- .../mv_web/components/layouts/navbar_test.exs | 6 ++++- test/mv_web/live/profile_navigation_test.exs | 26 ++++++++----------- test/mv_web/user_live/index_test.exs | 4 +-- test/support/conn_case.ex | 11 ++++++-- 5 files changed, 28 insertions(+), 21 deletions(-) diff --git a/lib/mv_web/live/user_live/show.ex b/lib/mv_web/live/user_live/show.ex index 609a07c..3bf6baf 100644 --- a/lib/mv_web/live/user_live/show.ex +++ b/lib/mv_web/live/user_live/show.ex @@ -4,7 +4,7 @@ defmodule MvWeb.UserLive.Show do @impl true def render(assigns) do ~H""" - + <.header> {gettext("User")} {@user.email} <:subtitle>{gettext("This is a user record from your database.")} diff --git a/test/mv_web/components/layouts/navbar_test.exs b/test/mv_web/components/layouts/navbar_test.exs index 514d343..25cfe78 100644 --- a/test/mv_web/components/layouts/navbar_test.exs +++ b/test/mv_web/components/layouts/navbar_test.exs @@ -21,6 +21,8 @@ defmodule MvWeb.Layouts.NavbarTest do assert html =~ "Profil" end + @tag :skip + # TODO: Implement user initials in navbar avatar - see issue #170 test "shows user initials in avatar", %{conn: _conn} do # Setup: Create a user with specific email for testing initials user = create_test_user(%{email: "test.user@example.com"}) @@ -32,6 +34,8 @@ defmodule MvWeb.Layouts.NavbarTest do assert html =~ "TU" # Initials from test.user@example.com end + @tag :skip + # TODO: Implement user initials in navbar avatar - see issue #170 test "shows different initials for OIDC user", %{conn: _conn} do # Setup: Create OIDC user user_info = %{ @@ -70,7 +74,7 @@ defmodule MvWeb.Layouts.NavbarTest do assert html =~ "Logout" # Check for correct logout path - assert html =~ ~s(href="sign-out") + assert html =~ ~s(href="/sign-out") end end end diff --git a/test/mv_web/live/profile_navigation_test.exs b/test/mv_web/live/profile_navigation_test.exs index fdd725f..8ec3b5f 100644 --- a/test/mv_web/live/profile_navigation_test.exs +++ b/test/mv_web/live/profile_navigation_test.exs @@ -39,7 +39,7 @@ defmodule MvWeb.ProfileNavigationTest do # Verify profile data {:ok, _profile_view, html} = live(conn, "/users/#{user.id}") - assert html =~ user.email + assert html =~ to_string(user.email) assert html =~ "Password Authentication" assert html =~ "Enabled" end @@ -58,9 +58,11 @@ defmodule MvWeb.ProfileNavigationTest do assert html =~ "Profil" end + @tag :skip + # TODO: Implement user initials in navbar avatar - see issue #170 test "shows user initials in avatar", %{conn: conn} do # Setup: Create and login a user - {:ok, user} = create_test_user(%{email: "test.user@example.com"}) + user = create_test_user(%{email: "test.user@example.com"}) conn = conn_with_password_user(conn, user) {:ok, _view, html} = live(conn, "/") @@ -80,7 +82,7 @@ defmodule MvWeb.ProfileNavigationTest do "id_token" => "test_id_token" } - {:ok, user} = Mv.Accounts.User + user = Mv.Accounts.User |> Ash.Changeset.for_create(:register_with_rauthy, %{ user_info: user_info, oauth_tokens: oauth_tokens @@ -88,10 +90,7 @@ defmodule MvWeb.ProfileNavigationTest do |> Ash.create!(domain: Mv.Accounts) # Login user via OIDC - conn = conn_with_oidc_user(conn, %{ - email: "oidc.user@example.com", - oidc_id: "oidc_123" - }) + conn = sign_in_user_via_oidc(conn, user) # Navigate to home and click profile {:ok, view, _html} = live(conn, "/") @@ -99,15 +98,15 @@ 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 =~ "oidc.user@example.com" + assert html =~ to_string(user.email) assert html =~ "oidc_123" # OIDC ID should be visible - refute html =~ "Password Authentication" # Should not show password info for OIDC users + assert html =~ "Not enabled" # Password auth should be disabled for OIDC users end test "profile navigation works across different authentication methods", %{conn: conn} do # Create password user password_user = create_test_user(%{ - email: "password@example.com", + email: "password2@example.com", password: "test_password123" }) @@ -120,7 +119,7 @@ defmodule MvWeb.ProfileNavigationTest do "access_token" => "test_token", "id_token" => "test_id_token" } - {:ok, oidc_user} = Mv.Accounts.User + oidc_user = Mv.Accounts.User |> Ash.Changeset.for_create(:register_with_rauthy, %{ user_info: user_info, oauth_tokens: oauth_tokens @@ -134,10 +133,7 @@ defmodule MvWeb.ProfileNavigationTest do assert_redirected(view_password, "/users/#{password_user.id}") # Test with OIDC user - conn_oidc = conn_with_oidc_user(conn, %{ - email: "oidc@example.com", - oidc_id: "oidc_789" - }) + conn_oidc = sign_in_user_via_oidc(conn, oidc_user) {:ok, view_oidc, _html} = live(conn_oidc, "/") view_oidc |> element("a", "Profil") |> render_click() assert_redirected(view_oidc, "/users/#{oidc_user.id}") diff --git a/test/mv_web/user_live/index_test.exs b/test/mv_web/user_live/index_test.exs index 40756eb..af217e3 100644 --- a/test/mv_web/user_live/index_test.exs +++ b/test/mv_web/user_live/index_test.exs @@ -288,7 +288,7 @@ defmodule MvWeb.UserLive.IndexTest do |> element("input[type='checkbox'][name='select_all'][checked]") |> has_element?() - # Select second user + # Select second user html = view |> element("input[type='checkbox'][name='#{user2.id}']") |> render_click() # Now select all should be automatically checked (all individual users are selected) @@ -388,7 +388,7 @@ defmodule MvWeb.UserLive.IndexTest do assert html =~ "Email" assert html =~ "OIDC ID" # Should show the authenticated user at minimum - assert html =~ "user@example.com" + assert html =~ "oidc.user" # Matches the generated email pattern oidc.user{unique_id}@example.com 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 da2e60d..d4263d5 100644 --- a/test/support/conn_case.ex +++ b/test/support/conn_case.ex @@ -100,8 +100,15 @@ defmodule MvWeb.ConnCase do Signs in a user via OIDC and returns a connection with the user authenticated. By default creates a user with "user@example.com" for consistency. """ - def conn_with_oidc_user(conn, user_attrs \\ %{email: "user@example.com"}) do - user = create_test_user(user_attrs) + 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}" + } + + user = create_test_user(Map.merge(default_attrs, user_attrs)) sign_in_user_via_oidc(conn, user) end