From 069fbc7df20f9ad4eac22c93d06e09d513716b28 Mon Sep 17 00:00:00 2001 From: jamey Date: Sat, 21 Feb 2026 22:43:33 +0000 Subject: [PATCH] add tests for email verification flag lifecycle Tests that sending a test email sets the verified flag, saving config clears it, and disconnecting clears it. Also adds unit tests for email_verified?/mark/clear in the Mailer module. Co-Authored-By: Claude Opus 4.6 --- test/berrypod/mailer_test.exs | 29 ++++++++++++ .../live/admin/email_settings_test.exs | 46 ++++++++++++++++++- 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/test/berrypod/mailer_test.exs b/test/berrypod/mailer_test.exs index acc2ed8..0802bbc 100644 --- a/test/berrypod/mailer_test.exs +++ b/test/berrypod/mailer_test.exs @@ -59,6 +59,35 @@ defmodule Berrypod.MailerTest do end end + describe "email_verified?/0" do + test "returns false when adapter is Local" do + Application.put_env(:berrypod, Mailer, adapter: Swoosh.Adapters.Local) + Mailer.mark_email_verified() + refute Mailer.email_verified?() + end + + test "returns false when configured but not verified" do + Application.put_env(:berrypod, Mailer, adapter: Swoosh.Adapters.Postmark, api_key: "test") + Mailer.clear_email_verified() + refute Mailer.email_verified?() + end + + test "returns true when configured and verified" do + Application.put_env(:berrypod, Mailer, adapter: Swoosh.Adapters.Postmark, api_key: "test") + Mailer.mark_email_verified() + assert Mailer.email_verified?() + end + + test "clear_email_verified resets the flag" do + Application.put_env(:berrypod, Mailer, adapter: Swoosh.Adapters.Postmark, api_key: "test") + Mailer.mark_email_verified() + assert Mailer.email_verified?() + + Mailer.clear_email_verified() + refute Mailer.email_verified?() + end + end + describe "current_config/0" do test "returns {nil, %{}} when no adapter configured" do Application.put_env(:berrypod, Mailer, adapter: Swoosh.Adapters.Local) diff --git a/test/berrypod_web/live/admin/email_settings_test.exs b/test/berrypod_web/live/admin/email_settings_test.exs index 2eb6eb0..381ba89 100644 --- a/test/berrypod_web/live/admin/email_settings_test.exs +++ b/test/berrypod_web/live/admin/email_settings_test.exs @@ -4,7 +4,7 @@ defmodule BerrypodWeb.Admin.EmailSettingsTest do import Phoenix.LiveViewTest import Berrypod.AccountsFixtures - alias Berrypod.Settings + alias Berrypod.{Mailer, Settings} setup do # Ensure mailer starts as test adapter and restore on exit @@ -142,6 +142,50 @@ defmodule BerrypodWeb.Admin.EmailSettingsTest do refute html =~ "Send test email" end + + test "sending test email sets verified flag", %{conn: conn} do + Settings.put_setting("email_adapter", "postmark") + Settings.put_secret("email_postmark_api_key", "pm_test_abc") + + {:ok, view, _html} = live(conn, ~p"/admin/settings/email") + + html = render_click(view, "send_test") + + assert html =~ "Test email sent" + assert Mailer.email_verified?() + end + + test "saving config clears verified flag", %{conn: conn} do + Mailer.mark_email_verified() + assert Mailer.email_verified?() + + {:ok, view, _html} = live(conn, ~p"/admin/settings/email") + + view + |> form("form[phx-change=\"change_adapter\"]", %{email: %{adapter: "postmark"}}) + |> render_change() + + view + |> form("form[phx-submit=\"save\"]", %{ + email: %{adapter: "postmark", api_key: "pm_new_key"} + }) + |> render_submit() + + refute Mailer.email_verified?() + end + + test "disconnecting clears verified flag", %{conn: conn} do + Settings.put_setting("email_adapter", "postmark") + Settings.put_secret("email_postmark_api_key", "pm_test_abc") + Mailer.mark_email_verified() + assert Mailer.email_verified?() + + {:ok, view, _html} = live(conn, ~p"/admin/settings/email") + + render_click(view, "disconnect") + + refute Mailer.email_verified?() + end end describe "unauthenticated" do