/
sondr
/
bxmake
Обзор
Документация
Войти
/
sondr
/
bxmake
Код
Запросы
0
Пакеты
0
Релизы
7
Аналитика
Безопасность
master
cmd/pull/pull_test.go
325 строк
9 KB
Denis Son
Initial commit
17 ноя 2025, 14:32
17 ноя 2025, 14:32
1a12c0b
Код
Авторство
О чём код?
package pull import ( "os" "os/exec" "testing" "github.com/spf13/cobra" "github.com/stretchr/testify/assert" ) func TestGetPullCmd(t *testing.T) { // Test that GetPullCmd returns a valid command cmd := GetPullCmd() assert.NotNil(t, cmd) assert.Equal(t, "pull [--verbose]", cmd.Use) assert.Contains(t, cmd.Short, "Pull changes from remote repository") assert.Contains(t, cmd.Aliases, "p") assert.NotNil(t, cmd.RunE) } func TestPullCmd_Flags(t *testing.T) { // Test that flags are properly configured cmd := pullCmd // Check that flags exist verboseFlag := cmd.Flags().Lookup("verbose") assert.NotNil(t, verboseFlag) assert.Equal(t, "false", verboseFlag.DefValue) } func TestPullCmd_Command(t *testing.T) { // Test that command is properly configured cmd := pullCmd assert.NotNil(t, cmd) assert.Equal(t, "pull [--verbose]", cmd.Use) assert.Contains(t, cmd.Short, "Pull changes from remote repository") assert.Contains(t, cmd.Aliases, "p") assert.NotNil(t, cmd.RunE) } func TestRunPull_NoGitRepository(t *testing.T) { // Create temporary directory without git repo tempDir, err := os.MkdirTemp("", "pull-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 with verbose flag cmd := &cobra.Command{} cmd.Flags().Bool("verbose", false, "") // Test runPull without git repository err = runPull(cmd, []string{}) assert.Error(t, err) assert.Contains(t, err.Error(), "current directory is not a Git repository") } func TestRunPull_NoRemoteRepository(t *testing.T) { // Create temporary directory with git repo but no remote tempDir, err := os.MkdirTemp("", "pull-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 without remote 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().Bool("verbose", false, "") // Test runPull without remote repository err = runPull(cmd, []string{}) assert.Error(t, err) assert.Contains(t, err.Error(), "failed to get remote repository URL") } func TestRunPull_WithVerboseFlag(t *testing.T) { // Create temporary directory with git repo but no remote tempDir, err := os.MkdirTemp("", "pull-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 without remote 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 with verbose flag set to true cmd := &cobra.Command{} cmd.Flags().Bool("verbose", true, "") // Test runPull with verbose flag (should fail due to no remote, but show verbose output) err = runPull(cmd, []string{}) assert.Error(t, err) assert.Contains(t, err.Error(), "failed to get remote repository URL") } func TestRunPull_InvalidRepository(t *testing.T) { // Create temporary directory tempDir, err := os.MkdirTemp("", "pull-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().Bool("verbose", false, "") // Test runPull with invalid repository err = runPull(cmd, []string{}) assert.Error(t, err) assert.Contains(t, err.Error(), "current directory is not a Git repository") } func TestRunPull_GetCurrentBranchError(t *testing.T) { // Create temporary directory with git repo tempDir, err := os.MkdirTemp("", "pull-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) // Add a remote (but it won't be accessible) err = exec.Command("git", "remote", "add", "origin", "https://nonexistent.example.com/repo.git").Run() assert.NoError(t, err) // Create command with verbose flag cmd := &cobra.Command{} cmd.Flags().Bool("verbose", true, "") // Test runPull (should fail on pull, but verbose output should work) err = runPull(cmd, []string{}) assert.Error(t, err) assert.Contains(t, err.Error(), "failed to pull changes") } func TestRunPull_FlagDefaults(t *testing.T) { // Test that flags have correct defaults cmd := GetPullCmd() // Test verbose flag default verboseFlag := cmd.Flags().Lookup("verbose") assert.NotNil(t, verboseFlag) assert.Equal(t, "false", verboseFlag.DefValue) // Test that flag can be set err := cmd.Flags().Set("verbose", "true") assert.NoError(t, err) verboseVal, err := cmd.Flags().GetBool("verbose") assert.NoError(t, err) assert.True(t, verboseVal) } func TestRunPull_CommandArguments(t *testing.T) { // Test that command doesn't accept positional arguments tempDir, err := os.MkdirTemp("", "pull-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) 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) // Add a remote err = exec.Command("git", "remote", "add", "origin", "https://nonexistent.example.com/repo.git").Run() assert.NoError(t, err) // Create command cmd := &cobra.Command{} cmd.Flags().Bool("verbose", false, "") // Test with positional arguments (should be ignored since pull doesn't use them) err = runPull(cmd, []string{"extra", "args"}) assert.Error(t, err) // Will fail on pull, but arguments should be ignored assert.Contains(t, err.Error(), "failed to pull changes") } func TestRunPull_VerboseOutput(t *testing.T) { // Test that verbose mode produces expected output structure tempDir, err := os.MkdirTemp("", "pull-test-*") assert.NoError(t, err) defer os.RemoveAll(tempDir) 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) // Add a remote err = exec.Command("git", "remote", "add", "origin", "https://nonexistent.example.com/repo.git").Run() assert.NoError(t, err) // Create command with verbose flag cmd := &cobra.Command{} cmd.Flags().Bool("verbose", true, "") // Test runPull with verbose (should fail but show verbose output) err = runPull(cmd, []string{}) assert.Error(t, err) assert.Contains(t, err.Error(), "failed to pull changes") }