defmodule BerrypodWeb.EmailSettingsControllerTest do use BerrypodWeb.ConnCase, async: false import Berrypod.AccountsFixtures alias Berrypod.Settings setup do original = Application.get_env(:berrypod, Berrypod.Mailer) Application.put_env(:berrypod, Berrypod.Mailer, adapter: Swoosh.Adapters.Test) on_exit(fn -> Application.put_env(:berrypod, Berrypod.Mailer, original) end) user = user_fixture() conn = build_conn() |> log_in_user(user) %{conn: conn, user: user} end describe "POST /admin/settings/email" do test "saves adapter config and redirects", %{conn: conn} do conn = post(conn, ~p"/admin/settings/email", %{ email: %{ adapter: "brevo", brevo: %{api_key: "xkeysib-abc123def456"} } }) assert redirected_to(conn) == ~p"/admin/settings/email" assert Phoenix.Flash.get(conn.assigns.flash, :info) =~ "Settings saved" assert Settings.get_setting("email_adapter") == "brevo" end test "redirects with error on validation failure", %{conn: conn} do conn = post(conn, ~p"/admin/settings/email", %{ email: %{adapter: "brevo", brevo: %{api_key: ""}} }) assert redirected_to(conn) =~ ~p"/admin/settings/email" assert Phoenix.Flash.get(conn.assigns.flash, :error) =~ "required" end end describe "POST /admin/settings/email/test" do test "sends test email and redirects", %{conn: conn} do Settings.put_setting("email_adapter", "brevo") Settings.put_secret("email_brevo_api_key", "xkeysib-test-abc") conn = post(conn, ~p"/admin/settings/email/test") assert redirected_to(conn) == ~p"/admin/settings/email" assert Phoenix.Flash.get(conn.assigns.flash, :info) =~ "Test email sent" end end describe "unauthenticated" do test "redirects to login", %{conn: _conn} do conn = build_conn() conn = post(conn, ~p"/admin/settings/email", %{email: %{adapter: "brevo"}}) assert redirected_to(conn) =~ ~p"/users/log-in" end end end