@@ -2,9 +2,11 @@ package detector
22
33import (
44 "context"
5+ "encoding/base64"
56 "testing"
67
78 "github.com/step-security/dev-machine-guard/internal/executor"
9+ "github.com/step-security/dev-machine-guard/internal/model"
810 "github.com/step-security/dev-machine-guard/internal/progress"
911)
1012
@@ -76,56 +78,61 @@ func TestBrewDetector_ListCasks(t *testing.T) {
7678 }
7779}
7880
79- func TestBrewScanner_Formulae (t * testing.T ) {
80- mock := executor .NewMock ()
81- mock .SetPath ("brew" , "/opt/homebrew/bin/brew" )
82- mock .SetCommand ("curl 8.4.0\n git 2.43.0\n " , "" , 0 , "brew" , "list" , "--formula" , "--versions" )
83-
84- log := newTestLogger ()
85- scanner := NewBrewScanner (mock , log )
86- result , ok := scanner .ScanFormulae (context .Background ())
87-
88- if ! ok {
89- t .Fatal ("expected scan to succeed" )
81+ func TestBrewScanner_FormulaeResult (t * testing.T ) {
82+ scanner := NewBrewScanner (executor .NewMock (), newTestLogger ())
83+ pkgs := []model.BrewPackage {
84+ {Name : "curl" , Version : "8.4.0" },
85+ {Name : "git" , Version : "2.43.0" },
9086 }
87+ result := scanner .FormulaeResult (pkgs )
88+
9189 if result .ScanType != "formulae" {
9290 t .Errorf ("expected scan type formulae, got %s" , result .ScanType )
9391 }
94- if result .RawStdoutBase64 == "" {
95- t .Error ("expected non-empty base64 stdout" )
96- }
9792 if result .ExitCode != 0 {
9893 t .Errorf ("expected exit code 0, got %d" , result .ExitCode )
9994 }
95+ if result .LineCount != 2 {
96+ t .Errorf ("expected line count 2, got %d" , result .LineCount )
97+ }
98+ decoded , err := base64 .StdEncoding .DecodeString (result .RawStdoutBase64 )
99+ if err != nil {
100+ t .Fatalf ("base64 decode failed: %v" , err )
101+ }
102+ want := "curl 8.4.0\n git 2.43.0\n "
103+ if string (decoded ) != want {
104+ t .Errorf ("stdout mismatch: got %q, want %q" , string (decoded ), want )
105+ }
100106}
101107
102- func TestBrewScanner_Casks (t * testing.T ) {
103- mock := executor .NewMock ()
104- mock .SetPath ("brew" , "/opt/homebrew/bin/brew" )
105- mock .SetCommand ("firefox 120.0\n google-chrome 120.0.6099.109\n " , "" , 0 , "brew" , "list" , "--cask" , "--versions" )
106-
107- log := newTestLogger ()
108- scanner := NewBrewScanner (mock , log )
109- result , ok := scanner .ScanCasks (context .Background ())
110-
111- if ! ok {
112- t .Fatal ("expected scan to succeed" )
108+ func TestBrewScanner_CasksResult (t * testing.T ) {
109+ scanner := NewBrewScanner (executor .NewMock (), newTestLogger ())
110+ pkgs := []model.BrewPackage {
111+ {Name : "firefox" , Version : "120.0" },
112+ {Name : "google-chrome" , Version : "120.0.6099.109" },
113113 }
114+ result := scanner .CasksResult (pkgs )
115+
114116 if result .ScanType != "casks" {
115117 t .Errorf ("expected scan type casks, got %s" , result .ScanType )
116118 }
119+ if result .LineCount != 2 {
120+ t .Errorf ("expected line count 2, got %d" , result .LineCount )
121+ }
117122 if result .RawStdoutBase64 == "" {
118123 t .Error ("expected non-empty base64 stdout" )
119124 }
120125}
121126
122- func TestBrewScanner_NotInstalled (t * testing.T ) {
123- mock := executor .NewMock ()
124- log := newTestLogger ()
125- scanner := NewBrewScanner (mock , log )
127+ func TestBrewScanner_EmptyInput (t * testing.T ) {
128+ scanner := NewBrewScanner (executor .NewMock (), newTestLogger ())
129+ result := scanner .FormulaeResult (nil )
126130
127- _ , ok := scanner .ScanFormulae (context .Background ())
128- if ok {
129- t .Error ("expected scan to fail when brew is not installed" )
131+ if result .LineCount != 0 {
132+ t .Errorf ("expected line count 0, got %d" , result .LineCount )
133+ }
134+ decoded , _ := base64 .StdEncoding .DecodeString (result .RawStdoutBase64 )
135+ if len (decoded ) != 0 {
136+ t .Errorf ("expected empty stdout, got %q" , string (decoded ))
130137 }
131138}
0 commit comments