defmodule MvWeb.GlobalSettingsLiveConfigTest do @moduledoc """ Tests for GlobalSettingsLive that modify global Application configuration. These tests run with `async: false` to prevent race conditions when modifying global Application environment variables (Application.put_env). This follows the same pattern as Mv.ConfigTest. """ use MvWeb.ConnCase, async: false import Phoenix.LiveViewTest # Helper function to upload CSV file in tests defp upload_csv_file(view, csv_content, filename) do view |> file_input("#csv-upload-form", :csv_file, [ %{ last_modified: System.system_time(:second), name: filename, content: csv_content, size: byte_size(csv_content), type: "text/csv" } ]) |> render_upload(filename) end describe "CSV Import - Configuration Tests" do setup %{conn: conn} do # Ensure admin user admin_user = Mv.Fixtures.user_with_role_fixture("admin") conn = MvWeb.ConnCase.conn_with_password_user(conn, admin_user) {:ok, conn: conn, admin_user: admin_user} end test "configured row limit is enforced", %{conn: conn} do # Business rule: CSV import respects configured row limits # Test that a custom limit (500) is enforced, not just the default (1000) original_config = Application.get_env(:mv, :csv_import, []) try do # Arrange: Set custom row limit to 500 Application.put_env(:mv, :csv_import, max_rows: 500) {:ok, view, _html} = live(conn, ~p"/admin/import-export") # Generate CSV with 501 rows (exceeding custom limit of 500) header = "first_name;last_name;email;street;postal_code;city\n" rows = for i <- 1..501 do "Row#{i};Last#{i};email#{i}@example.com;Street#{i};12345;City#{i}\n" end large_csv = header <> Enum.join(rows) # Act: Upload CSV and submit form upload_csv_file(view, large_csv, "too_many_rows_custom.csv") view |> form("#csv-upload-form", %{}) |> render_submit() # Assert: Import should be rejected with error message html = render(view) # Business rule: import should be rejected when exceeding configured limit assert html =~ "Failed to prepare CSV import" after # Restore original config Application.put_env(:mv, :csv_import, original_config) end end end end