summaryrefslogtreecommitdiffstats
path: root/tests/integration/repo_citation_test.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/integration/repo_citation_test.go81
1 files changed, 81 insertions, 0 deletions
diff --git a/tests/integration/repo_citation_test.go b/tests/integration/repo_citation_test.go
new file mode 100644
index 0000000..4f7e24e
--- /dev/null
+++ b/tests/integration/repo_citation_test.go
@@ -0,0 +1,81 @@
+// Copyright 2024 The Forgejo Authors. All rights reserved.
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package integration
+
+import (
+ "net/http"
+ "net/url"
+ "strings"
+ "testing"
+
+ repo_model "code.gitea.io/gitea/models/repo"
+ unit_model "code.gitea.io/gitea/models/unit"
+ "code.gitea.io/gitea/models/unittest"
+ user_model "code.gitea.io/gitea/models/user"
+ files_service "code.gitea.io/gitea/services/repository/files"
+ "code.gitea.io/gitea/tests"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestCitation(t *testing.T) {
+ onGiteaRun(t, func(t *testing.T, u *url.URL) {
+ user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
+
+ session := loginUser(t, user.LoginName)
+
+ t.Run("No citation", func(t *testing.T) {
+ defer tests.PrintCurrentTest(t)()
+
+ repo, _, f := tests.CreateDeclarativeRepo(t, user, "citation-no-citation", []unit_model.Type{unit_model.TypeCode}, nil, nil)
+ defer f()
+
+ testCitationButtonExists(t, session, repo, "", false)
+ })
+
+ t.Run("cff citation", func(t *testing.T) {
+ defer tests.PrintCurrentTest(t)()
+
+ repo, f := createRepoWithEmptyFile(t, user, "citation-cff", "CITATION.cff")
+ defer f()
+
+ testCitationButtonExists(t, session, repo, "CITATION.cff", true)
+ })
+
+ t.Run("bib citation", func(t *testing.T) {
+ defer tests.PrintCurrentTest(t)()
+
+ repo, f := createRepoWithEmptyFile(t, user, "citation-bib", "CITATION.bib")
+ defer f()
+
+ testCitationButtonExists(t, session, repo, "CITATION.bib", true)
+ })
+ })
+}
+
+func testCitationButtonExists(t *testing.T, session *TestSession, repo *repo_model.Repository, file string, exists bool) {
+ req := NewRequest(t, "GET", repo.HTMLURL())
+ resp := session.MakeRequest(t, req, http.StatusOK)
+ doc := NewHTMLParser(t, resp.Body)
+
+ doc.AssertElement(t, "#cite-repo-button", exists)
+
+ if exists {
+ href, exists := doc.doc.Find("#goto-citation-btn").Attr("href")
+ assert.True(t, exists)
+
+ assert.True(t, strings.HasSuffix(href, file))
+ }
+}
+
+func createRepoWithEmptyFile(t *testing.T, user *user_model.User, repoName, fileName string) (*repo_model.Repository, func()) {
+ repo, _, f := tests.CreateDeclarativeRepo(t, user, repoName, []unit_model.Type{unit_model.TypeCode}, nil, []*files_service.ChangeRepoFile{
+ {
+ Operation: "create",
+ TreePath: fileName,
+ },
+ })
+
+ return repo, f
+}