From c3906c89306e1d802410433ebd8c3fe16e38360b Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 23 Jan 2020 15:59:13 +0200 Subject: [PATCH 1/3] used local structs for data push --- lib/exponent_server_sdk/push_message.ex | 13 ++-- lib/exponent_server_sdk/push_notification.ex | 21 +++--- .../exponent_server_sdk/push_message_test.exs | 24 +++--- .../push_notification_test.exs | 73 ++++++++++--------- 4 files changed, 70 insertions(+), 61 deletions(-) diff --git a/lib/exponent_server_sdk/push_message.ex b/lib/exponent_server_sdk/push_message.ex index e0dcbeb..2b49f47 100644 --- a/lib/exponent_server_sdk/push_message.ex +++ b/lib/exponent_server_sdk/push_message.ex @@ -4,17 +4,18 @@ defmodule ExponentServerSdk.PushMessage do @moduledoc """ Provides a basic payload structure to allow easy communication with the Exponent Push Notification. """ + @derive [Poison.Encoder] @enforce_keys [:to] defstruct to: nil, - data: nil, + data: %{}, title: nil, body: nil, ttl: 0, - expiration: nil, + expiration: 2419200, priority: "default", sound: "default", - badge: nil, - channelId: nil + badge: 1, + channelId: "Default" @typedoc """ https://docs.expo.io/versions/v29.0.0/guides/push-notifications#message-format @@ -137,7 +138,7 @@ defmodule ExponentServerSdk.PushMessage do iex> message_map = %{to: "ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]", title: "Pushed!", body: "You got your first message"} iex> message = ExponentServerSdk.PushMessage.create(message_map) iex> message - %ExponentServerSdk.PushMessage{badge: nil, body: "You got your first message", channelId: nil, data: nil, expiration: nil, priority: "default", sound: "default", title: "Pushed!", to: "ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]", ttl: 0} + %ExponentServerSdk.PushMessage{badge: 1, body: "You got your first message", channelId: "Default", data: %{}, expiration: 2419200, priority: "default", sound: "default", title: "Pushed!", to: "ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]", ttl: 0} """ @spec create(map) :: PushMessage.t() def create(message) when is_map(message) do @@ -151,7 +152,7 @@ defmodule ExponentServerSdk.PushMessage do iex> message_list = [%{to: "ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]", title: "Pushed!", body: "You got your first message"}, %{to: "ExponentPushToken[YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY]", title: "Pushed Again!", body: "You got your second message"}] iex> messages = ExponentServerSdk.PushMessage.create_from_list(message_list) iex> messages - [[%ExponentServerSdk.PushMessage{badge: nil, body: "You got your first message", channelId: nil, data: nil, expiration: nil, priority: "default", sound: "default", title: "Pushed!", to: "ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]", ttl: 0}, %ExponentServerSdk.PushMessage{ badge: nil, body: "You got your second message", channelId: nil, data: nil, expiration: nil, priority: "default", sound: "default", title: "Pushed Again!", to: "ExponentPushToken[YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY]", ttl: 0}]] + [[%ExponentServerSdk.PushMessage{badge: 1, body: "You got your first message", channelId: "Default", data: %{}, expiration: 2419200, priority: "default", sound: "default", title: "Pushed!", to: "ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]", ttl: 0}, %ExponentServerSdk.PushMessage{ badge: 1, body: "You got your second message", channelId: "Default", data: %{}, expiration: 2419200, priority: "default", sound: "default", title: "Pushed Again!", to: "ExponentPushToken[YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY]", ttl: 0}]] """ @spec create_from_list(list(map)) :: list(PushMessage.t()) def create_from_list(messages) when is_list(messages) do diff --git a/lib/exponent_server_sdk/push_notification.ex b/lib/exponent_server_sdk/push_notification.ex index b7939ec..3e6e937 100644 --- a/lib/exponent_server_sdk/push_notification.ex +++ b/lib/exponent_server_sdk/push_notification.ex @@ -30,21 +30,27 @@ defmodule ExponentServerSdk.PushNotification do def push(message) when is_map(message) do message |> PushMessage.create() - - PushNotification.post!("send", message) + |> PushNotification.post!("send", message) |> Parser.parse() end @doc """ Send the push notification request when using a list of message maps """ - @spec push_list(list(PushMessage.t())) :: Parser.success() | Parser.error() + @spec push_list(list()) :: list(Parser.success()) | list(Parser.error()) def push_list(messages) when is_list(messages) do messages - |> PushMessage.create_from_list() + |> PushMessage.create_from_list + # |> Enum.chunk_every(100) + |> push_messages_list + end - PushNotification.post!("send", messages) - |> Parser.parse_list() + def push_messages_list([]), do: [] + + @spec push_messages_list(list(list(PushMessage.t()))) :: list(Parser.success()) | list(Parser.error()) + def push_messages_list([head | tail]) do + current_message = PushNotification.post!("send", head) |> Parser.parse_list() + [ current_message | push_messages_list(tail) ] end @doc """ @@ -52,9 +58,6 @@ defmodule ExponentServerSdk.PushNotification do """ @spec get_receipts(list()) :: Parser.success() | Parser.error() def get_receipts(ids) when is_list(ids) do - ids - |> PushMessage.create_receipt_id_list() - PushNotification.post!("getReceipts", %{ids: ids}) |> Parser.parse() end diff --git a/test/exponent_server_sdk/push_message_test.exs b/test/exponent_server_sdk/push_message_test.exs index 87d8c97..e48baea 100644 --- a/test/exponent_server_sdk/push_message_test.exs +++ b/test/exponent_server_sdk/push_message_test.exs @@ -15,11 +15,11 @@ defmodule ExponentServerSdk.PushMessageTest do } message = %PushMessage{ - badge: nil, + badge: 1, body: "You got your first message", - channelId: nil, - data: nil, - expiration: nil, + channelId: "Default", + data: %{}, + expiration: 2419200, priority: "default", sound: "default", title: "Pushed!", @@ -47,11 +47,11 @@ defmodule ExponentServerSdk.PushMessageTest do messages = [ [ %PushMessage{ - badge: nil, + badge: 1, body: "You got your first message", - channelId: nil, - data: nil, - expiration: nil, + channelId: "Default", + data: %{}, + expiration: 2419200, priority: "default", sound: "default", title: "Pushed!", @@ -59,11 +59,11 @@ defmodule ExponentServerSdk.PushMessageTest do ttl: 0 }, %PushMessage{ - badge: nil, + badge: 1, body: "You got your second message", - channelId: nil, - data: nil, - expiration: nil, + channelId: "Default", + data: %{}, + expiration: 2419200, priority: "default", sound: "default", title: "Pushed Again!", diff --git a/test/exponent_server_sdk/push_notification_test.exs b/test/exponent_server_sdk/push_notification_test.exs index f8f3078..93bbe99 100644 --- a/test/exponent_server_sdk/push_notification_test.exs +++ b/test/exponent_server_sdk/push_notification_test.exs @@ -20,14 +20,15 @@ defmodule ExponentServerSdk.PushNotificationTest do with_fixture(:post!, json, fn -> # expected = {:ok, %{"status" => "ok", "id" => "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"}} - expected = - {:ok, - %{ - "status" => "error", - "details" => %{"error" => "DeviceNotRegistered"}, - "message" => - "\"ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]\" is not a registered push notification recipient" - }} + expected = {:ok, %{"status" => "ok", "id" => "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"}} + # {:ok, + # %{ + # "status" => "error", + # "details" => %{"error" => "DeviceNotRegistered"}, + # "message" => + # "\"ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]\" is not a registered push notification recipient" + # }} + assert expected == PushNotification.push(message_map) end) @@ -38,12 +39,14 @@ defmodule ExponentServerSdk.PushNotificationTest do %{ to: "ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]", title: "Pushed!", - body: "You got your first message" + body: "You got your first message", + data: %{} }, %{ to: "ExponentPushToken[YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY]", title: "Pushed Again!", - body: "You got your second message" + body: "You got your second message", + data: %{} } ] @@ -64,22 +67,24 @@ defmodule ExponentServerSdk.PushNotificationTest do # %{"status" => "ok", "id" => "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY"} # ] # } - expected = - {:ok, - [ - %{ - "status" => "error", - "details" => %{"error" => "DeviceNotRegistered"}, - "message" => - "\"ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]\" is not a registered push notification recipient" - }, - %{ - "status" => "error", - "details" => %{"error" => "DeviceNotRegistered"}, - "message" => - "\"ExponentPushToken[YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY]\" is not a registered push notification recipient" - } - ]} + expected = [ + ok: [ + %{ + "details" => %{ + "error" => "DeviceNotRegistered" + }, + "message" => "\"ExponentPushToken[XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX]\" is not a registered push notification recipient", + "status" => "error" + }, + %{ + "details" => %{ + "error" => "DeviceNotRegistered" + }, + "message" => "\"ExponentPushToken[YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY]\" is not a registered push notification recipient", + "status" => "error" + } + ] + ] assert expected == PushNotification.push_list(message_list) end) @@ -159,11 +164,11 @@ defmodule ExponentServerSdk.PushNotificationTest do [ [ %PushMessage{ - badge: nil, + badge: 0, body: "You got your first message", - channelId: nil, - data: nil, - expiration: nil, + channelId: "Default", + data: %{}, + expiration: 2419200, priority: "default", sound: "default", title: "Pushed!", @@ -171,11 +176,11 @@ defmodule ExponentServerSdk.PushNotificationTest do ttl: 0 }, %PushMessage{ - badge: nil, + badge: 0, body: "You got your second message", - channelId: nil, - data: nil, - expiration: nil, + channelId: "Default", + data: %{}, + expiration: 2419200, priority: "default", sound: "default", title: "Pushed Again!", From 53886e21107fec1a2f46ed9bda55e69adad0bbee Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 23 Jan 2020 16:16:35 +0200 Subject: [PATCH 2/3] removes deriving --- lib/exponent_server_sdk/push_message.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/exponent_server_sdk/push_message.ex b/lib/exponent_server_sdk/push_message.ex index 2b49f47..13a69e3 100644 --- a/lib/exponent_server_sdk/push_message.ex +++ b/lib/exponent_server_sdk/push_message.ex @@ -4,7 +4,6 @@ defmodule ExponentServerSdk.PushMessage do @moduledoc """ Provides a basic payload structure to allow easy communication with the Exponent Push Notification. """ - @derive [Poison.Encoder] @enforce_keys [:to] defstruct to: nil, data: %{}, From b3eee829f4ed356579af521fa764cda6f6dffb6c Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 23 Jan 2020 16:26:45 +0200 Subject: [PATCH 3/3] remove commented out code --- lib/exponent_server_sdk/push_notification.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/exponent_server_sdk/push_notification.ex b/lib/exponent_server_sdk/push_notification.ex index 3e6e937..676e352 100644 --- a/lib/exponent_server_sdk/push_notification.ex +++ b/lib/exponent_server_sdk/push_notification.ex @@ -41,7 +41,6 @@ defmodule ExponentServerSdk.PushNotification do def push_list(messages) when is_list(messages) do messages |> PushMessage.create_from_list - # |> Enum.chunk_every(100) |> push_messages_list end