mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-09-30 19:22:08 +00:00
62 lines
2.6 KiB
Go
62 lines
2.6 KiB
Go
|
// Copyright 2025 The Forgejo Authors. All rights reserved.
|
||
|
// SPDX-License-Identifier: MIT
|
||
|
|
||
|
package integration
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
|
||
|
"forgejo.org/tests"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
)
|
||
|
|
||
|
// TestRepoCommitsTemplateVariables ensures that template variables in commits_list.tmpl are correctly referenced
|
||
|
func TestRepoCommitsTemplateVariables(t *testing.T) {
|
||
|
defer tests.PrepareTestEnv(t)()
|
||
|
|
||
|
session := loginUser(t, "user2")
|
||
|
|
||
|
// Test the main commits page
|
||
|
req := NewRequest(t, "GET", "/user2/repo1/commits/branch/master")
|
||
|
resp := session.MakeRequest(t, req, http.StatusOK)
|
||
|
assert.Equal(t, http.StatusOK, resp.Code, "Template should render without errors")
|
||
|
|
||
|
doc := NewHTMLParser(t, resp.Body)
|
||
|
|
||
|
// 1. Repository.Link is used in tag template
|
||
|
tagLinks := doc.doc.Find("a.ui.label.basic[href*='/src/tag/']")
|
||
|
if tagLinks.Length() > 0 {
|
||
|
href, _ := tagLinks.First().Attr("href")
|
||
|
assert.Contains(t, href, "/user2/repo1/src/tag/", "Repository link should be correctly rendered in tag URLs")
|
||
|
}
|
||
|
|
||
|
// 2. Repository.ObjectFormatName is used in the SHA column header
|
||
|
shaHeader := doc.doc.Find("#commits-table thead tr th.sha")
|
||
|
assert.Equal(t, 1, shaHeader.Length(), "SHA column header should exist")
|
||
|
headerText := strings.TrimSpace(shaHeader.Text())
|
||
|
assert.NotEmpty(t, headerText, "SHA column header should have text (ObjectFormatName)")
|
||
|
// Should be uppercase SHA1 or SHA256 depending on the repository format
|
||
|
assert.True(t, headerText == "SHA1" || headerText == "SHA256", "ObjectFormatName should be rendered correctly, got: %s", headerText)
|
||
|
|
||
|
// 3. Repository.ComposeMetas is used for rendering commit messages
|
||
|
commitMessages := doc.doc.Find("#commits-table tbody tr td.message .commit-summary")
|
||
|
assert.Positive(t, commitMessages.Length(), "Should have commit messages rendered")
|
||
|
|
||
|
// 4. RepoLink variable is used throughout
|
||
|
commitLinks := doc.doc.Find("#commits-table tbody tr td.sha a[href*='/commit/']")
|
||
|
assert.Positive(t, commitLinks.Length(), "Should have commit links")
|
||
|
firstCommitLink, _ := commitLinks.First().Attr("href")
|
||
|
assert.Contains(t, firstCommitLink, "/user2/repo1/commit/", "RepoLink should be correctly used in commit URLs")
|
||
|
|
||
|
// 5. CommitTagsMap is used for tag rendering
|
||
|
// If $.CommitTagsMap is mistyped, the template would fail with a 500 error
|
||
|
// (for detailed tag rendering tests see repo_commits_tags_test.go)
|
||
|
tagLabels := doc.doc.Find("#commits-table tbody tr td.message a.ui.label.basic")
|
||
|
if tagLabels.Length() > 0 {
|
||
|
assert.NotContains(t, tagLabels.First().Text(), "{{", "Tags should be properly rendered without template syntax")
|
||
|
}
|
||
|
}
|