fix(admin-api): structure reset token failures
This commit is contained in:
parent
d0b5a05075
commit
bb4826d8ae
2 changed files with 24 additions and 12 deletions
|
|
@ -250,7 +250,10 @@ defmodule Pleroma.Web.AdminAPI.UserController do
|
||||||
|> render("create_errors.json", changesets: changesets)
|
|> render("create_errors.json", changesets: changesets)
|
||||||
|
|
||||||
{:error, {:password_reset_token, _}, _reason, _} ->
|
{:error, {:password_reset_token, _}, _reason, _} ->
|
||||||
raise "Failed to create password reset token"
|
Pleroma.Web.AdminAPI.FallbackController.call(
|
||||||
|
conn,
|
||||||
|
{:password_reset_token_error, :creation_failed}
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -240,6 +240,21 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
test "Password reset token failures roll back the user batch", %{conn: conn} do
|
test "Password reset token failures roll back the user batch", %{conn: conn} do
|
||||||
|
idempotency_key = Ecto.UUID.generate()
|
||||||
|
|
||||||
|
request = fn conn ->
|
||||||
|
conn
|
||||||
|
|> put_req_header("accept", "application/json")
|
||||||
|
|> put_req_header("content-type", "application/json")
|
||||||
|
|> put_req_header("idempotency-key", idempotency_key)
|
||||||
|
|> post("/api/pleroma/admin/users", %{
|
||||||
|
"users" => [
|
||||||
|
%{"nickname" => "lain", "email" => "lain@example.org"},
|
||||||
|
%{"nickname" => "lain2", "email" => "lain2@example.org"}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
with_mock Pleroma.PasswordResetToken, [:passthrough],
|
with_mock Pleroma.PasswordResetToken, [:passthrough],
|
||||||
create_token: fn user ->
|
create_token: fn user ->
|
||||||
if user.nickname == "lain2" do
|
if user.nickname == "lain2" do
|
||||||
|
|
@ -250,23 +265,17 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
end do
|
end do
|
||||||
assert_error_sent(500, fn ->
|
conn = request.(conn)
|
||||||
conn
|
|
||||||
|> put_req_header("accept", "application/json")
|
assert json_response(conn, 500) == %{"error" => "Something went wrong"}
|
||||||
|> put_req_header("content-type", "application/json")
|
|
||||||
|> post("/api/pleroma/admin/users", %{
|
|
||||||
"users" => [
|
|
||||||
%{"nickname" => "lain", "email" => "lain@example.org"},
|
|
||||||
%{"nickname" => "lain2", "email" => "lain2@example.org"}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
assert_received {:token_created, "lain"}
|
assert_received {:token_created, "lain"}
|
||||||
refute User.get_by_nickname("lain")
|
refute User.get_by_nickname("lain")
|
||||||
refute User.get_by_nickname("lain2")
|
refute User.get_by_nickname("lain2")
|
||||||
assert Repo.aggregate(Pleroma.PasswordResetToken, :count) == 0
|
assert Repo.aggregate(Pleroma.PasswordResetToken, :count) == 0
|
||||||
|
|
||||||
|
assert [_account1, _account2] = conn |> request.() |> json_response(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "Password reset links are not cached by idempotency key", %{conn: conn} do
|
test "Password reset links are not cached by idempotency key", %{conn: conn} do
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue