Add accepts_newsletter
field to User, set during registration or account updates
This commit is contained in:
parent
b221d77a6d
commit
a0f2cba0d8
@ -148,6 +148,7 @@ defmodule Pleroma.User do
|
||||
field(:accepts_chat_messages, :boolean, default: nil)
|
||||
field(:last_active_at, :naive_datetime)
|
||||
field(:disclose_client, :boolean, default: true)
|
||||
field(:accepts_newsletter, :boolean, default: false)
|
||||
|
||||
embeds_one(
|
||||
:notification_settings,
|
||||
@ -515,7 +516,8 @@ defmodule Pleroma.User do
|
||||
:is_discoverable,
|
||||
:actor_type,
|
||||
:accepts_chat_messages,
|
||||
:disclose_client
|
||||
:disclose_client,
|
||||
:accepts_newsletter
|
||||
]
|
||||
)
|
||||
|> unique_constraint(:nickname)
|
||||
@ -678,7 +680,8 @@ defmodule Pleroma.User do
|
||||
:name,
|
||||
:nickname,
|
||||
:email,
|
||||
:accepts_chat_messages
|
||||
:accepts_chat_messages,
|
||||
:accepts_newsletter
|
||||
])
|
||||
|> validate_required([:name, :nickname])
|
||||
|> unique_constraint(:nickname)
|
||||
@ -722,7 +725,8 @@ defmodule Pleroma.User do
|
||||
:password_confirmation,
|
||||
:emoji,
|
||||
:accepts_chat_messages,
|
||||
:registration_reason
|
||||
:registration_reason,
|
||||
:accepts_newsletter
|
||||
])
|
||||
|> validate_required([:name, :nickname, :password, :password_confirmation])
|
||||
|> validate_confirmation(:password)
|
||||
@ -1709,7 +1713,8 @@ defmodule Pleroma.User do
|
||||
fields: [],
|
||||
raw_fields: [],
|
||||
is_discoverable: false,
|
||||
also_known_as: []
|
||||
also_known_as: [],
|
||||
accepts_newsletter: false
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -458,6 +458,11 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do
|
||||
type: :string,
|
||||
nullable: true,
|
||||
description: "Invite token required when the registrations aren't public"
|
||||
},
|
||||
accepts_newsletter: %Schema{
|
||||
allOf: [BooleanLike],
|
||||
description:
|
||||
"Whether the user opts-in to receiving news and marketing updates from site admins. These should be presented to the user in order to allow them to consent before setting this parameter to TRUE."
|
||||
}
|
||||
},
|
||||
example: %{
|
||||
@ -635,7 +640,12 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do
|
||||
description:
|
||||
"Discovery (listing, indexing) of this account by external services (search bots etc.) is allowed."
|
||||
},
|
||||
actor_type: ActorType
|
||||
actor_type: ActorType,
|
||||
accepts_newsletter: %Schema{
|
||||
allOf: [BooleanLike],
|
||||
description:
|
||||
"Whether the user opts-in to receiving news and marketing updates from site admins."
|
||||
}
|
||||
},
|
||||
example: %{
|
||||
bot: false,
|
||||
|
@ -185,7 +185,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
|
||||
:skip_thread_containment,
|
||||
:allow_following_move,
|
||||
:also_known_as,
|
||||
:accepts_chat_messages
|
||||
:accepts_chat_messages,
|
||||
:accepts_newsletter
|
||||
]
|
||||
|> Enum.reduce(%{}, fn key, acc ->
|
||||
Maps.put_if_present(acc, key, params[key], &{:ok, truthy_param?(&1)})
|
||||
|
@ -14,7 +14,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
|
||||
def register_user(params, opts \\ []) do
|
||||
params =
|
||||
params
|
||||
|> Map.take([:email, :token, :password])
|
||||
|> Map.take([:email, :token, :password, :accepts_newsletter])
|
||||
|> Map.put(:bio, params |> Map.get(:bio, "") |> User.parse_bio())
|
||||
|> Map.put(:nickname, params[:username])
|
||||
|> Map.put(:name, Map.get(params, :fullname, params[:username]))
|
||||
|
@ -0,0 +1,9 @@
|
||||
defmodule Pleroma.Repo.Migrations.AddNewsletterFieldToUsers do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
alter table(:users) do
|
||||
add(:accepts_newsletter, :boolean, default: false)
|
||||
end
|
||||
end
|
||||
end
|
@ -663,6 +663,16 @@ defmodule Pleroma.UserTest do
|
||||
|
||||
assert user.is_confirmed
|
||||
end
|
||||
|
||||
test "it sets 'accepts_newsletter'" do
|
||||
params = Map.put_new(@full_user_data, :accepts_newsletter, true)
|
||||
changeset = User.register_changeset(%User{}, params)
|
||||
assert changeset.valid?
|
||||
|
||||
{:ok, user} = Repo.insert(changeset)
|
||||
|
||||
assert user.accepts_newsletter
|
||||
end
|
||||
end
|
||||
|
||||
describe "user registration, with :account_activation_required" do
|
||||
@ -737,6 +747,17 @@ defmodule Pleroma.UserTest do
|
||||
end
|
||||
end
|
||||
|
||||
describe "update_changeset/2" do
|
||||
test "it sets :accepts_newsletter" do
|
||||
changeset =
|
||||
%User{accepts_newsletter: false}
|
||||
|> User.update_changeset(%{accepts_newsletter: true})
|
||||
|
||||
assert changeset.valid?
|
||||
assert %User{accepts_newsletter: true} = Ecto.Changeset.apply_changes(changeset)
|
||||
end
|
||||
end
|
||||
|
||||
describe "get_or_fetch/1" do
|
||||
test "gets an existing user by nickname" do
|
||||
user = insert(:user)
|
||||
|
@ -1125,6 +1125,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||
assert user
|
||||
assert user.is_confirmed
|
||||
assert user.is_approved
|
||||
refute user.accepts_newsletter
|
||||
end
|
||||
|
||||
test "registers but does not log in with :account_activation_required", %{conn: conn} do
|
||||
@ -1356,6 +1357,20 @@ defmodule Pleroma.Web.MastodonAPI.AccountControllerTest do
|
||||
assert json_response_and_validate_schema(res, 200)
|
||||
end
|
||||
|
||||
test "registration with accepts_newsletter", %{conn: conn, valid_params: valid_params} do
|
||||
app_token = insert(:oauth_token, user: nil)
|
||||
conn = put_req_header(conn, "authorization", "Bearer " <> app_token.token)
|
||||
|
||||
res =
|
||||
conn
|
||||
|> put_req_header("content-type", "application/json")
|
||||
|> Map.put(:remote_ip, {127, 0, 0, 9})
|
||||
|> post("/api/v1/accounts", Map.put(valid_params, :accepts_newsletter, true))
|
||||
|
||||
assert json_response_and_validate_schema(res, 200)
|
||||
assert %User{accepts_newsletter: true} = Repo.get_by(User, email: "lain@example.org")
|
||||
end
|
||||
|
||||
test "returns forbidden if token is invalid", %{conn: conn, valid_params: valid_params} do
|
||||
res =
|
||||
conn
|
||||
|
@ -113,6 +113,13 @@ defmodule Pleroma.Web.MastodonAPI.UpdateCredentialsTest do
|
||||
assert user_data["pleroma"]["accepts_chat_messages"] == false
|
||||
end
|
||||
|
||||
test "updates the user's newsletter preference", %{user: user, conn: conn} do
|
||||
conn = patch(conn, "/api/v1/accounts/update_credentials", %{accepts_newsletter: "true"})
|
||||
|
||||
assert json_response_and_validate_schema(conn, 200)
|
||||
assert %User{accepts_newsletter: true} = User.get_by_id(user.id)
|
||||
end
|
||||
|
||||
test "updates the user's allow_following_move", %{user: user, conn: conn} do
|
||||
assert user.allow_following_move == true
|
||||
|
||||
|
@ -146,6 +146,20 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
|
||||
assert user2.bio == expected_text
|
||||
end
|
||||
|
||||
test "it registers a new user with accepts_newsletter." do
|
||||
data = %{
|
||||
:username => "lain",
|
||||
:email => "lain@wired.jp",
|
||||
:fullname => "lain iwakura",
|
||||
:password => "bear",
|
||||
:confirm => "bear",
|
||||
:accepts_newsletter => true
|
||||
}
|
||||
|
||||
{:ok, user} = TwitterAPI.register_user(data)
|
||||
assert user.accepts_newsletter
|
||||
end
|
||||
|
||||
describe "register with one time token" do
|
||||
setup do: clear_config([:instance, :registrations_open], false)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user