File size: 5,101 Bytes
6778ee0 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | defmodule Plausible.Workers.ScheduleEmailReportsTest do
use Plausible.DataCase
use Oban.Testing, repo: Plausible.Repo
alias Plausible.Workers.{ScheduleEmailReports, SendEmailReport}
describe "weekly reports" do
test "schedules weekly report on Monday 9am local timezone" do
site = new_site(domain: "test-site.com", timezone: "US/Eastern")
insert(:weekly_report, site: site, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
assert_enqueued(
worker: SendEmailReport,
args: %{site_id: site.id, interval: "weekly"},
scheduled_at: ScheduleEmailReports.monday_9am(site.timezone)
)
end
on_ee do
test "schedules weekly report for a consolidated view" do
{:ok, team} = new_user() |> Plausible.Teams.get_or_create()
new_site(team: team)
new_site(team: team)
consolidated_view = new_consolidated_view(team)
insert(:weekly_report, site: consolidated_view, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
assert_enqueued(
worker: SendEmailReport,
args: %{site_id: consolidated_view.id, interval: "weekly"},
scheduled_at: ScheduleEmailReports.monday_9am(consolidated_view.timezone)
)
end
end
test "does not schedule more than one weekly report at a time" do
site = new_site(domain: "test-site.com", timezone: "US/Eastern")
insert(:weekly_report, site: site, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
perform_job(ScheduleEmailReports, %{})
assert Enum.count(all_enqueued(worker: SendEmailReport)) == 1
end
test "does not schedule a weekly report for locked site" do
site = new_site(domain: "test-site.com", timezone: "US/Eastern")
site.team |> Ecto.Changeset.change(locked: true) |> Repo.update!()
insert(:weekly_report, site: site, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
assert Enum.empty?(all_enqueued(worker: SendEmailReport))
end
test "schedules a new report as soon as a previous one is completed" do
site = new_site(domain: "test-site.com", timezone: "US/Eastern")
insert(:weekly_report, site: site, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
Repo.update_all("oban_jobs", set: [state: "completed"])
assert Enum.empty?(all_enqueued(worker: SendEmailReport))
perform_job(ScheduleEmailReports, %{})
assert Enum.count(all_enqueued(worker: SendEmailReport)) == 1
end
end
describe "monthly_reports" do
test "schedules monthly report on first of the next month at 9am local timezone" do
site = new_site(domain: "test-site.com", timezone: "US/Eastern")
insert(:monthly_report, site: site, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
assert_enqueued(
worker: SendEmailReport,
args: %{site_id: site.id, interval: "monthly"},
scheduled_at: ScheduleEmailReports.first_of_month_9am(site.timezone)
)
end
on_ee do
test "schedules monthly report for a consolidated view" do
{:ok, team} = new_user() |> Plausible.Teams.get_or_create()
new_site(team: team)
new_site(team: team)
consolidated_view = new_consolidated_view(team)
insert(:monthly_report, site: consolidated_view, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
assert_enqueued(
worker: SendEmailReport,
args: %{site_id: consolidated_view.id, interval: "monthly"},
scheduled_at: ScheduleEmailReports.first_of_month_9am(consolidated_view.timezone)
)
end
end
test "does not schedule more than one monthly report at a time" do
site = new_site(domain: "test-site.com", timezone: "US/Eastern")
insert(:monthly_report, site: site, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
perform_job(ScheduleEmailReports, %{})
assert Enum.count(all_enqueued(worker: SendEmailReport)) == 1
end
test "does not schedule a monthly report for locked site" do
site = new_site(domain: "test-site.com", timezone: "US/Eastern")
site.team |> Ecto.Changeset.change(locked: true) |> Repo.update!()
insert(:monthly_report, site: site, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
assert Enum.empty?(all_enqueued(worker: SendEmailReport))
end
test "schedules a new report as soon as a previous one is completed" do
site = new_site(domain: "test-site.com", timezone: "US/Eastern")
insert(:monthly_report, site: site, recipients: ["user@email.com"])
perform_job(ScheduleEmailReports, %{})
Repo.update_all("oban_jobs", set: [state: "completed"])
assert Enum.empty?(all_enqueued(worker: SendEmailReport))
perform_job(ScheduleEmailReports, %{})
assert Enum.count(all_enqueued(worker: SendEmailReport)) == 1
end
end
end
|