Browse Source

Add task to test emails

tags/v1.1.4
Roman Chvanikov 5 years ago
parent
commit
3e17610587
5 changed files with 96 additions and 8 deletions
  1. +34
    -0
      lib/mix/tasks/pleroma/digest.ex
  2. +2
    -2
      lib/pleroma/digest_email_worker.ex
  3. +16
    -4
      lib/pleroma/emails/user_email.ex
  4. +2
    -2
      lib/pleroma/web/templates/email/digest.html.eex
  5. +42
    -0
      test/mix/tasks/pleroma.digest_test.exs

+ 34
- 0
lib/mix/tasks/pleroma/digest.ex View File

@@ -0,0 +1,34 @@
defmodule Mix.Tasks.Pleroma.Digest do
use Mix.Task
alias Mix.Tasks.Pleroma.Common

@shortdoc "Manages digest emails"
@moduledoc """
Manages digest emails

## Send digest email since given date (user registration date by default)
ignoring user activity status.

``mix pleroma.digest test <nickname> <since_date>``

Example: ``mix pleroma.digest test donaldtheduck 2019-05-20``
"""
def run(["test", nickname | opts]) do
Common.start_pleroma()

user = Pleroma.User.get_by_nickname(nickname)

last_digest_emailed_at =
with [date] <- opts,
{:ok, datetime} <- Timex.parse(date, "{YYYY}-{0M}-{0D}") do
datetime
else
_ -> user.inserted_at
end

patched_user = %{user | last_digest_emailed_at: last_digest_emailed_at}

:ok = Pleroma.DigestEmailWorker.run([patched_user])
Mix.shell().info("Digest email have been sent to #{nickname} (#{user.email})")
end
end

+ 2
- 2
lib/pleroma/digest_email_worker.ex View File

@@ -18,9 +18,9 @@ defmodule Pleroma.DigestEmailWorker do
|> run()
end

defp run([]), do: :ok
def run([]), do: :ok

defp run([user | users]) do
def run([user | users]) do
with %Swoosh.Email{} = email <- Pleroma.Emails.UserEmail.digest_email(user) do
Pleroma.Emails.Mailer.deliver_async(email)
end


+ 16
- 4
lib/pleroma/emails/user_email.ex View File

@@ -103,12 +103,24 @@ defmodule Pleroma.Emails.UserEmail do
new_notifications =
Pleroma.Notification.for_user_since(user, user.last_digest_emailed_at)
|> Enum.reduce(%{followers: [], mentions: []}, fn
%{activity: %{data: %{"type" => "Create"}, actor: actor}} = notification, acc ->
new_mention = %{data: notification, from: Pleroma.User.get_by_ap_id(actor)}
%{activity: %{data: %{"type" => "Create"}, actor: actor} = activity} = notification,
acc ->
new_mention = %{
data: notification,
object: Pleroma.Object.normalize(activity),
from: Pleroma.User.get_by_ap_id(actor)
}

%{acc | mentions: [new_mention | acc.mentions]}

%{activity: %{data: %{"type" => "Follow"}, actor: actor}} = notification, acc ->
new_follower = %{data: notification, from: Pleroma.User.get_by_ap_id(actor)}
%{activity: %{data: %{"type" => "Follow"}, actor: actor} = activity} = notification,
acc ->
new_follower = %{
data: notification,
object: Pleroma.Object.normalize(activity),
from: Pleroma.User.get_by_ap_id(actor)
}

%{acc | followers: [new_follower | acc.followers]}

_, acc ->


+ 2
- 2
lib/pleroma/web/templates/email/digest.html.eex View File

@@ -2,8 +2,8 @@

<h2>New Mentions:</h2>
<ul>
<%= for %{data: mention, from: from} <- @mentions do %>
<li><%= link from.nickname, to: mention.activity.actor %>: <%= raw mention.activity.object.data["content"] %></li>
<%= for %{data: mention, object: object, from: from} <- @mentions do %>
<li><%= link from.nickname, to: mention.activity.actor %>: <%= raw object.data["content"] %></li>
<% end %>
</ul>



+ 42
- 0
test/mix/tasks/pleroma.digest_test.exs View File

@@ -0,0 +1,42 @@
defmodule Mix.Tasks.Pleroma.DigestTest do
use Pleroma.DataCase

import Pleroma.Factory
import Swoosh.TestAssertions

alias Pleroma.Web.CommonAPI

setup_all do
Mix.shell(Mix.Shell.Process)

on_exit(fn ->
Mix.shell(Mix.Shell.IO)
end)

:ok
end

describe "pleroma.digest test" do
test "Sends digest to the given user" do
user1 = insert(:user)
user2 = insert(:user)

Enum.each(0..10, fn i ->
{:ok, _activity} =
CommonAPI.post(user1, %{
"status" => "hey ##{i} @#{user2.nickname}!"
})
end)

Mix.Tasks.Pleroma.Digest.run(["test", user2.nickname])

assert_email_sent(
to: {user2.name, user2.email},
html_body: ~r/new mentions:/i
)

assert_received {:mix_shell, :info, [message]}
assert message =~ "Digest email have been sent"
end
end
end

Loading…
Cancel
Save