44 "testing"
55 "time"
66
7+ "github.com/mmcdole/gofeed"
78 "github.com/theandrew168/bloggulus/backend/feed"
89 feedMock "github.com/theandrew168/bloggulus/backend/feed/mock"
910 "github.com/theandrew168/bloggulus/backend/test"
@@ -30,6 +31,59 @@ func TestNormalizePostURL(t *testing.T) {
3031 }
3132}
3233
34+ func TestDeterminePublishedAt (t * testing.T ) {
35+ t .Parallel ()
36+
37+ feedUpdatedParsed := time .Now ().AddDate (0 , 0 , - 1 )
38+ itemPublishedParsed := time .Now ().AddDate (0 , 0 , - 2 )
39+ now := time .Now ()
40+
41+ tests := []struct {
42+ feedUpdatedParsed * time.Time
43+ itemPublishedParsed * time.Time
44+ now time.Time
45+ want time.Time
46+ }{
47+ {
48+ // Without any feed or item published date, use now.
49+ feedUpdatedParsed : nil ,
50+ itemPublishedParsed : nil ,
51+ now : now ,
52+ want : now .UTC ().Round (time .Microsecond ),
53+ },
54+ {
55+ // If the feed has an updated date, use it.
56+ feedUpdatedParsed : & feedUpdatedParsed ,
57+ itemPublishedParsed : nil ,
58+ now : now ,
59+ want : feedUpdatedParsed .UTC ().Round (time .Microsecond ),
60+ },
61+ {
62+ // If the item has a published date, use it.
63+ feedUpdatedParsed : nil ,
64+ itemPublishedParsed : & itemPublishedParsed ,
65+ now : now ,
66+ want : itemPublishedParsed .UTC ().Round (time .Microsecond ),
67+ },
68+ {
69+ // If item has a published date, use it even if the feed has an updated date.
70+ feedUpdatedParsed : & feedUpdatedParsed ,
71+ itemPublishedParsed : & itemPublishedParsed ,
72+ now : now ,
73+ want : itemPublishedParsed .UTC ().Round (time .Microsecond ),
74+ },
75+ }
76+
77+ for _ , tt := range tests {
78+ got := feed .DeterminePublishedAt (
79+ & gofeed.Feed {UpdatedParsed : tt .feedUpdatedParsed },
80+ & gofeed.Item {PublishedParsed : tt .itemPublishedParsed },
81+ tt .now ,
82+ )
83+ test .AssertEqual (t , got , tt .want )
84+ }
85+ }
86+
3387func TestParse (t * testing.T ) {
3488 t .Parallel ()
3589
0 commit comments