diff --git a/lib/apus/adapter.ex b/lib/apus/adapter.ex index e95a3fd..5911651 100644 --- a/lib/apus/adapter.ex +++ b/lib/apus/adapter.ex @@ -1,7 +1,12 @@ defmodule Apus.Adapter do @moduledoc """ + An adapter provides a way to communicate with a third-party SMS service + using a consistent API. """ - @callback deliver(%Apus.Message{}, %{}) :: any - @callback handle_config(map) :: map + @doc "Send the SMS message." + @callback deliver(%Apus.Message{}, config :: map) :: {:ok, Apus.Message.t()} | {:error, any} + + @doc "Initialize adapter configuration." + @callback handle_config(config :: map) :: config :: map end diff --git a/lib/apus/adapters/local_adapter.ex b/lib/apus/adapters/local_adapter.ex index 030ac4b..d703ea9 100644 --- a/lib/apus/adapters/local_adapter.ex +++ b/lib/apus/adapters/local_adapter.ex @@ -1,5 +1,7 @@ defmodule Apus.LocalAdapter do @moduledoc """ + Deliver messages to a local inbox, available to view if + `Apus.SentMessagesViewerPlug` is installed in your router. """ @behaviour Apus.Adapter @@ -7,7 +9,10 @@ defmodule Apus.LocalAdapter do alias Apus.SentMessages def deliver(message, _config) do - SentMessages.push(message) + case SentMessages.push(message) do + :ok -> {:ok, message} + error -> {:error, error} + end end def handle_config(config), do: config diff --git a/lib/apus/adapters/test_adapter.ex b/lib/apus/adapters/test_adapter.ex index 3e06dac..79462b3 100644 --- a/lib/apus/adapters/test_adapter.ex +++ b/lib/apus/adapters/test_adapter.ex @@ -1,5 +1,6 @@ defmodule Apus.TestAdapter do @moduledoc """ + Adapter for use with automated testing. """ @behaviour Apus.Adapter @@ -15,7 +16,10 @@ defmodule Apus.TestAdapter do end def deliver(message, _config) do - send(self(), {:delivered_message, message}) + case send(self(), {:delivered_message, message}) do + {:delivered_message, _} -> {:ok, message} + error -> {:error, error} + end end def handle_config(config) do diff --git a/lib/apus/sent_messages.ex b/lib/apus/sent_messages.ex index c4bca49..d732e14 100644 --- a/lib/apus/sent_messages.ex +++ b/lib/apus/sent_messages.ex @@ -13,7 +13,5 @@ defmodule Apus.SentMessages do Agent.update(__MODULE__, fn messages -> [message | messages] end) - - message end end diff --git a/test/lib/apus/adapters/local_adapter_test.exs b/test/lib/apus/adapters/local_adapter_test.exs index 46fd0f1..c68925c 100644 --- a/test/lib/apus/adapters/local_adapter_test.exs +++ b/test/lib/apus/adapters/local_adapter_test.exs @@ -9,7 +9,7 @@ defmodule Apus.LocalAdapterTest do test "deliver/2 should deliver a message" do message = Message.new(from: "+15551234567", to: "+15557654321", body: "Hello there") - LocalAdapter.deliver(message, %{}) + {:ok, %Apus.Message{}} = LocalAdapter.deliver(message, %{}) assert SentMessages.all() == [message] end diff --git a/test/lib/apus/adapters/plivo_adapter_test.exs b/test/lib/apus/adapters/plivo_adapter_test.exs index 4559481..d4d4028 100644 --- a/test/lib/apus/adapters/plivo_adapter_test.exs +++ b/test/lib/apus/adapters/plivo_adapter_test.exs @@ -15,7 +15,7 @@ defmodule Apus.PlivoAdapterTest do message = Message.new(from: "+15551234567", to: "+15557654321", body: "Hello there") use_cassette "plivo_sms_from_success", match_requests_on: [:request_body] do - {:ok, pl_message} = PlivoAdapter.deliver(message, config) + {:ok, %Apus.Message{} = pl_message} = PlivoAdapter.deliver(message, config) assert pl_message.from == "+15551234567" assert pl_message.to == "+15557654321" diff --git a/test/lib/apus/adapters/test_adapter_test.exs b/test/lib/apus/adapters/test_adapter_test.exs index db88c0f..5089c49 100644 --- a/test/lib/apus/adapters/test_adapter_test.exs +++ b/test/lib/apus/adapters/test_adapter_test.exs @@ -8,7 +8,7 @@ defmodule Apus.TestAdapterTest do test "deliver/2 should deliver a message" do message = Message.new(from: "+15551234567", to: "+15557654321", body: "Hello there") - TestAdapter.deliver(message, %{}) + {:ok, %Apus.Message{}} = TestAdapter.deliver(message, %{}) assert_received {:delivered_message, ^message} end diff --git a/test/lib/apus/adapters/twilio_adapter_test.exs b/test/lib/apus/adapters/twilio_adapter_test.exs index fbc766f..003a358 100644 --- a/test/lib/apus/adapters/twilio_adapter_test.exs +++ b/test/lib/apus/adapters/twilio_adapter_test.exs @@ -15,7 +15,7 @@ defmodule Apus.TwilioAdapterTest do message = Message.new(from: "+15551234567", to: "+15557654321", body: "Hello there") use_cassette "twilio_sms_from_success", match_requests_on: [:request_body] do - {:ok, %{} = tw_message} = TwilioAdapter.deliver(message, config) + {:ok, %Apus.Message{} = tw_message} = TwilioAdapter.deliver(message, config) assert tw_message.from == "+15551234567" assert tw_message.to == "+15557654321"