aboutsummaryrefslogtreecommitdiff
path: root/internal/modules/git_ops_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/modules/git_ops_test.go')
-rw-r--r--internal/modules/git_ops_test.go277
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")
+ }
+ })
+}