open-code-review/cmd/opencodereview/review_cmd_test.go
zhuichen e5f4f976e6
fix(cli): reject --to without --from in review flags (#151)
Co-authored-by: zhuichen <13943847+zhuichen@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-06-16 20:26:22 +08:00

56 lines
1.7 KiB
Go

package main
import (
"strings"
"testing"
)
func TestValidateReviewRefsRejectsOptionLikeCommit(t *testing.T) {
err := validateReviewRefs(t.TempDir(), reviewOptions{commit: "-O./pwn.sh"})
if err == nil {
t.Fatal("expected option-like --commit ref to be rejected")
}
if !strings.Contains(err.Error(), "--commit") || !strings.Contains(err.Error(), "must not start with '-'") {
t.Fatalf("unexpected error: %v", err)
}
}
func TestValidateReviewRefsRejectsOptionLikeRangeRef(t *testing.T) {
err := validateReviewRefs(t.TempDir(), reviewOptions{to: "-O./pwn.sh"})
if err == nil {
t.Fatal("expected option-like --to ref to be rejected")
}
if !strings.Contains(err.Error(), "--to") || !strings.Contains(err.Error(), "must not start with '-'") {
t.Fatalf("unexpected error: %v", err)
}
}
func TestParseReviewFlagsRejectsToWithoutFrom(t *testing.T) {
_, err := parseReviewFlags([]string{"--to", "HEAD"})
if err == nil {
t.Fatal("expected --to without --from to fail")
}
if !strings.Contains(err.Error(), "--from is required when --to is specified") {
t.Fatalf("unexpected error: %v", err)
}
}
func TestParseReviewFlagsRejectsFromWithoutTo(t *testing.T) {
_, err := parseReviewFlags([]string{"--from", "main"})
if err == nil {
t.Fatal("expected --from without --to to fail")
}
if !strings.Contains(err.Error(), "--to is required when --from is specified") {
t.Fatalf("unexpected error: %v", err)
}
}
func TestParseReviewFlagsAllowsFromAndTo(t *testing.T) {
opts, err := parseReviewFlags([]string{"--from", "main", "--to", "HEAD"})
if err != nil {
t.Fatalf("expected --from/--to to pass, got: %v", err)
}
if opts.from != "main" || opts.to != "HEAD" {
t.Fatalf("unexpected opts: from=%q to=%q", opts.from, opts.to)
}
}