1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-11 18:20:33 +09:00

GO-4451 Add long date object ids

This commit is contained in:
kirillston 2024-11-07 16:18:08 +01:00
parent 31e066d088
commit 7ba3eb2422
No known key found for this signature in database
GPG key ID: 88218A7F1109754B
3 changed files with 93 additions and 6 deletions

View file

@ -8,16 +8,26 @@ import (
)
const (
dateIdLayout = "2006-01-02"
dateNameLayout = "02 Jan 2006"
shortDateIdLayout = "2006-01-02"
dateIdLayout = "2006-01-02-15-04-05"
dateNameLayout = "02 Jan 2006"
)
func TimeToDateId(t time.Time) string {
return addr.DatePrefix + t.Format(dateIdLayout)
}
// TimeToShortDateId should not be used to generate Date object id. Use TimeToDateId instead
func TimeToShortDateId(t time.Time) string {
return addr.DatePrefix + t.Format(shortDateIdLayout)
}
func ParseDateId(id string) (time.Time, error) {
return time.Parse(dateIdLayout, strings.TrimPrefix(id, addr.DatePrefix))
t, err := time.Parse(dateIdLayout, strings.TrimPrefix(id, addr.DatePrefix))
if err == nil {
return t, nil
}
return time.Parse(shortDateIdLayout, strings.TrimPrefix(id, addr.DatePrefix))
}
func TimeToDateName(t time.Time) string {

View file

@ -0,0 +1,59 @@
package dateutil
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/anyproto/anytype-heart/pkg/lib/localstore/addr"
)
func TestTimeToDateId(t *testing.T) {
assert.Equal(t, "_date_2024-11-07-12-25-59", TimeToDateId(time.Date(2024, time.November, 7, 12, 25, 59, 0, time.UTC)))
assert.Equal(t, "_date_1998-01-01-00-01-01", TimeToDateId(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.UTC)))
assert.Equal(t, "_date_2124-12-25-23-34-00", TimeToDateId(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.UTC)))
}
func TestTimeToShortDateId(t *testing.T) {
assert.Equal(t, "_date_2024-11-07", TimeToShortDateId(time.Date(2024, time.November, 7, 12, 25, 59, 0, time.UTC)))
assert.Equal(t, "_date_1998-01-01", TimeToShortDateId(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.UTC)))
assert.Equal(t, "_date_2124-12-25", TimeToShortDateId(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.UTC)))
}
func TestTimeToDateName(t *testing.T) {
assert.Equal(t, "07 Nov 2024", TimeToDateName(time.Date(2024, time.November, 7, 12, 25, 59, 0, time.UTC)))
assert.Equal(t, "01 Jan 1998", TimeToDateName(time.Date(1998, time.January, 1, 0, 1, 1, 0, time.UTC)))
assert.Equal(t, "25 Dec 2124", TimeToDateName(time.Date(2124, time.December, 25, 23, 34, 0, 0, time.UTC)))
}
func TestParseDateId(t *testing.T) {
t.Run("current date format", func(t *testing.T) {
for _, ts := range []time.Time{
time.Date(2024, time.December, 7, 12, 25, 59, 0, time.UTC),
time.Date(2024, time.November, 7, 12, 25, 59, 0, time.UTC),
time.Date(1998, time.January, 1, 0, 1, 1, 0, time.UTC),
time.Date(2124, time.December, 25, 23, 34, 0, 0, time.UTC),
} {
ts2, err := ParseDateId(TimeToDateId(ts))
assert.NoError(t, err)
assert.Equal(t, ts, ts2)
}
})
t.Run("old date format", func(t *testing.T) {
ts := time.Date(2025, time.June, 8, 2, 25, 39, 0, time.UTC)
ts2, err := ParseDateId(addr.DatePrefix + ts.Format(shortDateIdLayout))
ts = ts.Truncate(24 * time.Hour)
assert.NoError(t, err)
assert.Equal(t, ts, ts2)
})
t.Run("wrong format", func(t *testing.T) {
_, err := ParseDateId("_date_2024")
assert.Error(t, err)
_, err = ParseDateId("object1")
assert.Error(t, err)
})
}