74 lines
2.4 KiB
Elixir
74 lines
2.4 KiB
Elixir
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
|