| defmodule Plausible.Workers.SendCheckStatsEmailsTest do |
| use Plausible.DataCase, async: true |
| use Oban.Testing, repo: Plausible.Repo |
| use Bamboo.Test |
|
|
| alias Plausible.Workers.SendCheckStatsEmails |
|
|
| test "does not send an email before a week has passed" do |
| user = new_user(inserted_at: days_ago(6), last_seen: days_ago(6)) |
| new_site(domain: "test-site.com", owner: user) |
|
|
| perform_job(SendCheckStatsEmails, %{}) |
|
|
| assert_no_emails_delivered() |
| end |
|
|
| test "does not send an email if the user has logged in recently" do |
| user = new_user(inserted_at: days_ago(9), last_seen: days_ago(6)) |
| new_site(domain: "test-site.com", owner: user) |
|
|
| perform_job(SendCheckStatsEmails, %{}) |
|
|
| assert_no_emails_delivered() |
| end |
|
|
| test "does not send an email if the user has configured a weekly report" do |
| user = new_user(inserted_at: days_ago(9), last_seen: days_ago(7)) |
| site = new_site(domain: "test-site.com", owner: user) |
|
|
| populate_stats(site, [build(:pageview)]) |
| insert(:weekly_report, site: site, recipients: ["user@email.com"]) |
|
|
| perform_job(SendCheckStatsEmails, %{}) |
|
|
| assert_no_emails_delivered() |
| end |
|
|
| test "sends an email after a week of signup if the user hasn't logged in" do |
| user = new_user(inserted_at: days_ago(8), last_seen: days_ago(8)) |
| site = new_site(domain: "test-site.com", owner: user) |
| populate_stats(site, [build(:pageview)]) |
|
|
| perform_job(SendCheckStatsEmails, %{}) |
|
|
| assert_email_delivered_with( |
| to: [{user.name, user.email}], |
| subject: "How Plausible is different" |
| ) |
| end |
|
|
| test "team members idling will get the email" do |
| user = new_user(last_seen: NaiveDateTime.utc_now(:second), inserted_at: days_ago(8)) |
| site = new_site(owner: user) |
| populate_stats(site, [build(:pageview)]) |
|
|
| user2 = |
| add_member(team_of(user), |
| user: new_user(inserted_at: days_ago(8), last_seen: days_ago(8)), |
| role: :editor |
| ) |
|
|
| perform_job(SendCheckStatsEmails, %{}) |
|
|
| assert_email_delivered_with( |
| to: [{user2.name, user2.email}], |
| subject: "How Plausible is different" |
| ) |
| end |
|
|
| defp days_ago(days) do |
| NaiveDateTime.utc_now(:second) |
| |> NaiveDateTime.shift(day: -days) |
| end |
| end |
|
|