X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=test%2Fpleroma%2Fweb%2Ftwitter_api%2Fpassword_controller_test.exs;h=4ff792dc8745db3d0339ed65dbfad7ddb969b798;hb=063cc61fc11cd80981d0e23e6d0dfa778cc91bbf;hp=cf99e243418252239ae99b3414d23e2f59a8279f;hpb=2926713fe5c36b8fc64bcce13ca16bc12eaff96c;p=akkoma diff --git a/test/pleroma/web/twitter_api/password_controller_test.exs b/test/pleroma/web/twitter_api/password_controller_test.exs index cf99e2434..4ff792dc8 100644 --- a/test/pleroma/web/twitter_api/password_controller_test.exs +++ b/test/pleroma/web/twitter_api/password_controller_test.exs @@ -5,16 +5,20 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do use Pleroma.Web.ConnCase + alias Pleroma.Config alias Pleroma.PasswordResetToken + alias Pleroma.Repo + alias Pleroma.Tests.ObanHelpers alias Pleroma.User alias Pleroma.Web.OAuth.Token import Pleroma.Factory + import Swoosh.TestAssertions - describe "GET /api/pleroma/password_reset/token" do + describe "GET /api/v1/pleroma/password_reset/token" do test "it returns error when token invalid", %{conn: conn} do response = conn - |> get("/api/pleroma/password_reset/token") + |> get("/api/v1/pleroma/password_reset/token") |> html_response(:ok) assert response =~ "

Invalid Token

" @@ -26,7 +30,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do response = conn - |> get("/api/pleroma/password_reset/#{token.token}") + |> get("/api/v1/pleroma/password_reset/#{token.token}") |> html_response(:ok) assert response =~ "

Password Reset for #{user.nickname}

" @@ -41,14 +45,14 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do response = conn - |> get("/api/pleroma/password_reset/#{token.token}") + |> get("/api/v1/pleroma/password_reset/#{token.token}") |> html_response(:ok) assert response =~ "

Invalid Token

" end end - describe "POST /api/pleroma/password_reset" do + describe "POST /api/v1/pleroma/password_reset" do test "it fails for an expired token", %{conn: conn} do clear_config([:instance, :password_reset_token_validity], 0) @@ -66,7 +70,7 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do response = conn |> assign(:user, user) - |> post("/api/pleroma/password_reset", %{data: params}) + |> post("/api/v1/pleroma/password_reset", %{data: params}) |> html_response(:ok) refute response =~ "

Password changed!

" @@ -86,13 +90,13 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do response = conn |> assign(:user, user) - |> post("/api/pleroma/password_reset", %{data: params}) + |> post("/api/v1/pleroma/password_reset", %{data: params}) |> html_response(:ok) assert response =~ "

Password changed!

" user = refresh_record(user) - assert Pleroma.Password.Pbkdf2.verify_pass("test", user.password_hash) + assert Pleroma.Password.checkpw("test", user.password_hash) assert Enum.empty?(Token.get_user_tokens(user)) end @@ -110,10 +114,100 @@ defmodule Pleroma.Web.TwitterAPI.PasswordControllerTest do conn |> assign(:user, user) - |> post("/api/pleroma/password_reset", %{data: params}) + |> post("/api/v1/pleroma/password_reset", %{data: params}) |> html_response(:ok) assert User.get_by_id(user.id).password_reset_pending == false end end + + describe "POST /auth/password, with valid parameters" do + setup %{conn: conn} do + user = insert(:user) + conn = post(conn, "/auth/password?email=#{user.email}") + %{conn: conn, user: user} + end + + test "it returns 204", %{conn: conn} do + assert empty_json_response(conn) + end + + test "it creates a PasswordResetToken record for user", %{user: user} do + token_record = Repo.get_by(Pleroma.PasswordResetToken, user_id: user.id) + assert token_record + end + + test "it sends an email to user", %{user: user} do + ObanHelpers.perform_all() + token_record = Repo.get_by(Pleroma.PasswordResetToken, user_id: user.id) + + email = Pleroma.Emails.UserEmail.password_reset_email(user, token_record.token) + notify_email = Config.get([:instance, :notify_email]) + instance_name = Config.get([:instance, :name]) + + assert_email_sent( + from: {instance_name, notify_email}, + to: {user.name, user.email}, + html_body: email.html_body + ) + end + end + + describe "POST /auth/password, with nickname" do + test "it returns 204", %{conn: conn} do + user = insert(:user) + + assert conn + |> post("/auth/password?nickname=#{user.nickname}") + |> empty_json_response() + + ObanHelpers.perform_all() + token_record = Repo.get_by(Pleroma.PasswordResetToken, user_id: user.id) + + email = Pleroma.Emails.UserEmail.password_reset_email(user, token_record.token) + notify_email = Config.get([:instance, :notify_email]) + instance_name = Config.get([:instance, :name]) + + assert_email_sent( + from: {instance_name, notify_email}, + to: {user.name, user.email}, + html_body: email.html_body + ) + end + + test "it doesn't fail when a user has no email", %{conn: conn} do + user = insert(:user, %{email: nil}) + + assert conn + |> post("/auth/password?nickname=#{user.nickname}") + |> empty_json_response() + end + end + + describe "POST /auth/password, with invalid parameters" do + setup do + user = insert(:user) + {:ok, user: user} + end + + test "it returns 204 when user is not found", %{conn: conn, user: user} do + conn = post(conn, "/auth/password?email=nonexisting_#{user.email}") + + assert empty_json_response(conn) + end + + test "it returns 204 when user is not local", %{conn: conn, user: user} do + {:ok, user} = Repo.update(Ecto.Changeset.change(user, local: false)) + conn = post(conn, "/auth/password?email=#{user.email}") + + assert empty_json_response(conn) + end + + test "it returns 204 when user is deactivated", %{conn: conn, user: user} do + {:ok, user} = Repo.update(Ecto.Changeset.change(user, is_active: false, local: true)) + conn = post(conn, "/auth/password?email=#{user.email}") + + assert empty_json_response(conn) + end + end end