JOJ3/pkg/healthcheck/author_test.go
张泊明518370910136 e5de5b2bd6
Some checks failed
build / trigger-build-image (push) Blocked by required conditions
build / build (push) Has been cancelled
build / build (pull_request) Successful in 2m7s
build / trigger-build-image (pull_request) Has been skipped
test: expand reliability regression coverage
2026-08-02 04:28:24 -07:00

81 lines
2.6 KiB
Go

package healthcheck
import (
"os"
"path/filepath"
"strings"
"testing"
"time"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing/object"
)
func newCommitRepo(t *testing.T, message, email string) string {
t.Helper()
dir := t.TempDir()
repo, err := git.PlainInit(dir, false)
if err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(dir, "README.md"), []byte("test"), 0o600); err != nil {
t.Fatal(err)
}
worktree, err := repo.Worktree()
if err != nil {
t.Fatal(err)
}
if _, err := worktree.Add("README.md"); err != nil {
t.Fatal(err)
}
signature := &object.Signature{Name: "Student", Email: email, When: time.Unix(1, 0)}
if _, err := worktree.Commit(message, &git.CommitOptions{Author: signature, Committer: signature}); err != nil {
t.Fatal(err)
}
return dir
}
func TestCommitChecks(t *testing.T) {
valid := newCommitRepo(t, "feat: valid", "student@example.edu")
if err := NonASCIIMsg(valid); err != nil {
t.Fatal(err)
}
if err := AuthorEmailCheck(valid, []string{"example.edu"}, filepath.Join(valid, "missing.csv")); err != nil {
t.Fatal(err)
}
invalidMessage := newCommitRepo(t, "feat: 测试", "student@invalid.test")
if err := NonASCIIMsg(invalidMessage); err == nil || !strings.Contains(err.Error(), "测试") {
t.Fatalf("NonASCIIMsg() error = %v", err)
}
if err := AuthorEmailCheck(invalidMessage, []string{"example.edu"}, filepath.Join(invalidMessage, "missing.csv")); err == nil || !strings.Contains(err.Error(), "allowed domains") {
t.Fatalf("AuthorEmailCheck(domain) error = %v", err)
}
}
func TestAuthorEmailCheckActorCSV(t *testing.T) {
repo := newCommitRepo(t, "feat: valid", "student@example.edu")
csvPath := filepath.Join(t.TempDir(), "actors.csv")
if err := os.WriteFile(csvPath, []byte("name,id,student\n"), 0o600); err != nil {
t.Fatal(err)
}
if err := AuthorEmailCheck(repo, []string{"example.edu"}, csvPath); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(csvPath, []byte("name,id,other\n"), 0o600); err != nil {
t.Fatal(err)
}
if err := AuthorEmailCheck(repo, []string{"example.edu"}, csvPath); err == nil || !strings.Contains(err.Error(), "not stored") {
t.Fatalf("AuthorEmailCheck(actor) error = %v", err)
}
}
func TestCommitChecksRejectNonRepository(t *testing.T) {
if err := NonASCIIMsg(t.TempDir()); err == nil || !strings.Contains(err.Error(), "opening git repo") {
t.Fatalf("NonASCIIMsg() error = %v", err)
}
if err := AuthorEmailCheck(t.TempDir(), nil, ""); err == nil || !strings.Contains(err.Error(), "opening git repo") {
t.Fatalf("AuthorEmailCheck() error = %v", err)
}
}