| 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() |
|
|
| |
| 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 |
|
|