66 "path"
77 "testing"
88
9+ "github.com/bruin-data/bruin/pkg/git"
910 "github.com/spf13/afero"
1011 "github.com/stretchr/testify/assert"
1112 "github.com/stretchr/testify/require"
@@ -26,6 +27,16 @@ func (m *mockConfigManager) RecreateHomeDir() error {
2627 return m .recreateErr
2728}
2829
30+ // --- Mock GitFinder ---
31+ type mockGitFinder struct {
32+ repo * git.Repo
33+ err error
34+ }
35+
36+ func (m * mockGitFinder ) Repo (path string ) (* git.Repo , error ) {
37+ return m .repo , m .err
38+ }
39+
2940// --- Mock filesystem that fails on Remove ---
3041type mockFailingFs struct {
3142 afero.Fs
@@ -56,61 +67,65 @@ func TestCleanCommand_Run(t *testing.T) {
5667 name string
5768 inputPath string
5869 cleanUvCache bool
59- setupMocks func (t * testing.T ) (afero.Fs , * mockConfigManager , string )
70+ setupMocks func (t * testing.T ) (afero.Fs , * mockConfigManager , * mockGitFinder , string )
6071 expectedErr string
6172 expectedOutput []string
6273 }{
6374 {
6475 name : "config manager error - failed to get bruin home dir" ,
6576 inputPath : "." ,
66- setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , string ) {
77+ setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , * mockGitFinder , string ) {
6778 return afero .NewMemMapFs (), & mockConfigManager {
6879 homeDirErr : errors .New ("failed to get bruin home directory" ),
69- }, "."
80+ }, & mockGitFinder {}, "."
7081 },
7182 expectedErr : "failed to get bruin home directory" ,
7283 },
7384 {
7485 name : "config manager error - failed to recreate home dir" ,
7586 inputPath : "." ,
76- setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , string ) {
87+ setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , * mockGitFinder , string ) {
7788 fs := afero .NewMemMapFs ()
7889 repoRoot := "/test-repo"
7990 fs .MkdirAll (path .Join (repoRoot , LogsFolder ), 0755 )
8091 return fs , & mockConfigManager {
8192 bruinHomeDir : "/test-bruin-home" ,
8293 recreateErr : errors .New ("failed to recreate the home directory" ),
83- }, repoRoot
94+ }, & mockGitFinder {}, repoRoot
8495 },
8596 expectedErr : "failed to recreate the home directory" ,
8697 },
8798 {
8899 name : "git repo not found" ,
89100 inputPath : "/nonexistent-path" ,
90- setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , string ) {
101+ setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , * mockGitFinder , string ) {
91102 return afero .NewMemMapFs (), & mockConfigManager {
92- bruinHomeDir : "/test-bruin-home" ,
93- }, "/nonexistent-path"
103+ bruinHomeDir : "/test-bruin-home" ,
104+ }, & mockGitFinder {
105+ err : errors .New ("no git repository found" ),
106+ }, "/nonexistent-path"
94107 },
95- expectedErr : "Failed to find the git repository root" ,
108+ expectedErr : "failed to find the git repository root" ,
96109 },
97110 {
98111 name : "no log files found" ,
99112 inputPath : "." ,
100- setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , string ) {
113+ setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , * mockGitFinder , string ) {
101114 fs := afero .NewMemMapFs ()
102115 repoRoot := "/test-repo"
103116 fs .MkdirAll (path .Join (repoRoot , LogsFolder ), 0755 )
104117 return fs , & mockConfigManager {
105- bruinHomeDir : "/test-bruin-home" ,
106- }, repoRoot
118+ bruinHomeDir : "/test-bruin-home" ,
119+ }, & mockGitFinder {
120+ repo : & git.Repo {Path : repoRoot },
121+ }, repoRoot
107122 },
108123 expectedOutput : []string {"No log files found, nothing to clean up..." },
109124 },
110125 {
111126 name : "successful cleanup with log files" ,
112127 inputPath : "." ,
113- setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , string ) {
128+ setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , * mockGitFinder , string ) {
114129 fs := afero .NewMemMapFs ()
115130 repoRoot := "/test-repo"
116131 logsFolder := path .Join (repoRoot , LogsFolder )
@@ -122,18 +137,20 @@ func TestCleanCommand_Run(t *testing.T) {
122137 file .Close ()
123138 }
124139 return fs , & mockConfigManager {
125- bruinHomeDir : "/test-bruin-home" ,
126- }, repoRoot
140+ bruinHomeDir : "/test-bruin-home" ,
141+ }, & mockGitFinder {
142+ repo : & git.Repo {Path : repoRoot },
143+ }, repoRoot
127144 },
128145 expectedOutput : []string {
129- "Found 3 log files, cleaning them up..." ,
130- "Successfully removed 3 log files." ,
146+ "Found 3 log files, cleaning them up...\n " ,
147+ "Successfully removed 3 log files.\n " ,
131148 },
132149 },
133150 {
134151 name : "file removal error" ,
135152 inputPath : "." ,
136- setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , string ) {
153+ setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , * mockGitFinder , string ) {
137154 fs := & mockFailingFs {
138155 Fs : afero .NewMemMapFs (),
139156 removeErr : errors .New ("permission denied" ),
@@ -144,21 +161,39 @@ func TestCleanCommand_Run(t *testing.T) {
144161 file , _ := fs .Create (path .Join (logsFolder , "test1.log" ))
145162 file .WriteString ("test log content" )
146163 file .Close ()
164+ return fs , & mockConfigManager {
165+ bruinHomeDir : "/test-bruin-home" ,
166+ }, & mockGitFinder {
167+ repo : & git.Repo {Path : repoRoot },
168+ }, repoRoot
169+ },
170+ expectedErr : "failed to remove file" ,
171+ },
172+ {
173+ name : "successful cleanup with uv cache" ,
174+ inputPath : "." ,
175+ cleanUvCache : true ,
176+ setupMocks : func (t * testing.T ) (afero.Fs , * mockConfigManager , * mockGitFinder , string ) {
177+ fs := afero .NewMemMapFs ()
178+ repoRoot := "/test-repo"
179+ fs .MkdirAll (path .Join (repoRoot , LogsFolder ), 0755 )
147180 return fs , & mockConfigManager {
148181 bruinHomeDir : "/test-bruin-home" ,
182+ }, & mockGitFinder {
183+ repo : & git.Repo {Path : repoRoot },
149184 }, repoRoot
150185 },
151- expectedErr : "failed to remove file" ,
186+ expectedOutput : [] string { "No log files found, nothing to clean up..." } ,
152187 },
153188 }
154189
155190 for _ , tt := range tests {
156191 t .Run (tt .name , func (t * testing.T ) {
157- fs , mockCM , repoRoot := tt .setupMocks (t )
192+ fs , mockCM , mockGF , repoRoot := tt .setupMocks (t )
158193
159194 output := []string {}
160195 mockPrinter := & mockOutputPrinter {output : & output }
161- cmd := NewCleanCommand (mockCM , fs , mockPrinter , mockPrinter )
196+ cmd := NewCleanCommand (mockCM , mockGF , fs , mockPrinter , mockPrinter )
162197
163198 err := cmd .Run (repoRoot , tt .cleanUvCache )
164199
0 commit comments