From dae9d039c15dd0c395149bfd34c9cbf65c5b45af Mon Sep 17 00:00:00 2001 From: carla Date: Mon, 19 Jan 2026 13:21:50 +0100 Subject: [PATCH] test: adds live view csv import tests --- .../mv_web/live/global_settings_live_test.exs | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/test/mv_web/live/global_settings_live_test.exs b/test/mv_web/live/global_settings_live_test.exs index 86680f3..cf4ec13 100644 --- a/test/mv_web/live/global_settings_live_test.exs +++ b/test/mv_web/live/global_settings_live_test.exs @@ -81,4 +81,76 @@ defmodule MvWeb.GlobalSettingsLiveTest do assert render(view) =~ "updated" or render(view) =~ "success" end end + + describe "CSV Import Section" do + test "admin user sees import section", %{conn: conn} do + {:ok, _view, html} = live(conn, ~p"/settings") + + # Check for import section heading or identifier + assert html =~ "Import" or html =~ "CSV" or html =~ "member_import" + end + + test "admin user sees custom fields notice", %{conn: conn} do + {:ok, _view, html} = live(conn, ~p"/settings") + + # Check for custom fields notice text + assert html =~ "Custom fields" or html =~ "custom field" + end + + test "admin user sees template download links", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/settings") + + html = render(view) + + # Check for English template link + assert html =~ "member_import_en.csv" or html =~ "/templates/member_import_en.csv" + + # Check for German template link + assert html =~ "member_import_de.csv" or html =~ "/templates/member_import_de.csv" + end + + test "template links use static path helper", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/settings") + + html = render(view) + + # Check that links contain the static path pattern + # Static paths typically start with /templates/ or contain the full path + assert html =~ "/templates/member_import_en.csv" or + html =~ ~r/href=["'][^"']*member_import_en\.csv["']/ + + assert html =~ "/templates/member_import_de.csv" or + html =~ ~r/href=["'][^"']*member_import_de\.csv["']/ + end + + test "admin user sees file upload input", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/settings") + + html = render(view) + + # Check for file input element + assert html =~ ~r/type=["']file["']/i or html =~ "phx-hook" or html =~ "upload" + end + + test "file upload has CSV-only restriction", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/settings") + + html = render(view) + + # Check for CSV file type restriction in help text or accept attribute + assert html =~ ~r/\.csv/i or html =~ "CSV" or html =~ ~r/accept=["'][^"']*csv["']/i + end + + test "non-admin user does not see import section", %{conn: conn} do + # Create non-admin user (member role) + member_user = Mv.Fixtures.user_with_role_fixture("own_data") + conn = MvWeb.ConnCase.conn_with_password_user(conn, member_user) + + {:ok, _view, html} = live(conn, ~p"/settings") + + # Import section should not be visible + refute html =~ "Import Members" or html =~ "CSV Import" or + (html =~ "Import" and html =~ "CSV") + end + end end