Merge branch 'main' into feat/299_plz
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing

This commit is contained in:
carla 2026-02-24 16:02:56 +01:00
commit bfc078d5aa
45 changed files with 2187 additions and 425 deletions

View file

@ -1,21 +1,22 @@
defmodule Mv.OidcRoleSyncConfigTest do
@moduledoc """
Tests for OIDC role sync configuration (OIDC_ADMIN_GROUP_NAME, OIDC_GROUPS_CLAIM).
Reads via Mv.Config (ENV first, then Settings).
"""
use ExUnit.Case, async: false
use Mv.DataCase, async: false
alias Mv.OidcRoleSyncConfig
describe "oidc_admin_group_name/0" do
test "returns nil when OIDC_ADMIN_GROUP_NAME is not configured" do
restore = put_config(admin_group_name: nil)
restore = clear_env("OIDC_ADMIN_GROUP_NAME")
on_exit(restore)
assert OidcRoleSyncConfig.oidc_admin_group_name() == nil
end
test "returns configured admin group name when set" do
restore = put_config(admin_group_name: "mila-admin")
test "returns configured admin group name when set via ENV" do
restore = set_env("OIDC_ADMIN_GROUP_NAME", "mila-admin")
on_exit(restore)
assert OidcRoleSyncConfig.oidc_admin_group_name() == "mila-admin"
@ -24,26 +25,35 @@ defmodule Mv.OidcRoleSyncConfigTest do
describe "oidc_groups_claim/0" do
test "returns default \"groups\" when OIDC_GROUPS_CLAIM is not configured" do
restore = put_config(groups_claim: nil)
restore = clear_env("OIDC_GROUPS_CLAIM")
on_exit(restore)
assert OidcRoleSyncConfig.oidc_groups_claim() == "groups"
end
test "returns configured claim name when OIDC_GROUPS_CLAIM is set" do
restore = put_config(groups_claim: "ak_groups")
test "returns configured claim name when OIDC_GROUPS_CLAIM is set via ENV" do
restore = set_env("OIDC_GROUPS_CLAIM", "ak_groups")
on_exit(restore)
assert OidcRoleSyncConfig.oidc_groups_claim() == "ak_groups"
end
end
defp put_config(opts) do
current = Application.get_env(:mv, :oidc_role_sync, [])
Application.put_env(:mv, :oidc_role_sync, Keyword.merge(current, opts))
defp set_env(key, value) do
previous = System.get_env(key)
System.put_env(key, value)
fn ->
Application.put_env(:mv, :oidc_role_sync, current)
if previous, do: System.put_env(key, previous), else: System.delete_env(key)
end
end
defp clear_env(key) do
previous = System.get_env(key)
System.delete_env(key)
fn ->
if previous, do: System.put_env(key, previous)
end
end
end

View file

@ -12,14 +12,14 @@ defmodule Mv.OidcRoleSyncTest do
setup do
ensure_roles_exist()
restore_config = put_oidc_config(admin_group_name: "mila-admin", groups_claim: "groups")
restore_config = put_oidc_env(admin_group_name: "mila-admin", groups_claim: "groups")
on_exit(restore_config)
:ok
end
describe "apply_admin_role_from_user_info/2" do
test "when OIDC_ADMIN_GROUP_NAME not configured: does not change user (Mitglied stays)" do
restore = put_oidc_config(admin_group_name: nil, groups_claim: "groups")
restore = put_oidc_env(admin_group_name: nil, groups_claim: "groups")
on_exit(restore)
email = "sync-no-config-#{System.unique_integer([:positive])}@test.example.com"
@ -58,7 +58,7 @@ defmodule Mv.OidcRoleSyncTest do
end
test "when OIDC_GROUPS_CLAIM is different: reads groups from that claim" do
restore = put_oidc_config(admin_group_name: "mila-admin", groups_claim: "ak_groups")
restore = put_oidc_env(admin_group_name: "mila-admin", groups_claim: "ak_groups")
on_exit(restore)
email = "sync-claim-#{System.unique_integer([:positive])}@test.example.com"
@ -131,13 +131,30 @@ defmodule Mv.OidcRoleSyncTest do
end
end
defp put_oidc_config(opts) do
current = Application.get_env(:mv, :oidc_role_sync, [])
merged = Keyword.merge(current, opts)
Application.put_env(:mv, :oidc_role_sync, merged)
defp put_oidc_env(opts) do
prev_admin = System.get_env("OIDC_ADMIN_GROUP_NAME")
prev_claim = System.get_env("OIDC_GROUPS_CLAIM")
if opts[:admin_group_name] != nil do
System.put_env("OIDC_ADMIN_GROUP_NAME", to_string(opts[:admin_group_name]))
else
System.delete_env("OIDC_ADMIN_GROUP_NAME")
end
if opts[:groups_claim] != nil do
System.put_env("OIDC_GROUPS_CLAIM", to_string(opts[:groups_claim]))
else
System.delete_env("OIDC_GROUPS_CLAIM")
end
fn ->
Application.put_env(:mv, :oidc_role_sync, current)
if prev_admin,
do: System.put_env("OIDC_ADMIN_GROUP_NAME", prev_admin),
else: System.delete_env("OIDC_ADMIN_GROUP_NAME")
if prev_claim,
do: System.put_env("OIDC_GROUPS_CLAIM", prev_claim),
else: System.delete_env("OIDC_GROUPS_CLAIM")
end
end

View file

@ -30,7 +30,7 @@ defmodule MvWeb.SidebarAuthorizationTest do
html = render_sidebar(sidebar_assigns(user))
assert html =~ ~s(href="/members")
assert html =~ ~s(href="/membership_fee_types")
assert html =~ ~s(href="/membership_fee_settings")
assert html =~ ~s(href="/statistics")
assert html =~ ~s(data-testid="sidebar-administration")
assert html =~ ~s(href="/users")
@ -55,7 +55,7 @@ defmodule MvWeb.SidebarAuthorizationTest do
user = Fixtures.user_with_role_fixture("read_only")
html = render_sidebar(sidebar_assigns(user))
refute html =~ ~s(href="/membership_fee_types")
refute html =~ ~s(href="/membership_fee_settings")
refute html =~ ~s(href="/users")
refute html =~ ~s(href="/admin/roles")
refute html =~ ~s(href="/settings")
@ -76,7 +76,7 @@ defmodule MvWeb.SidebarAuthorizationTest do
user = Fixtures.user_with_role_fixture("normal_user")
html = render_sidebar(sidebar_assigns(user))
refute html =~ ~s(href="/membership_fee_types")
refute html =~ ~s(href="/membership_fee_settings")
refute html =~ ~s(href="/users")
refute html =~ ~s(href="/admin/roles")
refute html =~ ~s(href="/settings")
@ -96,7 +96,7 @@ defmodule MvWeb.SidebarAuthorizationTest do
html = render_sidebar(sidebar_assigns(user))
refute html =~ ~s(href="/statistics")
refute html =~ ~s(href="/membership_fee_types")
refute html =~ ~s(href="/membership_fee_settings")
refute html =~ ~s(href="/users")
refute html =~ ~s(data-testid="sidebar-administration")
end
@ -117,7 +117,7 @@ defmodule MvWeb.SidebarAuthorizationTest do
html = render_sidebar(sidebar_assigns(user))
refute html =~ ~s(href="/members")
refute html =~ ~s(href="/membership_fee_types")
refute html =~ ~s(href="/membership_fee_settings")
refute html =~ ~s(href="/users")
end
end

View file

@ -54,7 +54,7 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
# Create custom field value
create_custom_field_value(member, custom_field, "test")
{:ok, view, _html} = live(conn, ~p"/settings")
{:ok, view, _html} = live(conn, ~p"/admin/datafields")
# Click delete button - find the delete link within the component
view
@ -80,7 +80,7 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
create_custom_field_value(member1, custom_field, "test1")
create_custom_field_value(member2, custom_field, "test2")
{:ok, view, _html} = live(conn, ~p"/settings")
{:ok, view, _html} = live(conn, ~p"/admin/datafields")
view
|> element("#custom-fields-component a", "Delete")
@ -93,7 +93,7 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
test "shows 0 members for custom field without values", %{conn: conn} do
{:ok, _custom_field} = create_custom_field("test_field", :string)
{:ok, view, _html} = live(conn, ~p"/settings")
{:ok, view, _html} = live(conn, ~p"/admin/datafields")
view
|> element("#custom-fields-component a", "Delete")
@ -108,7 +108,7 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
test "updates confirmation state when typing", %{conn: conn} do
{:ok, custom_field} = create_custom_field("test_field", :string)
{:ok, view, _html} = live(conn, ~p"/settings")
{:ok, view, _html} = live(conn, ~p"/admin/datafields")
view
|> element("#custom-fields-component a", "Delete")
@ -126,7 +126,7 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
test "delete button is disabled when slug doesn't match", %{conn: conn} do
{:ok, _custom_field} = create_custom_field("test_field", :string)
{:ok, view, _html} = live(conn, ~p"/settings")
{:ok, view, _html} = live(conn, ~p"/admin/datafields")
view
|> element("#custom-fields-component a", "Delete")
@ -148,7 +148,7 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
{:ok, custom_field} = create_custom_field("test_field", :string)
{:ok, custom_field_value} = create_custom_field_value(member, custom_field, "test")
{:ok, view, _html} = live(conn, ~p"/settings")
{:ok, view, _html} = live(conn, ~p"/admin/datafields")
# Open modal
view
@ -185,7 +185,7 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
} do
{:ok, custom_field} = create_custom_field("test_field", :string)
{:ok, view, _html} = live(conn, ~p"/settings")
{:ok, view, _html} = live(conn, ~p"/admin/datafields")
view
|> element("#custom-fields-component a", "Delete")
@ -209,7 +209,7 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
test "closes modal without deleting", %{conn: conn} do
{:ok, custom_field} = create_custom_field("test_field", :string)
{:ok, view, _html} = live(conn, ~p"/settings")
{:ok, view, _html} = live(conn, ~p"/admin/datafields")
view
|> element("#custom-fields-component a", "Delete")
@ -234,7 +234,7 @@ defmodule MvWeb.CustomFieldLive.DeletionTest do
describe "create custom field" do
test "submitting new data field form creates custom field and shows success", %{conn: conn} do
{:ok, view, _html} = live(conn, ~p"/settings")
{:ok, view, _html} = live(conn, ~p"/admin/datafields")
# Open "New Data Field" form
view

View file

@ -64,21 +64,5 @@ defmodule MvWeb.GlobalSettingsLiveTest do
assert html =~ "must be present"
end
test "displays Memberdata section", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
assert html =~ "Memberdata" or html =~ "Member Data"
end
test "displays flash message after member field visibility update", %{conn: conn} do
{:ok, view, _html} = live(conn, ~p"/settings")
# Simulate member field visibility update
send(view.pid, {:member_field_visibility_updated})
# Check for flash message
assert render(view) =~ "updated" or render(view) =~ "success"
end
end
end

View file

@ -23,7 +23,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
describe "rendering" do
test "renders all member fields from Constants", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Check that all member fields are displayed
member_fields = Mv.Constants.member_fields()
@ -36,7 +36,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end
test "displays show_in_overview status as badge", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Should have "Show in overview" column header
assert html =~ "Show in overview" or html =~ "Show in Overview"
@ -46,7 +46,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end
test "displays required status column", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Should have "Required" column; email is always required
assert html =~ "Required" or html =~ "required"
@ -59,7 +59,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
{:ok, _updated} =
Membership.update_settings(settings, %{member_field_visibility: %{}})
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# All fields should show as visible (Yes) by default
# Check for "Yes" badge or similar indicator
@ -74,7 +74,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
{:ok, _updated} =
Membership.update_member_field_visibility(settings, visibility_config)
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Street and house_number should show as hidden (No)
# Other fields should show as visible (Yes)
@ -102,7 +102,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end
test "marks email as required (always from settings)", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Email is always required
assert html =~ "email" or html =~ "Email"
@ -119,7 +119,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
required: true
)
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# First name row should show Required (and Optional for others)
assert html =~ "First name" or html =~ "first_name"
@ -127,7 +127,7 @@ defmodule MvWeb.MemberFieldLive.IndexComponentTest do
end
test "optional fields show Optional when not required in settings", %{conn: conn} do
{:ok, _view, html} = live(conn, ~p"/settings")
{:ok, _view, html} = live(conn, ~p"/admin/datafields")
# Email is required; other fields default to optional
assert html =~ "Optional"

View file

@ -11,7 +11,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
require Ash.Query
setup %{conn: conn} do
# User must have admin role (or normal_user) to access /membership_fee_types pages
# User must have admin role (or normal_user) to access /membership_fee_settings pages
user = Mv.Fixtures.user_with_role_fixture("admin")
authenticated_conn = conn_with_password_user(conn, user)
%{conn: authenticated_conn, user: user}
@ -51,7 +51,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
describe "create form" do
test "creates new membership fee type", %{conn: conn, user: user} do
{:ok, view, _html} = live(conn, "/membership_fee_types/new")
{:ok, view, _html} = live(conn, "/membership_fee_settings/new_fee_type")
form_data = %{
"membership_fee_type[name]" => "New Type",
@ -65,7 +65,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
|> form("#membership-fee-type-form", form_data)
|> render_submit()
assert to == "/membership_fee_types"
assert to == "/membership_fee_settings"
# Verify type was created (use actor so read is authorized)
type =
@ -79,7 +79,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
end
test "interval field is editable on create", %{conn: conn} do
{:ok, _view, html} = live(conn, "/membership_fee_types/new")
{:ok, _view, html} = live(conn, "/membership_fee_settings/new_fee_type")
# Interval field should be editable (not disabled)
refute html =~ "disabled" || html =~ "readonly"
@ -90,7 +90,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
test "loads existing type data", %{conn: conn} do
fee_type = create_fee_type(%{name: "Existing Type", amount: Decimal.new("60.00")})
{:ok, _view, html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
{:ok, _view, html} = live(conn, "/membership_fee_settings/#{fee_type.id}/edit_fee_type")
assert html =~ "Existing Type"
assert html =~ "60" || html =~ "60,00"
@ -99,7 +99,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
test "interval field is grayed out on edit", %{conn: conn} do
fee_type = create_fee_type(%{interval: :yearly})
{:ok, _view, html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
{:ok, _view, html} = live(conn, "/membership_fee_settings/#{fee_type.id}/edit_fee_type")
# Interval field should be disabled
assert html =~ "disabled" || html =~ "readonly"
@ -109,7 +109,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
fee_type = create_fee_type(%{amount: Decimal.new("50.00")})
create_member(%{membership_fee_type_id: fee_type.id})
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
{:ok, view, _html} = live(conn, "/membership_fee_settings/#{fee_type.id}/edit_fee_type")
# Change amount
view
@ -129,7 +129,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
create_member(%{membership_fee_type_id: fee_type.id})
end)
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
{:ok, view, _html} = live(conn, "/membership_fee_settings/#{fee_type.id}/edit_fee_type")
# Change amount
html =
@ -144,7 +144,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
test "amount change can be confirmed", %{conn: conn, user: user} do
fee_type = create_fee_type(%{amount: Decimal.new("50.00")})
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
{:ok, view, _html} = live(conn, "/membership_fee_settings/#{fee_type.id}/edit_fee_type")
# Change amount and confirm
view
@ -173,7 +173,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
test "amount change can be cancelled", %{conn: conn, user: user} do
fee_type = create_fee_type(%{amount: Decimal.new("50.00")})
{:ok, view, _html} = live(conn, "/membership_fee_types/#{fee_type.id}/edit")
{:ok, view, _html} = live(conn, "/membership_fee_settings/#{fee_type.id}/edit_fee_type")
# Change amount and cancel
view
@ -195,7 +195,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
end
test "validation errors display correctly", %{conn: conn} do
{:ok, view, _html} = live(conn, "/membership_fee_types/new")
{:ok, view, _html} = live(conn, "/membership_fee_settings/new_fee_type")
# Submit with invalid data
html =
@ -214,7 +214,7 @@ defmodule MvWeb.MembershipFeeTypeLive.FormTest do
describe "permissions" do
test "only admin can access", %{conn: conn} do
# This test assumes non-admin users cannot access
{:ok, _view, html} = live(conn, "/membership_fee_types/new")
{:ok, _view, html} = live(conn, "/membership_fee_settings/new_fee_type")
# Should show the form (admin user in setup)
assert html =~ "Membership Fee Type" || html =~ "Beitragsart"

View file

@ -60,7 +60,7 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
admin_user
)
{:ok, _view, html} = live(conn, "/membership_fee_types")
{:ok, _view, html} = live(conn, "/membership_fee_settings")
assert html =~ "Regular"
assert html =~ "Reduced"
@ -77,33 +77,33 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
create_member(%{membership_fee_type_id: fee_type.id}, admin_user)
end)
{:ok, _view, html} = live(conn, "/membership_fee_types")
{:ok, _view, html} = live(conn, "/membership_fee_settings")
assert html =~ "3" || html =~ "Members" || html =~ "Mitglieder"
end
test "create button navigates to form", %{conn: conn} do
{:ok, view, _html} = live(conn, "/membership_fee_types")
{:ok, view, _html} = live(conn, "/membership_fee_settings")
{:error, {:live_redirect, %{to: to}}} =
view
|> element("a[href='/membership_fee_types/new']")
|> element("a[href='/membership_fee_settings/new_fee_type']")
|> render_click()
assert to == "/membership_fee_types/new"
assert to == "/membership_fee_settings/new_fee_type"
end
test "edit button per row navigates to edit form", %{conn: conn, current_user: admin_user} do
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
{:ok, view, _html} = live(conn, "/membership_fee_types")
{:ok, view, _html} = live(conn, "/membership_fee_settings")
{:error, {:live_redirect, %{to: to}}} =
view
|> element("a[href='/membership_fee_types/#{fee_type.id}/edit']")
|> element("a[href='/membership_fee_settings/#{fee_type.id}/edit_fee_type']")
|> render_click()
assert to == "/membership_fee_types/#{fee_type.id}/edit"
assert to == "/membership_fee_settings/#{fee_type.id}/edit_fee_type"
end
end
@ -112,7 +112,7 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
create_member(%{membership_fee_type_id: fee_type.id}, admin_user)
{:ok, _view, html} = live(conn, "/membership_fee_types")
{:ok, _view, html} = live(conn, "/membership_fee_settings")
# Delete button should be disabled
assert html =~ "disabled" || html =~ "cursor-not-allowed"
@ -122,7 +122,7 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
fee_type = create_fee_type(%{interval: :yearly}, admin_user)
# No members assigned
{:ok, view, _html} = live(conn, "/membership_fee_types")
{:ok, view, _html} = live(conn, "/membership_fee_settings")
# Delete button should be enabled
view
@ -142,10 +142,11 @@ defmodule MvWeb.MembershipFeeTypeLive.IndexTest do
test "only admin can access", %{conn: conn} do
# This test assumes non-admin users cannot access
# Adjust based on actual permission implementation
{:ok, _view, html} = live(conn, "/membership_fee_types")
{:ok, _view, html} = live(conn, "/membership_fee_settings")
# Should show the page (admin user in setup)
assert html =~ "Membership Fee Types" || html =~ "Beitragsarten"
assert html =~ "Membership Fee Settings" || html =~ "Beitragseinstellungen" ||
html =~ "Membership Fee Types"
end
end
end

View file

@ -279,17 +279,11 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do
end
@tag role: :member
test "GET /membership_fee_types redirects to user profile", %{conn: conn, current_user: user} do
conn = get(conn, "/membership_fee_types")
assert redirected_to(conn) == "/users/#{user.id}"
end
@tag role: :member
test "GET /membership_fee_types/new redirects to user profile", %{
test "GET /membership_fee_settings/new_fee_type redirects to user profile", %{
conn: conn,
current_user: user
} do
conn = get(conn, "/membership_fee_types/new")
conn = get(conn, "/membership_fee_settings/new_fee_type")
assert redirected_to(conn) == "/users/#{user.id}"
end
@ -385,7 +379,7 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do
end
@tag role: :member
test "GET /membership_fee_types/:id/edit redirects to user profile", %{
test "GET /membership_fee_settings/:id/edit_fee_type redirects to user profile", %{
conn: conn,
current_user: user
} do
@ -396,7 +390,7 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do
|> List.first()
if type do
conn = get(conn, "/membership_fee_types/#{type.id}/edit")
conn = get(conn, "/membership_fee_settings/#{type.id}/edit_fee_type")
assert redirected_to(conn) == "/users/#{user.id}"
end
end
@ -680,15 +674,6 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do
assert redirected_to(conn) == "/users/#{user.id}"
end
@tag role: :read_only
test "GET /membership_fee_types redirects to user profile", %{
conn: conn,
current_user: user
} do
conn = get(conn, "/membership_fee_types")
assert redirected_to(conn) == "/users/#{user.id}"
end
@tag role: :read_only
test "GET /groups/new redirects to user profile", %{conn: conn, current_user: user} do
conn = get(conn, "/groups/new")
@ -864,15 +849,6 @@ defmodule MvWeb.Plugs.CheckPagePermissionTest do
assert redirected_to(conn) == "/users/#{user.id}"
end
@tag role: :normal_user
test "GET /membership_fee_types redirects to user profile", %{
conn: conn,
current_user: user
} do
conn = get(conn, "/membership_fee_types")
assert redirected_to(conn) == "/users/#{user.id}"
end
@tag role: :normal_user
test "GET /admin/roles redirects to user profile", %{conn: conn, current_user: user} do
conn = get(conn, "/admin/roles")