defmodule PlausibleWeb.AuthController.LogsTest do use PlausibleWeb.ConnCase import ExUnit.CaptureLog setup {PlausibleWeb.FirstLaunchPlug.Test, :skip} describe "POST /login" do setup do patch_env(:log_failed_login_attempts, true) end test "logs on missing user", %{conn: conn} do logs = capture_log(fn -> post(conn, "/login", email: "user@example.com", password: "password") end) assert logs =~ "[warning] [login] user not found for user@example.com" end test "logs on wrong password", %{conn: conn} do user = insert(:user, password: "password") logs = capture_log(fn -> post(conn, "/login", email: user.email, password: "wrong") end) assert logs =~ "[warning] [login] wrong password for #{user.email}" end test "logs on too many login attempts" do user = insert(:user, password: "password") conn = build_conn() |> put_req_header("x-forwarded-for", "1.1.1.1") logs = eventually( fn -> capture_log(fn -> Enum.each(1..5, fn _ -> post(conn, "/login", email: user.email, password: "wrong") end) end) {conn, logs} = with_log(fn -> post(conn, "/login", email: user.email, password: "wrong") end) {conn.status == 429, logs} end, 500 ) assert logs =~ "[warning] [login] too many login attempts for #{user.email}" end end end