diff options
Diffstat (limited to 'internal/modules/git_ops_test.go')
| -rw-r--r-- | internal/modules/git_ops_test.go | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/internal/modules/git_ops_test.go b/internal/modules/git_ops_test.go new file mode 100644 index 0000000..3ab0492 --- /dev/null +++ b/internal/modules/git_ops_test.go @@ -0,0 +1,277 @@ +package modules + +import ( + "os" + "testing" + + "github.com/go-git/go-git/v5" +) + +func createTestRepo(t *testing.T) (*git.Repository, string) { + t.Helper() + + // Create a temporary directory for the test repo + tmpDir, err := os.MkdirTemp("", "test-repo-*") + if err != nil { + t.Fatal(err) + } + + // Initialize repository + repo, err := git.PlainInit(tmpDir, true) // bare repository + if err != nil { + t.Fatal(err) + } + + return repo, tmpDir +} + +func TestGetVersions(t *testing.T) { + handler := &ModuleHandler{} + + t.Run("repository_not_found", func(t *testing.T) { + versions, err := handler.getVersions("/nonexistent/path") + if err == nil { + t.Error("expected error for nonexistent repository") + } + if versions != nil { + t.Error("expected nil versions for nonexistent repository") + } + }) + + t.Run("empty_repository", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + versions, err := handler.getVersions(tmpDir) + if err != nil { + t.Errorf("expected no error for empty repository, got: %v", err) + } + if len(versions) != 0 { + t.Errorf("expected 0 versions for empty repository, got %d", len(versions)) + } + + _ = repo // Use repo to avoid unused variable + }) +} + +func TestGetLatestVersion(t *testing.T) { + handler := &ModuleHandler{} + + t.Run("repository_not_found", func(t *testing.T) { + version, err := handler.getLatestVersion("/nonexistent/path") + if err == nil { + t.Error("expected error for nonexistent repository") + } + if version != "" { + t.Error("expected empty version for nonexistent repository") + } + }) + + t.Run("empty_repository", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + // This should fail because there are no commits in the repository + version, err := handler.getLatestVersion(tmpDir) + if err == nil { + t.Error("expected error for empty repository") + } + if version != "" { + t.Error("expected empty version for empty repository") + } + + _ = repo + }) +} + +func TestGeneratePseudoVersion(t *testing.T) { + handler := &ModuleHandler{} + + t.Run("repository_not_found", func(t *testing.T) { + version, err := handler.generatePseudoVersion("/nonexistent/path") + if err == nil { + t.Error("expected error for nonexistent repository") + } + if version != "" { + t.Error("expected empty version for nonexistent repository") + } + }) +} + +func TestGetVersionTimestamp(t *testing.T) { + handler := &ModuleHandler{} + + t.Run("repository_not_found", func(t *testing.T) { + timestamp, err := handler.getVersionTimestamp("/nonexistent/path", "v1.0.0") + if err == nil { + t.Error("expected error for nonexistent repository") + } + if timestamp != "" { + t.Error("expected empty timestamp for nonexistent repository") + } + }) + + t.Run("version_not_found", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + timestamp, err := handler.getVersionTimestamp(tmpDir, "v9.9.9") + if err == nil { + t.Error("expected error for nonexistent version") + } + if timestamp != "" { + t.Error("expected empty timestamp for nonexistent version") + } + + _ = repo + }) + + t.Run("empty_version_string", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + _, err := handler.getVersionTimestamp(tmpDir, "") + if err == nil { + t.Error("expected error for empty version string") + } + + _ = repo + }) + + t.Run("version_with_v_prefix", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + // Test that version starting with 'v' is handled (should try both with and without) + _, err := handler.getVersionTimestamp(tmpDir, "v1.0.0") + if err == nil { + t.Error("expected error for nonexistent version") + } + + _ = repo + }) +} + +func TestGetModFile(t *testing.T) { + handler := &ModuleHandler{} + + t.Run("repository_not_found", func(t *testing.T) { + content, err := handler.getModFile("/nonexistent/path", "v1.0.0") + if err == nil { + t.Error("expected error for nonexistent repository") + } + if content != nil { + t.Error("expected nil content for nonexistent repository") + } + }) + + t.Run("version_not_found", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + content, err := handler.getModFile(tmpDir, "v9.9.9") + if err == nil { + t.Error("expected error for nonexistent version") + } + if content != nil { + t.Error("expected nil content for nonexistent version") + } + + _ = repo + }) +} + +func TestGetModuleZip(t *testing.T) { + handler := &ModuleHandler{} + + t.Run("repository_not_found", func(t *testing.T) { + zipData, err := handler.getModuleZip("/nonexistent/path", "v1.0.0") + if err == nil { + t.Error("expected error for nonexistent repository") + } + if zipData != nil { + t.Error("expected nil zip data for nonexistent repository") + } + }) + + t.Run("version_not_found", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + zipData, err := handler.getModuleZip(tmpDir, "v9.9.9") + if err == nil { + t.Error("expected error for nonexistent version") + } + if zipData != nil { + t.Error("expected nil zip data for nonexistent version") + } + + _ = repo + }) +} + +func TestResolveVersion(t *testing.T) { + handler := &ModuleHandler{} + + t.Run("nonexistent_tag", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + hash, err := handler.resolveVersion(repo, "v1.0.0") + if err == nil { + t.Error("expected error for nonexistent version") + } + if !hash.IsZero() { + t.Error("expected zero hash for nonexistent version") + } + }) + + t.Run("short_version_string", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + // Test with a version string that's too short to be a hash + hash, err := handler.resolveVersion(repo, "abc") + if err == nil { + t.Error("expected error for short version string") + } + if !hash.IsZero() { + t.Error("expected zero hash for short version string") + } + }) + + t.Run("version_with_v_prefix", func(t *testing.T) { + repo, tmpDir := createTestRepo(t) + defer os.RemoveAll(tmpDir) + + // Test version with 'v' prefix + hash, err := handler.resolveVersion(repo, "v1.2.3") + if err == nil { + t.Error("expected error for nonexistent version") + } + if !hash.IsZero() { + t.Error("expected zero hash for nonexistent version") + } + }) +} + +func TestIsInNestedModule(t *testing.T) { + handler := &ModuleHandler{} + + // We'll test this with a nil tree since setting up a real tree is complex + // This tests the edge cases and basic logic + + t.Run("root_directory", func(t *testing.T) { + isNested := handler.isInNestedModule(nil, "") + if isNested { + t.Error("root directory should not be considered nested module") + } + }) + + t.Run("current_directory", func(t *testing.T) { + isNested := handler.isInNestedModule(nil, ".") + if isNested { + t.Error("current directory should not be considered nested module") + } + }) +} |