auto-confirm admin during setup, skip email verification
Some checks failed
deploy / deploy (push) Has been cancelled

Setup wizard no longer requires email delivery. Admin account is
auto-confirmed and auto-logged-in via token redirect. Adds setup
secret gate for prod (logged on boot), SMTP env var config in
runtime.exs, email_configured? helper, and admin warning banner
when email isn't set up. Includes plan files for this task and
the follow-up email settings UI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
jamey
2026-02-21 10:24:26 +00:00
parent 8e818da651
commit 9d9bd09059
17 changed files with 776 additions and 291 deletions

View File

@@ -64,44 +64,34 @@ defmodule Berrypod.AccountsTest do
end
end
describe "admin_email/0" do
test "returns nil when no users exist" do
assert is_nil(Accounts.admin_email())
describe "register_and_confirm_admin/1" do
test "creates a confirmed admin user" do
email = unique_user_email()
assert {:ok, user} = Accounts.register_and_confirm_admin(%{email: email})
assert user.email == email
assert user.confirmed_at
end
test "returns the admin email" do
user = user_fixture()
assert Accounts.admin_email() == user.email
test "fails if admin already exists" do
user_fixture()
assert {:error, :admin_already_exists} =
Accounts.register_and_confirm_admin(%{email: unique_user_email()})
end
test "validates email" do
assert {:error, changeset} = Accounts.register_and_confirm_admin(%{email: "bad"})
assert errors_on(changeset).email
end
end
describe "get_unconfirmed_admin/0" do
test "returns nil when no users exist" do
assert is_nil(Accounts.get_unconfirmed_admin())
end
test "returns unconfirmed user" do
user = unconfirmed_user_fixture()
assert Accounts.get_unconfirmed_admin().id == user.id
end
test "returns nil for confirmed user" do
_user = user_fixture()
assert is_nil(Accounts.get_unconfirmed_admin())
end
end
describe "delete_unconfirmed_user/1" do
test "deletes an unconfirmed user" do
user = unconfirmed_user_fixture()
assert {:ok, _} = Accounts.delete_unconfirmed_user(user)
refute Accounts.has_admin?()
end
test "refuses to delete a confirmed user" do
describe "generate_login_token/1" do
test "creates a login token for the user" do
user = user_fixture()
assert {:error, :already_confirmed} = Accounts.delete_unconfirmed_user(user)
assert Accounts.has_admin?()
token = Accounts.generate_login_token(user)
assert is_binary(token)
assert found_user = Accounts.get_user_by_magic_link_token(token)
assert found_user.id == user.id
end
end