From 00c032783d12d19529944d7f17123418e02ce1a5 Mon Sep 17 00:00:00 2001
From: Roger Braun <roger@rogerbraun.net>
Date: Mon, 5 Jun 2017 15:47:37 +0200
Subject: [PATCH] Fix NaN statuses per day.

---
 .../representers/activity_representer.ex            |  9 ---------
 .../twitter_api/representers/base_representer.ex    | 13 +++++++++++++
 .../twitter_api/representers/user_representer.ex    |  2 ++
 .../representers/user_representer_test.exs          |  5 +++++
 4 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/lib/pleroma/web/twitter_api/representers/activity_representer.ex b/lib/pleroma/web/twitter_api/representers/activity_representer.ex
index 0303739f5..ade200268 100644
--- a/lib/pleroma/web/twitter_api/representers/activity_representer.ex
+++ b/lib/pleroma/web/twitter_api/representers/activity_representer.ex
@@ -2,7 +2,6 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do
   use Pleroma.Web.TwitterAPI.Representers.BaseRepresenter
   alias Pleroma.Web.TwitterAPI.Representers.{UserRepresenter, ObjectRepresenter}
   alias Pleroma.{Activity, User, Formatter}
-  alias Calendar.Strftime
   alias Pleroma.Web.TwitterAPI.TwitterAPI
 
   defp user_by_ap_id(user_list, ap_id) do
@@ -130,14 +129,6 @@ def conversation_id(activity) do
     end
   end
 
-  defp date_to_asctime(date) do
-    with {:ok, date, _offset} <- date |> DateTime.from_iso8601 do
-      Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y")
-    else _e ->
-      ""
-    end
-  end
-
   defp to_boolean(false) do
     false
   end
diff --git a/lib/pleroma/web/twitter_api/representers/base_representer.ex b/lib/pleroma/web/twitter_api/representers/base_representer.ex
index a4ef245fc..f13a54412 100644
--- a/lib/pleroma/web/twitter_api/representers/base_representer.ex
+++ b/lib/pleroma/web/twitter_api/representers/base_representer.ex
@@ -1,6 +1,7 @@
 defmodule Pleroma.Web.TwitterAPI.Representers.BaseRepresenter do
   defmacro __using__(_opts) do
     quote do
+      alias Calendar.Strftime
       def to_json(object) do to_json(object, %{}) end
       def to_json(object, options) do
         object
@@ -23,6 +24,18 @@ def enum_to_json(enum, options) do
         |> enum_to_list(options)
         |> Poison.encode!
       end
+
+      def format_asctime(date) do
+        Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y")
+      end
+
+      def date_to_asctime(date) do
+        with {:ok, date, _offset} <- date |> DateTime.from_iso8601 do
+            format_asctime(date)
+        else _e ->
+            ""
+        end
+      end
     end
   end
 end
diff --git a/lib/pleroma/web/twitter_api/representers/user_representer.ex b/lib/pleroma/web/twitter_api/representers/user_representer.ex
index 493077413..8a7bb6f0d 100644
--- a/lib/pleroma/web/twitter_api/representers/user_representer.ex
+++ b/lib/pleroma/web/twitter_api/representers/user_representer.ex
@@ -12,6 +12,7 @@ def to_map(user, opts) do
     end
 
     user_info = User.get_cached_user_info(user)
+    created_at = user.inserted_at |> DateTime.from_naive!("Etc/UTC") |> format_asctime
 
     map = %{
       "id" => user.id,
@@ -19,6 +20,7 @@ def to_map(user, opts) do
       "screen_name" => user.nickname,
       "description" => user.bio,
       "following" => following,
+      "created_at" => created_at,
       # Fake fields
       "favourites_count" => 0,
       "statuses_count" => user_info[:note_count],
diff --git a/test/web/twitter_api/representers/user_representer_test.exs b/test/web/twitter_api/representers/user_representer_test.exs
index 77f065948..d63f738a9 100644
--- a/test/web/twitter_api/representers/user_representer_test.exs
+++ b/test/web/twitter_api/representers/user_representer_test.exs
@@ -33,11 +33,14 @@ test "A user" do
 
     image = "https://placehold.it/48x48"
 
+    created_at = user.inserted_at |> DateTime.from_naive!("Etc/UTC") |> UserRepresenter.format_asctime
+
     represented = %{
       "id" => user.id,
       "name" => user.name,
       "screen_name" => user.nickname,
       "description" => user.bio,
+      "created_at" => created_at,
       # Fake fields
       "favourites_count" => 0,
       "statuses_count" => 1,
@@ -58,11 +61,13 @@ test "A user" do
   test "A user for a given other follower", %{user: user} do
     {:ok, follower} = UserBuilder.insert(%{following: [User.ap_followers(user)]})
     image = "https://placehold.it/48x48"
+    created_at = user.inserted_at |> DateTime.from_naive!("Etc/UTC") |> UserRepresenter.format_asctime
     represented = %{
       "id" => user.id,
       "name" => user.name,
       "screen_name" => user.nickname,
       "description" => user.bio,
+      "created_at" => created_at,
       # Fake fields
       "favourites_count" => 0,
       "statuses_count" => 0,