package jsonfeed
import (
"bytes"
"testing"
"time"
"mercemay.top/src/tilstream/internal/feed"
)
func TestWriteAndDecode(t *testing.T) {
t.Parallel()
f := Feed{
Title: "TIL",
HomePageURL: "https://example.com/",
FeedURL: "https://example.com/feed.json",
}
items := []feed.Item{
{
Title: "Hello",
Link: "https://example.com/hello",
GUID: "https://example.com/hello",
Summary: "intro",
Content: "<p>hi</p>",
Published: time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC),
Author: "me",
Categories: []string{"intro"},
},
}
var buf bytes.Buffer
if err := NewWriter().Write(&buf, f, items); err != nil {
t.Fatalf("Write: %v", err)
}
got, err := Decode(&buf)
if err != nil {
t.Fatalf("Decode: %v", err)
}
if got.Version != "https://jsonfeed.org/version/1.1" {
t.Errorf("version = %s", got.Version)
}
if len(got.Items) != 1 {
t.Fatalf("items = %d", len(got.Items))
}
item := got.Items[0]
if item.Title != "Hello" {
t.Errorf("title = %s", item.Title)
}
if len(item.Authors) != 1 || item.Authors[0].Name != "me" {
t.Errorf("author mapping wrong: %+v", item.Authors)
}
}
func TestFromFeedItem(t *testing.T) {
t.Parallel()
cases := []struct {
name string
in feed.Item
want string
}{
{"zero_time_no_date", feed.Item{GUID: "id"}, ""},
{"with_time", feed.Item{GUID: "id", Published: time.Date(2024, 5, 1, 0, 0, 0, 0, time.UTC)}, "2024-05-01T00:00:00Z"},
}
for _, tc := range cases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
got := FromFeedItem(tc.in)
if got.DatePublished != tc.want {
t.Errorf("DatePublished = %q, want %q", got.DatePublished, tc.want)
}
})
}
}