/
sondr
/
bxmake
Обзор
Документация
Войти
/
sondr
/
bxmake
Код
Запросы
0
Пакеты
0
Релизы
7
Аналитика
Безопасность
master
cmd/diff/diff_test.go
454 строки
12 KB
Denis Son
Initial commit
17 ноя 2025, 14:32
17 ноя 2025, 14:32
1a12c0b
Код
Авторство
О чём код?
package diff import ( "os" "os/exec" "testing" "github.com/spf13/cobra" "github.com/stretchr/testify/assert" ) func TestGetDiffCmd(t *testing.T) { // Test that GetDiffCmd returns a valid command cmd := GetDiffCmd() assert.NotNil(t, cmd) assert.Equal(t, "show-files [--from=COMMIT] [--to=COMMIT] [--summary]", cmd.Use) assert.Contains(t, cmd.Short, "Show list of files changed") assert.Contains(t, cmd.Aliases, "sf") assert.NotNil(t, cmd.RunE) } func TestDiffCmd_Flags(t *testing.T) { // Test that flags are properly configured cmd := diffCmd // Check that flags exist fromFlag := cmd.Flags().Lookup("from") assert.NotNil(t, fromFlag) assert.Equal(t, "", fromFlag.DefValue) toFlag := cmd.Flags().Lookup("to") assert.NotNil(t, toFlag) assert.Equal(t, "", toFlag.DefValue) summaryFlag := cmd.Flags().Lookup("summary") assert.NotNil(t, summaryFlag) assert.Equal(t, "false", summaryFlag.DefValue) } func TestDiffCmd_Command(t *testing.T) { // Test that command is properly configured cmd := diffCmd assert.NotNil(t, cmd) assert.Equal(t, "show-files [--from=COMMIT] [--to=COMMIT] [--summary]", cmd.Use) assert.Contains(t, cmd.Short, "Show list of files changed") assert.Contains(t, cmd.Aliases, "sf") assert.NotNil(t, cmd.RunE) } func TestRunDiff_NoGitRepository(t *testing.T) { // Create temporary directory without git repo tempDir, err := os.MkdirTemp("", "diff-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) // Change to temp directory oldWd, _ := os.Getwd() os.Chdir(tempDir) defer os.Chdir(oldWd) // Create command cmd := &cobra.Command{} cmd.Flags().String("from", "", "") cmd.Flags().String("to", "", "") cmd.Flags().Bool("summary", false, "") // Test runDiff without git repository err = runDiff(cmd, []string{}) assert.Error(t, err) assert.Contains(t, err.Error(), "current directory is not a Git repository") } func TestRunDiff_WithPositionalArgs(t *testing.T) { // Create temporary directory with git repo tempDir, err := os.MkdirTemp("", "diff-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) // Change to temp directory oldWd, _ := os.Getwd() os.Chdir(tempDir) defer os.Chdir(oldWd) // Initialize git repository err = exec.Command("git", "init").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.name", "Test User").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.email", "test@example.com").Run() assert.NoError(t, err) // Create initial commit err = os.WriteFile("test.txt", []byte("content"), 0644) assert.NoError(t, err) err = exec.Command("git", "add", "test.txt").Run() assert.NoError(t, err) err = exec.Command("git", "commit", "-m", "Initial commit").Run() assert.NoError(t, err) // Create command cmd := &cobra.Command{} cmd.Flags().String("from", "", "") cmd.Flags().String("to", "", "") cmd.Flags().Bool("summary", false, "") // Test runDiff with positional arguments (should be rejected) err = runDiff(cmd, []string{"arg1", "arg2"}) assert.Error(t, err) assert.Contains(t, err.Error(), "diff command does not accept positional arguments") } func TestRunDiff_WithGitRepository_NoTags(t *testing.T) { // Create temporary directory with git repo but no tags tempDir, err := os.MkdirTemp("", "diff-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) // Change to temp directory oldWd, _ := os.Getwd() os.Chdir(tempDir) defer os.Chdir(oldWd) // Initialize git repository err = exec.Command("git", "init").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.name", "Test User").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.email", "test@example.com").Run() assert.NoError(t, err) // Create initial commit err = os.WriteFile("test.txt", []byte("content"), 0644) assert.NoError(t, err) err = exec.Command("git", "add", "test.txt").Run() assert.NoError(t, err) err = exec.Command("git", "commit", "-m", "Initial commit").Run() assert.NoError(t, err) // Create command cmd := &cobra.Command{} cmd.Flags().String("from", "", "") cmd.Flags().String("to", "", "") cmd.Flags().Bool("summary", false, "") // Test runDiff without tags (should fail when trying to get latest tag) err = runDiff(cmd, []string{}) assert.Error(t, err) assert.Contains(t, err.Error(), "failed to get last tag") } func TestRunDiff_WithTags(t *testing.T) { // Create temporary directory with git repo and tags tempDir, err := os.MkdirTemp("", "diff-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) // Change to temp directory oldWd, _ := os.Getwd() os.Chdir(tempDir) defer os.Chdir(oldWd) // Initialize git repository err = exec.Command("git", "init").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.name", "Test User").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.email", "test@example.com").Run() assert.NoError(t, err) // Create initial commit err = os.WriteFile("test.txt", []byte("content"), 0644) assert.NoError(t, err) err = exec.Command("git", "add", "test.txt").Run() assert.NoError(t, err) err = exec.Command("git", "commit", "-m", "Initial commit").Run() assert.NoError(t, err) // Create a tag err = exec.Command("git", "tag", "v1.0.0").Run() assert.NoError(t, err) // Create another commit err = os.WriteFile("test2.txt", []byte("content2"), 0644) assert.NoError(t, err) err = exec.Command("git", "add", "test2.txt").Run() assert.NoError(t, err) err = exec.Command("git", "commit", "-m", "Second commit").Run() assert.NoError(t, err) // Create command cmd := &cobra.Command{} cmd.Flags().String("from", "", "") cmd.Flags().String("to", "", "") cmd.Flags().Bool("summary", false, "") // Test runDiff with tags (should work) err = runDiff(cmd, []string{}) assert.NoError(t, err) } func TestRunDiff_WithSummaryFlag(t *testing.T) { // Create temporary directory with git repo and tags tempDir, err := os.MkdirTemp("", "diff-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) // Change to temp directory oldWd, _ := os.Getwd() os.Chdir(tempDir) defer os.Chdir(oldWd) // Initialize git repository err = exec.Command("git", "init").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.name", "Test User").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.email", "test@example.com").Run() assert.NoError(t, err) // Create initial commit err = os.WriteFile("test.txt", []byte("content"), 0644) assert.NoError(t, err) err = exec.Command("git", "add", "test.txt").Run() assert.NoError(t, err) err = exec.Command("git", "commit", "-m", "Initial commit").Run() assert.NoError(t, err) // Create a tag err = exec.Command("git", "tag", "v1.0.0").Run() assert.NoError(t, err) // Create another commit err = os.WriteFile("test2.txt", []byte("content2"), 0644) assert.NoError(t, err) err = exec.Command("git", "add", "test2.txt").Run() assert.NoError(t, err) err = exec.Command("git", "commit", "-m", "Second commit").Run() assert.NoError(t, err) // Create command with summary flag cmd := &cobra.Command{} cmd.Flags().String("from", "", "") cmd.Flags().String("to", "", "") cmd.Flags().Bool("summary", true, "") // Test runDiff with summary flag err = runDiff(cmd, []string{}) assert.NoError(t, err) } func TestRunDiff_WithCustomFromTo(t *testing.T) { // Create temporary directory with git repo tempDir, err := os.MkdirTemp("", "diff-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) // Change to temp directory oldWd, _ := os.Getwd() os.Chdir(tempDir) defer os.Chdir(oldWd) // Initialize git repository err = exec.Command("git", "init").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.name", "Test User").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.email", "test@example.com").Run() assert.NoError(t, err) // Create initial commit err = os.WriteFile("test.txt", []byte("content"), 0644) assert.NoError(t, err) err = exec.Command("git", "add", "test.txt").Run() assert.NoError(t, err) err = exec.Command("git", "commit", "-m", "Initial commit").Run() assert.NoError(t, err) // Get first commit hash cmd := exec.Command("git", "rev-parse", "HEAD") firstCommit, err := cmd.Output() assert.NoError(t, err) firstCommitStr := string(firstCommit[:len(firstCommit)-1]) // Remove newline // Create second commit err = os.WriteFile("test2.txt", []byte("content2"), 0644) assert.NoError(t, err) err = exec.Command("git", "add", "test2.txt").Run() assert.NoError(t, err) err = exec.Command("git", "commit", "-m", "Second commit").Run() assert.NoError(t, err) // Get second commit hash cmd = exec.Command("git", "rev-parse", "HEAD") secondCommit, err := cmd.Output() assert.NoError(t, err) secondCommitStr := string(secondCommit[:len(secondCommit)-1]) // Remove newline // Create command with custom from/to cmdCobra := &cobra.Command{} cmdCobra.Flags().String("from", firstCommitStr, "") cmdCobra.Flags().String("to", secondCommitStr, "") cmdCobra.Flags().Bool("summary", false, "") // Test runDiff with custom from/to err = runDiff(cmdCobra, []string{}) assert.NoError(t, err) } func TestRunDiff_InvalidRepository(t *testing.T) { // Create temporary directory tempDir, err := os.MkdirTemp("", "diff-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) // Change to temp directory oldWd, _ := os.Getwd() os.Chdir(tempDir) defer os.Chdir(oldWd) // Initialize git repository but corrupt it err = exec.Command("git", "init").Run() assert.NoError(t, err) // Remove .git directory to simulate corrupted repo err = os.RemoveAll(".git") assert.NoError(t, err) // Create command cmd := &cobra.Command{} cmd.Flags().String("from", "", "") cmd.Flags().String("to", "", "") cmd.Flags().Bool("summary", false, "") // Test runDiff with invalid repository err = runDiff(cmd, []string{}) assert.Error(t, err) assert.Contains(t, err.Error(), "current directory is not a Git repository") } func TestRunDiff_FlagDefaults(t *testing.T) { // Test that flags have correct defaults cmd := GetDiffCmd() // Test from flag default fromFlag := cmd.Flags().Lookup("from") assert.NotNil(t, fromFlag) assert.Equal(t, "", fromFlag.DefValue) // Test to flag default toFlag := cmd.Flags().Lookup("to") assert.NotNil(t, toFlag) assert.Equal(t, "", toFlag.DefValue) // Test summary flag default summaryFlag := cmd.Flags().Lookup("summary") assert.NotNil(t, summaryFlag) assert.Equal(t, "false", summaryFlag.DefValue) // Test that flags can be set err := cmd.Flags().Set("from", "abc123") assert.NoError(t, err) err = cmd.Flags().Set("to", "def456") assert.NoError(t, err) err = cmd.Flags().Set("summary", "true") assert.NoError(t, err) fromVal, err := cmd.Flags().GetString("from") assert.NoError(t, err) assert.Equal(t, "abc123", fromVal) toVal, err := cmd.Flags().GetString("to") assert.NoError(t, err) assert.Equal(t, "def456", toVal) summaryVal, err := cmd.Flags().GetBool("summary") assert.NoError(t, err) assert.True(t, summaryVal) } func TestRunDiff_NoChanges(t *testing.T) { // Create temporary directory with git repo and same commits tempDir, err := os.MkdirTemp("", "diff-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) // Change to temp directory oldWd, _ := os.Getwd() os.Chdir(tempDir) defer os.Chdir(oldWd) // Initialize git repository err = exec.Command("git", "init").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.name", "Test User").Run() assert.NoError(t, err) err = exec.Command("git", "config", "user.email", "test@example.com").Run() assert.NoError(t, err) // Create initial commit err = os.WriteFile("test.txt", []byte("content"), 0644) assert.NoError(t, err) err = exec.Command("git", "add", "test.txt").Run() assert.NoError(t, err) err = exec.Command("git", "commit", "-m", "Initial commit").Run() assert.NoError(t, err) // Create a tag err = exec.Command("git", "tag", "v1.0.0").Run() assert.NoError(t, err) // Create command comparing same commit cmd := &cobra.Command{} cmd.Flags().String("from", "HEAD", "") cmd.Flags().String("to", "HEAD", "") cmd.Flags().Bool("summary", false, "") // Test runDiff with no changes (should work but show no output) err = runDiff(cmd, []string{}) assert.NoError(t, err) }