From a54efa09f9fd1b8af9d99e0e94600133a20b751c Mon Sep 17 00:00:00 2001
From: tobi <31960611+tsmethurst@users.noreply.github.com>
Date: Tue, 24 May 2022 18:21:27 +0200
Subject: [chore] Serialize times as UTC ISO8601 instead of RFC3339 (#602)
* add time util to mimic utc ISO8601
* use ISO8601 when serializing to frontend
* update test notification
---
internal/util/time.go | 30 ++++++++++++++++++++++++++
internal/util/time_test.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 83 insertions(+)
create mode 100644 internal/util/time.go
create mode 100644 internal/util/time_test.go
(limited to 'internal/util')
diff --git a/internal/util/time.go b/internal/util/time.go
new file mode 100644
index 000000000..d4d4ebf79
--- /dev/null
+++ b/internal/util/time.go
@@ -0,0 +1,30 @@
+/*
+ GoToSocial
+ Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+package util
+
+import "time"
+
+// ISO8601 is a formatter for serializing times that forces ISO8601 behavior.
+const ISO8601 = "2006-01-02T15:04:05Z"
+
+// FormatISO8601 converts the given time to UTC and then formats it
+// using the ISO8601 const, which the Mastodon API is able to understand.
+func FormatISO8601(t time.Time) string {
+ return t.UTC().Format(ISO8601)
+}
diff --git a/internal/util/time_test.go b/internal/util/time_test.go
new file mode 100644
index 000000000..1d49e82af
--- /dev/null
+++ b/internal/util/time_test.go
@@ -0,0 +1,53 @@
+/*
+ GoToSocial
+ Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+package util_test
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/suite"
+ "github.com/superseriousbusiness/gotosocial/internal/util"
+ "github.com/superseriousbusiness/gotosocial/testrig"
+)
+
+type TimeSuite struct {
+ suite.Suite
+}
+
+func (suite *TimeSuite) TestISO8601Format1() {
+ testTime := testrig.TimeMustParse("2022-05-17T13:10:59Z")
+ testTimeString := util.FormatISO8601(testTime)
+ suite.Equal("2022-05-17T13:10:59Z", testTimeString)
+}
+
+func (suite *TimeSuite) TestISO8601Format2() {
+ testTime := testrig.TimeMustParse("2022-05-09T07:34:35+02:00")
+ testTimeString := util.FormatISO8601(testTime)
+ suite.Equal("2022-05-09T05:34:35Z", testTimeString)
+}
+
+func (suite *TimeSuite) TestISO8601Format3() {
+ testTime := testrig.TimeMustParse("2021-10-04T10:52:36+02:00")
+ testTimeString := util.FormatISO8601(testTime)
+ suite.Equal("2021-10-04T08:52:36Z", testTimeString)
+}
+
+func TestTimeSuite(t *testing.T) {
+ suite.Run(t, &TimeSuite{})
+}
--
cgit v1.2.3