ac6d34f5bd
PR Ready Gate / clear-labels (pull_request) Successful in 2s
CI / test (pull_request) Successful in 19s
CI / review (anthropic--claude-4.6-sonnet, sonnet, SONNET_REVIEW_TOKEN) (pull_request) Successful in 56s
CI / review (gpt-5, security, ., rodin/security-patterns, SECURITY_REVIEW.md, SECURITY_REVIEW_TOKEN) (pull_request) Successful in 1m51s
CI / review (gpt-5, gpt, GPT_REVIEW_TOKEN) (pull_request) Successful in 2m21s
- Introduce vcs.VCSProvider typed constant (replaces plain string provider) - Introduce vcs.ReviewSuperseder optional interface for supersede logic - Implement SupersedeReviews on gitea.Adapter (edit + resolve) and github.Client (dismiss) - Remove concrete type assertion client.(*gitea.Adapter) from main - Remove redundant baseURL fallback for github (NewClient defaults it) - Condense --gitea-url alias comment block - Fix fetchPatterns comment (empty paths are skipped, not fetched) - Add default panic to VCS client init switch Addresses: #19607, #19608, #19609, #19610, #19621, #19622, #19623
55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
package gitea
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestBuildSupersededBody(t *testing.T) {
|
|
original := "# Review\n\nLooks good.\n\n<!-- review-bot:sonnet -->"
|
|
sentinel := "<!-- review-bot:sonnet -->"
|
|
newURL := "https://gitea.example.com/owner/repo/pulls/1#pullrequestreview-99"
|
|
|
|
result := buildSupersededBody(original, "abcdef1234567890", newURL, sentinel)
|
|
|
|
// Should contain the struck-through banner
|
|
if !strings.Contains(result, "~~Original review~~") {
|
|
t.Error("missing struck-through banner")
|
|
}
|
|
// Should contain superseded notice with link
|
|
if !strings.Contains(result, "**Superseded**") {
|
|
t.Error("missing superseded notice")
|
|
}
|
|
if !strings.Contains(result, "[see current review]("+newURL+")") {
|
|
t.Error("missing link to new review")
|
|
}
|
|
// Should contain collapsed original
|
|
if !strings.Contains(result, "<details>") {
|
|
t.Error("missing details/collapse")
|
|
}
|
|
// Should contain short commit SHA
|
|
if !strings.Contains(result, "abcdef12") {
|
|
t.Error("missing short SHA")
|
|
}
|
|
// Should NOT contain full SHA in summary (it's truncated to 8)
|
|
if strings.Contains(result, "abcdef1234567890") {
|
|
t.Error("should truncate SHA to 8 chars")
|
|
}
|
|
// Should contain the original body inside details
|
|
if !strings.Contains(result, original) {
|
|
t.Error("original body not preserved in collapsed section")
|
|
}
|
|
// Should end with sentinel
|
|
if !strings.Contains(result, sentinel) {
|
|
t.Error("missing sentinel")
|
|
}
|
|
}
|
|
|
|
func TestBuildSupersededBodyShortSHA(t *testing.T) {
|
|
// Short SHA should pass through without panic
|
|
result := buildSupersededBody("body", "abc", "https://example.com/review", "<!-- review-bot:x -->")
|
|
if !strings.Contains(result, "abc") {
|
|
t.Error("short SHA not preserved")
|
|
}
|
|
}
|