Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #47 from mbta/digest-4
Set up basic skeleton of DigestSerializer and DigestDispatcher (Digest part 4)
- Loading branch information
Showing
9 changed files
with
136 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
defmodule AlertProcessor.DigestDispatcher do | ||
@moduledoc """ | ||
Sends digests to users | ||
""" | ||
alias AlertProcessor.{DigestMailer, Model} | ||
alias Model.DigestMessage | ||
|
||
@doc """ | ||
Takes a list of digests and dispatches an email for each one | ||
""" | ||
@spec send_emails([DigestMessage.t]) :: :ok | ||
def send_emails(digest_messages) do | ||
Enum.each(digest_messages, &send_email/1) | ||
end | ||
|
||
defp send_email(digest_message) do | ||
digest_message | ||
|> DigestMailer.digest_email() | ||
|> DigestMailer.deliver_later | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
defmodule AlertProcessor.DigestMailer do | ||
@moduledoc "Digest Mailer interface" | ||
use Bamboo.Mailer, otp_app: :alert_processor | ||
import Bamboo.Email | ||
alias AlertProcessor.Model.DigestMessage | ||
|
||
@from Application.get_env(:alert_processor, __MODULE__)[:from] | ||
|
||
@doc "digest_email/1 takes a digest and builds a message to a user" | ||
@spec digest_email(DigestMessage.t) :: Elixir.Bamboo.Email.t | ||
def digest_email(digest_message) do | ||
base_email() | ||
|> to(digest_message.user.email) | ||
|> subject("MBTA Alerts Digest") | ||
|> html_body(digest_message.body) | ||
|> text_body(digest_message.body) | ||
end | ||
|
||
@spec base_email() :: Elixir.Bamboo.Email.t | ||
defp base_email do | ||
from(new_email(), @from) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
defmodule AlertProcessor.DigestSerializer do | ||
@moduledoc """ | ||
Converts alerts into digest email text | ||
""" | ||
alias AlertProcessor.Model.{Alert, Digest} | ||
|
||
@doc """ | ||
Takes a Digest and serializes each alert into | ||
the format it will be presented in an email | ||
""" | ||
@spec serialize([Digest.t]) :: iodata | ||
def serialize(digest) do | ||
digest.alerts | ||
|> Enum.map(&serialize_alert/1) | ||
|> Enum.join(" ") | ||
end | ||
|
||
@spec serialize_alert(Alert.t) :: String.t | ||
defp serialize_alert(alert) do | ||
# TODO: Waiting on spec | ||
alert.header | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
defmodule AlertProcessor.Model.DigestMessage do | ||
@moduledoc """ | ||
Representation of DigestMessage data | ||
""" | ||
alias AlertProcessor.{Model.User, Model.Digest, DigestSerializer} | ||
defstruct [:user, :digest, :body] | ||
|
||
@type t :: %__MODULE__{ | ||
user: User.t, | ||
digest: Digest.t, | ||
body: String.t | ||
} | ||
|
||
def from_digest(digest) do | ||
%__MODULE__{user: digest.user, | ||
digest: digest, | ||
body: DigestSerializer.serialize(digest)} | ||
end | ||
|
||
end |
18 changes: 18 additions & 0 deletions
18
apps/alert_processor/test/alert_processor/digest/digest_dispatcher_test.exs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
defmodule AlertProcessor.DigestDispatcherTest do | ||
@moduledoc false | ||
use ExUnit.Case, async: false | ||
use Bamboo.Test, shared: true | ||
|
||
alias AlertProcessor.{DigestDispatcher, DigestMailer, Model} | ||
alias Model.{Alert, Digest, DigestMessage, User} | ||
|
||
test "send_email/1 sends emails from digest list" do | ||
user = %User{email: "abc@123.com"} | ||
alert = %Alert{id: "1", header: "Test"} | ||
digest = %Digest{user: user, alerts: [alert]} | ||
message = DigestMessage.from_digest(digest) | ||
|
||
DigestDispatcher.send_emails([message]) | ||
assert_delivered_email DigestMailer.digest_email(message) | ||
end | ||
end |
19 changes: 19 additions & 0 deletions
19
apps/alert_processor/test/alert_processor/digest/digest_mailer_test.exs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
defmodule AlertProcessor.DigestMailerTest do | ||
@moduledoc false | ||
use ExUnit.Case, async: false | ||
use Bamboo.Test, shared: true | ||
|
||
alias AlertProcessor.{DigestMailer, Model} | ||
alias Model.{Alert, Digest, DigestMessage, User} | ||
|
||
test "what" do | ||
user = %User{email: "abc@123.com"} | ||
alert = %Alert{id: "1", header: "Test"} | ||
digest = %Digest{user: user, alerts: [alert]} | ||
message = DigestMessage.from_digest(digest) | ||
email = DigestMailer.digest_email(message) | ||
|
||
assert email.to == user.email | ||
assert email.html_body == alert.header | ||
end | ||
end |