File size: 3,665 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.SendSiteSetupEmailsTest do
use Plausible.DataCase, async: true
use Bamboo.Test
use Oban.Testing, repo: Plausible.Repo
alias Plausible.Workers.SendSiteSetupEmails
describe "when user has not managed to set up the site" do
test "does not send an email 47 hours after site creation" do
user = new_user()
new_site(owner: user, inserted_at: hours_ago(47))
perform_job(SendSiteSetupEmails, %{})
assert_no_emails_delivered()
end
test "sends a setup help email 48 hours after site has been created" do
user = new_user()
new_site(owner: user, inserted_at: hours_ago(49))
perform_job(SendSiteSetupEmails, %{})
assert_email_delivered_with(
to: [{user.name, user.email}],
subject: "No traffic recorded yet"
)
end
test "does not send an email more than 72 hours after signup" do
user = new_user()
new_site(owner: user, inserted_at: hours_ago(73))
perform_job(SendSiteSetupEmails, %{})
assert_no_emails_delivered()
end
end
describe "when user has managed to set up their site" do
test "sends the setup completed email as soon as possible" do
user = new_user()
site = new_site(owner: user)
populate_stats(site, [build(:pageview)])
perform_job(SendSiteSetupEmails, %{})
assert_email_delivered_with(
to: [{user.name, user.email}],
subject: "Your first visitor just showed up"
)
end
test "sends the setup completed email after the help email has been sent" do
user = new_user()
site = new_site(owner: user, inserted_at: hours_ago(49))
perform_job(SendSiteSetupEmails, %{})
assert_email_delivered_with(
to: [{user.name, user.email}],
subject: "No traffic recorded yet"
)
populate_stats(site, [
build(:pageview)
])
perform_job(SendSiteSetupEmails, %{})
assert_email_delivered_with(
to: [{user.name, user.email}],
subject: "Your first visitor just showed up"
)
end
test "do not send the setup help email for consolidated site" do
user = new_user()
site = new_site(owner: user)
populate_stats(site, [build(:pageview)])
perform_job(SendSiteSetupEmails, %{})
assert_email_delivered_with(
to: [{user.name, user.email}],
subject: "Your first visitor just showed up"
)
new_site(owner: user, consolidated: true, inserted_at: hours_ago(49))
perform_job(SendSiteSetupEmails, %{})
assert_no_emails_delivered()
end
test "do not send the setup success email for consolidated website" do
user = new_user()
# for test purposes, set stats_start_date for a consolidated site
new_site(owner: user, consolidated: true, stats_start_date: Date.utc_today())
perform_job(SendSiteSetupEmails, %{})
assert_no_emails_delivered()
end
end
describe "trial user who has not set up a website" do
test "does not send an email before 48h have passed" do
new_user(inserted_at: hours_ago(47))
perform_job(SendSiteSetupEmails, %{})
assert_no_emails_delivered()
end
test "sends the create site email after 48h" do
user = new_user(inserted_at: hours_ago(49))
perform_job(SendSiteSetupEmails, %{})
assert_email_delivered_with(
to: [{user.name, user.email}],
subject: "Add your first site to start tracking"
)
end
end
defp hours_ago(hours) do
NaiveDateTime.utc_now()
|> NaiveDateTime.truncate(:second)
|> NaiveDateTime.shift(hour: -hours)
end
end
|