From dcd3014567f2b8be3fca01c20c2b3eabdc8f519e Mon Sep 17 00:00:00 2001 From: Lunny Xiao <xiaolunwen@gmail.com> Date: Mon, 27 Jan 2025 07:58:46 -0800 Subject: [PATCH] Add pubdate for repository rss and add some tests (#33411) Fix #33291 --- routers/web/feed/branch.go | 1 + routers/web/feed/file.go | 1 + tests/integration/feed_repo_test.go | 35 +++++++++++++++++++ ...pi_feed_user_test.go => feed_user_test.go} | 25 ++++++++++++- 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 tests/integration/feed_repo_test.go rename tests/integration/{api_feed_user_test.go => feed_user_test.go} (53%) diff --git a/routers/web/feed/branch.go b/routers/web/feed/branch.go index 6c4cc11ca0..d3dae9503e 100644 --- a/routers/web/feed/branch.go +++ b/routers/web/feed/branch.go @@ -43,6 +43,7 @@ func ShowBranchFeed(ctx *context.Context, repo *repo.Repository, formatType stri }, Description: commit.Message(), Content: commit.Message(), + Created: commit.Committer.When, }) } diff --git a/routers/web/feed/file.go b/routers/web/feed/file.go index 518d995ccb..407e4fa2d5 100644 --- a/routers/web/feed/file.go +++ b/routers/web/feed/file.go @@ -55,6 +55,7 @@ func ShowFileFeed(ctx *context.Context, repo *repo.Repository, formatType string }, Description: commit.Message(), Content: commit.Message(), + Created: commit.Committer.When, }) } diff --git a/tests/integration/feed_repo_test.go b/tests/integration/feed_repo_test.go new file mode 100644 index 0000000000..132ed32ced --- /dev/null +++ b/tests/integration/feed_repo_test.go @@ -0,0 +1,35 @@ +// Copyright 2025 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package integration + +import ( + "encoding/xml" + "net/http" + "testing" + + "code.gitea.io/gitea/tests" + + "github.com/stretchr/testify/assert" +) + +func TestFeedRepo(t *testing.T) { + t.Run("RSS", func(t *testing.T) { + defer tests.PrepareTestEnv(t)() + + req := NewRequest(t, "GET", "/user2/repo1.rss") + resp := MakeRequest(t, req, http.StatusOK) + + data := resp.Body.String() + assert.Contains(t, data, `<rss version="2.0"`) + + var rss RSS + err := xml.Unmarshal(resp.Body.Bytes(), &rss) + assert.NoError(t, err) + assert.Contains(t, rss.Channel.Link, "/user2/repo1") + assert.NotEmpty(t, rss.Channel.PubDate) + assert.Len(t, rss.Channel.Items, 1) + assert.EqualValues(t, "issue5", rss.Channel.Items[0].Description) + assert.NotEmpty(t, rss.Channel.Items[0].PubDate) + }) +} diff --git a/tests/integration/api_feed_user_test.go b/tests/integration/feed_user_test.go similarity index 53% rename from tests/integration/api_feed_user_test.go rename to tests/integration/feed_user_test.go index c44f9a1951..4315c67f48 100644 --- a/tests/integration/api_feed_user_test.go +++ b/tests/integration/feed_user_test.go @@ -4,6 +4,7 @@ package integration import ( + "encoding/xml" "net/http" "testing" @@ -12,7 +13,23 @@ import ( "github.com/stretchr/testify/assert" ) -func TestFeed(t *testing.T) { +// RSS is a struct to unmarshal RSS feeds test only +type RSS struct { + Channel struct { + Title string `xml:"title"` + Link string `xml:"link"` + Description string `xml:"description"` + PubDate string `xml:"pubDate"` + Items []struct { + Title string `xml:"title"` + Link string `xml:"link"` + Description string `xml:"description"` + PubDate string `xml:"pubDate"` + } `xml:"item"` + } `xml:"channel"` +} + +func TestFeedUser(t *testing.T) { t.Run("User", func(t *testing.T) { t.Run("Atom", func(t *testing.T) { defer tests.PrepareTestEnv(t)() @@ -32,6 +49,12 @@ func TestFeed(t *testing.T) { data := resp.Body.String() assert.Contains(t, data, `<rss version="2.0"`) + + var rss RSS + err := xml.Unmarshal(resp.Body.Bytes(), &rss) + assert.NoError(t, err) + assert.Contains(t, rss.Channel.Link, "/user2") + assert.NotEmpty(t, rss.Channel.PubDate) }) }) }