
3 changed files with 110 additions and 22 deletions
@ -0,0 +1,73 @@
|
||||
defmodule Mobilizon.Service.Workers.SendActivityRecapWorkerTest do |
||||
@moduledoc """ |
||||
Test the SendActivityRecapWorker module |
||||
""" |
||||
|
||||
alias Mobilizon.{Activities, Users} |
||||
alias Mobilizon.Activities.Activity |
||||
alias Mobilizon.Actors.Actor |
||||
alias Mobilizon.Service.Workers.SendActivityRecapWorker |
||||
alias Mobilizon.Storage.Page |
||||
alias Mobilizon.Users.{ActivitySetting, Setting, User} |
||||
|
||||
use Mobilizon.DataCase |
||||
import Swoosh.TestAssertions |
||||
import Mobilizon.Factory |
||||
|
||||
describe "Send activity recap" do |
||||
# Skipped because this depends on the test being run between @start_time and @end_time |
||||
@tag :skip |
||||
test "not if we already have sent notifications" do |
||||
%User{} = user = insert(:user) |
||||
%Actor{} = actor = insert(:actor, user: user) |
||||
%Actor{} = group = insert(:group) |
||||
|
||||
insert(:member, |
||||
parent: group, |
||||
actor: actor, |
||||
role: :administrator, |
||||
member_since: DateTime.add(DateTime.utc_now(), -3600) |
||||
) |
||||
|
||||
%Activity{id: activity_id} = |
||||
insert(:mobilizon_activity, inserted_at: DateTime.utc_now(), group: group) |
||||
|
||||
assert %Page{elements: [%Activity{id: ^activity_id}], total: 1} = |
||||
Activities.list_group_activities(group.id) |
||||
|
||||
assert [%Activity{id: ^activity_id}] = |
||||
Activities.list_group_activities_for_recap(group.id, actor.id) |
||||
|
||||
old = DateTime.utc_now() |> DateTime.add(-3600 * 24 * 3) |> DateTime.truncate(:second) |
||||
|
||||
%Setting{} = |
||||
user_settings = |
||||
insert(:settings, |
||||
user: user, |
||||
user_id: user.id, |
||||
group_notifications: :one_day, |
||||
last_notification_sent: old |
||||
) |
||||
|
||||
%ActivitySetting{} = |
||||
activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user) |
||||
|
||||
Users.update_user(user, %{settings: user_settings, activity_settings: [activity_setting]}) |
||||
assert old == Users.get_user_with_settings!(user.id).settings.last_notification_sent |
||||
|
||||
assert :ok == SendActivityRecapWorker.perform(%Oban.Job{}) |
||||
|
||||
assert_email_sent(to: user.email) |
||||
|
||||
assert %{last_notification_sent: updated_last_notification_sent} = |
||||
Users.get_setting(user.id) |
||||
|
||||
assert old != updated_last_notification_sent |
||||
assert DateTime.diff(DateTime.utc_now(), updated_last_notification_sent) < 5 |
||||
|
||||
assert :ok == SendActivityRecapWorker.perform(%Oban.Job{}) |
||||
|
||||
refute_email_sent() |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue