@@ -245,4 +245,59 @@ func setupPythonDir(t *testing.T, requirements string) (dir string, pipBin strin
245245 t .Fatalf ("write requirements.txt: %v" , err )
246246 }
247247 return dir , pipBin
248+ }
249+
250+ func TestDepsCheck_Ruby_Pass_VendorBundle (t * testing.T ) {
251+ dir := t .TempDir ()
252+ if err := os .MkdirAll (filepath .Join (dir , "vendor" , "bundle" ), 0o755 ); err != nil {
253+ t .Fatalf ("mkdir vendor/bundle: %v" , err )
254+ }
255+ c := & DepsCheck {Dir : dir , Stack : "ruby" }
256+ r := c .Run (context .Background ())
257+ if r .Status != StatusPass {
258+ t .Errorf ("expected pass when vendor/bundle exists, got %v: %s" , r .Status , r .Message )
259+ }
260+ }
261+
262+ func TestDepsCheck_Ruby_Pass_GemfileLock (t * testing.T ) {
263+ dir := t .TempDir ()
264+ if err := os .WriteFile (filepath .Join (dir , "Gemfile.lock" ), []byte ("GEM\n " ), 0o644 ); err != nil {
265+ t .Fatalf ("write Gemfile.lock: %v" , err )
266+ }
267+ c := & DepsCheck {Dir : dir , Stack : "ruby" }
268+ r := c .Run (context .Background ())
269+ if r .Status != StatusPass {
270+ t .Errorf ("expected pass when Gemfile.lock exists, got %v: %s" , r .Status , r .Message )
271+ }
272+ }
273+
274+ func TestDepsCheck_Ruby_Fail_NeitherPresent (t * testing.T ) {
275+ dir := t .TempDir ()
276+ c := & DepsCheck {Dir : dir , Stack : "ruby" }
277+ r := c .Run (context .Background ())
278+ if r .Status != StatusFail {
279+ t .Errorf ("expected fail when neither vendor/bundle nor Gemfile.lock exist, got %v" , r .Status )
280+ }
281+ if ! strings .Contains (r .Fix , "bundle install" ) {
282+ t .Errorf ("expected fix to mention 'bundle install', got: %s" , r .Fix )
283+ }
284+ }
285+
286+ func TestDepsCheck_Ruby_VendorBundle_Takes_Priority (t * testing.T ) {
287+ // Both present — vendor/bundle should win (pass with that message).
288+ dir := t .TempDir ()
289+ if err := os .MkdirAll (filepath .Join (dir , "vendor" , "bundle" ), 0o755 ); err != nil {
290+ t .Fatalf ("mkdir vendor/bundle: %v" , err )
291+ }
292+ if err := os .WriteFile (filepath .Join (dir , "Gemfile.lock" ), []byte ("GEM\n " ), 0o644 ); err != nil {
293+ t .Fatalf ("write Gemfile.lock: %v" , err )
294+ }
295+ c := & DepsCheck {Dir : dir , Stack : "ruby" }
296+ r := c .Run (context .Background ())
297+ if r .Status != StatusPass {
298+ t .Errorf ("expected pass, got %v: %s" , r .Status , r .Message )
299+ }
300+ if ! strings .Contains (r .Message , "vendor/bundle" ) {
301+ t .Errorf ("expected vendor/bundle message to take priority, got: %s" , r .Message )
302+ }
248303}
0 commit comments