Add e2e test for magic links (#1345)

Related to #1342
This commit is contained in:
Andrew Dryga
2023-01-19 14:57:43 -06:00
committed by GitHub
parent 547b3bbf65
commit 03100df545
4 changed files with 67 additions and 2 deletions

View File

@@ -210,7 +210,7 @@ defmodule FzHttpWeb.Router do
get "/config.xml", BrowserController, :config
end
if Mix.env() == :dev do
if Mix.env() in [:dev, :test] do
import Phoenix.LiveDashboard.Router
scope "/dev" do

View File

@@ -50,6 +50,52 @@ defmodule FzHttpWeb.Acceptance.AuthenticationTest do
|> assert_path("/user_devices")
|> Auth.assert_authenticated(user)
end
feature "can not reset password using invalid email", %{session: session} do
UsersFixtures.create_user_with_role(:unprivileged)
session
|> visit(~p"/")
|> assert_el(Query.link("Sign in with email"))
|> click(Query.link("Sign in with email"))
|> assert_el(Query.link("Forgot password"))
|> click(Query.link("Forgot password"))
|> assert_el(Query.text("Reset Password"))
|> fill_form(%{"email" => "foo@bar.com"})
|> click(Query.button("Send"))
|> assert_el(Query.text("Reset Password"))
|> visit(~p"/dev/mailbox")
|> assert_el(Query.text("Empty mailbox..."))
end
feature "can reset password using email link", %{session: session} do
user = UsersFixtures.create_user_with_role(:unprivileged)
session =
session
|> visit(~p"/")
|> assert_el(Query.link("Sign in with email"))
|> click(Query.link("Sign in with email"))
|> assert_el(Query.link("Forgot password"))
|> click(Query.link("Forgot password"))
|> assert_el(Query.text("Reset Password"))
|> fill_form(%{
"email" => user.email
})
|> click(Query.button("Send"))
|> assert_el(Query.text("Please check your inbox for the magic link."))
|> visit(~p"/dev/mailbox")
|> click(Query.link("Firezone Magic Link"))
|> assert_el(Query.text("HTML body preview:"))
email_text = text(session, Query.css(".body-text"))
[link] = Regex.run(~r|http://localhost[^ ]*|, email_text)
session
|> visit(link)
|> assert_el(Query.text("Your Devices"))
|> assert_el(Query.text("Signed in as #{user.email}."))
end
end
describe "using OIDC provider" do
@@ -347,7 +393,9 @@ defmodule FzHttpWeb.Acceptance.AuthenticationTest do
defp password_login_flow(session, email, password) do
session
|> visit(~p"/")
|> assert_el(Query.link("Sign in with email"))
|> click(Query.link("Sign in with email"))
|> assert_el(Query.text("Sign In"))
|> fill_form(%{
"Email" => email,
"Password" => password

View File

@@ -0,0 +1,15 @@
defmodule FzHttpWeb.MailerTestAdapter do
use Swoosh.Adapter
@impl true
def deliver(email, config) do
Swoosh.Adapters.Local.deliver(email, config)
Swoosh.Adapters.Test.deliver(email, config)
end
@impl true
def deliver_many(emails, config) do
Swoosh.Adapters.Local.deliver_many(emails, config)
Swoosh.Adapters.Test.deliver_many(emails, config)
end
end

View File

@@ -53,7 +53,9 @@ config :ueberauth, Ueberauth,
identity: {Ueberauth.Strategy.Identity, [callback_methods: ["POST"], uid_field: :email]}
]
config :fz_http, FzHttpWeb.Mailer, adapter: Swoosh.Adapters.Test, from_email: "test@firez.one"
config :fz_http, FzHttpWeb.Mailer,
adapter: FzHttpWeb.MailerTestAdapter,
from_email: "test@firez.one"
config :fz_vpn,
# XXX: Bump test coverage by adding a stubbed out module for FzVpn.StatsPushService