Merge branch 'fixes' into 'main'

Various fixes

See merge request framasoft/mobilizon!1395
This commit is contained in:
Thomas Citharel 2023-05-25 10:38:01 +00:00
commit f0b559d2ef
3 changed files with 160 additions and 3 deletions

View file

@ -115,9 +115,9 @@ import Account from "vue-material-design-icons/Account.vue";
const PROFILES_PER_PAGE = 10; const PROFILES_PER_PAGE = 10;
const preferredUsername = ref(""); const preferredUsername = useRouteQuery("preferredUsername", "");
const name = ref(""); const name = useRouteQuery("name", "");
const domain = ref(""); const domain = useRouteQuery("domain", "");
const local = useRouteQuery("local", true, booleanTransformer); const local = useRouteQuery("local", true, booleanTransformer);
const suspended = useRouteQuery("suspended", false, booleanTransformer); const suspended = useRouteQuery("suspended", false, booleanTransformer);

View file

@ -26,6 +26,7 @@ defmodule Mobilizon.Web.Email.Group do
users ++ [Users.get_user_with_activity_settings!(actor.user_id)] users ++ [Users.get_user_with_activity_settings!(actor.user_id)]
end end
end) end)
|> Enum.uniq_by(& &1.email)
|> Enum.each(&notify_follower(event, group, &1)) |> Enum.each(&notify_follower(event, group, &1))
end end

View file

@ -0,0 +1,156 @@
defmodule Mobilizon.Web.Email.GroupTest do
@moduledoc """
Test the Mobilizon.Web.Email.Group module
"""
alias Mobilizon.Actors.Actor
alias Mobilizon.Events.Event
alias Mobilizon.Users
alias Mobilizon.Users.{ActivitySetting, Setting, User}
alias Mobilizon.Web.Email.Group
use Mobilizon.DataCase
import Swoosh.TestAssertions
import Mobilizon.Factory
describe "Notify of new event" do
test "members, followers, execept the ones that disabled it" do
{_user_creator, actor} = insert_user_with_settings("user@creator.com")
%Actor{} = group = insert(:group)
%Event{} = event = insert(:event, attributed_to: group, organizer_actor: actor)
insert(:member,
parent: group,
actor: actor,
role: :administrator,
member_since: DateTime.add(DateTime.utc_now(), -3600)
)
{_user_member, actor_member} = insert_user_with_settings("user@member.com")
insert(:member,
parent: group,
actor: actor_member,
role: :member,
member_since: DateTime.add(DateTime.utc_now(), -3600)
)
{_user_pending_member, actor_pending_member} =
insert_user_with_settings("user@pending.member.com")
insert(:member,
parent: group,
actor: actor_pending_member,
role: :not_approved
)
{_user_invited_member, actor_invited_member} =
insert_user_with_settings("user@invited.member.com")
insert(:member,
parent: group,
actor: actor_invited_member,
role: :invited,
member_since: DateTime.add(DateTime.utc_now(), -3600)
)
{_user_rejected_member, actor_rejected_member} =
insert_user_with_settings("user@rejected.member.com")
insert(:member,
parent: group,
actor: actor_rejected_member,
role: :rejected,
member_since: DateTime.add(DateTime.utc_now(), -3600)
)
{_user_approved_follower, actor_follower} =
insert_user_with_settings("user@approved.follower.com")
insert(:follower, actor: actor_follower, target_actor: group, approved: true)
{_user_no_notify_follower, actor_follower_no_notify} =
insert_user_with_settings("user@no-notify.follower.com")
insert(:follower,
actor: actor_follower_no_notify,
target_actor: group,
approved: true,
notify: false
)
{_user_unapproved_follower, actor_unapproved_follower} =
insert_user_with_settings("user@unapproved.follower.com")
insert(:follower, actor: actor_unapproved_follower, target_actor: group, approved: false)
# One profile has no notify, the other one has it
{user_still_notify_follower, actor_follower_still_notify} =
insert_user_with_settings("user@still-notify.follower.com")
insert(:follower,
actor: actor_follower_still_notify,
target_actor: group,
approved: true,
notify: false
)
%Actor{} = actor_follower_with_notify = insert(:actor, user: user_still_notify_follower)
insert(:follower,
actor: actor_follower_with_notify,
target_actor: group,
approved: true,
notify: true
)
%Actor{} = actor_remote_follower = insert(:actor, user: nil, domain: "some.remote.tld")
insert(:follower,
actor: actor_remote_follower,
target_actor: group,
approved: true,
notify: true
)
assert :ok == Group.notify_of_new_event(event)
refute_email_sent(to: "user@creator.com")
refute_email_sent(to: "user@pending.member.com")
refute_email_sent(to: "user@invited.member.com")
refute_email_sent(to: "user@rejected.member.com")
refute_email_sent(to: "user@unapproved.follower.com")
refute_email_sent(to: "user@no-notify.follower.com")
assert_email_sent(to: "user@member.com")
assert_email_sent(to: "user@approved.follower.com")
assert_email_sent(to: "user@still-notify.follower.com")
end
end
defp insert_user_with_settings(email) do
%User{} = user = insert(:user, email: email)
%Actor{} = actor = insert(:actor, user: user)
%Setting{} =
user_settings =
insert(:settings,
user: user,
user_id: user.id,
group_notifications: :one_day
)
%ActivitySetting{} =
activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user)
{:ok, user} =
Users.update_user(user, %{
settings: user_settings,
activity_settings: [activity_setting],
default_actor_id: actor.id
})
{user, actor}
end
end