@@ -12,8 +12,10 @@ import (
1212 "strings"
1313 "testing"
1414
15+ "github.com/checkmarx/ast-cli/internal/commands/util"
1516 errorConstants "github.com/checkmarx/ast-cli/internal/constants/errors"
1617 exitCodes "github.com/checkmarx/ast-cli/internal/constants/exit-codes"
18+ "github.com/checkmarx/ast-cli/internal/logger"
1719 commonParams "github.com/checkmarx/ast-cli/internal/params"
1820 "github.com/checkmarx/ast-cli/internal/wrappers"
1921 "github.com/checkmarx/ast-cli/internal/wrappers/mock"
@@ -52,6 +54,8 @@ const (
5254 InvalidEngineMessage = "Please verify if engine is installed"
5355 SCSScoreCardError = "SCS scan failed to start: Scorecard scan is missing required flags, please include in the ast-cli arguments: " +
5456 "--scs-repo-url your_repo_url --scs-repo-token your_repo_token"
57+ outputFileName = "test_output.log"
58+ noUpdatesForExistingProject = "No applicationId or tags to update. Skipping project update."
5559)
5660
5761func TestScanHelp (t * testing.T ) {
@@ -382,14 +386,31 @@ func TestCreateScanBranches(t *testing.T) {
382386 execCmdNilAssertion (t , "scan" , "create" , "--project-name" , "MOCK" , "-s" , dummyRepo , "-b" , "branch_defined" )
383387}
384388
385- func TestCreateScanWithProjectGroup (t * testing.T ) {
389+ func TestCreateScan_WhenProjectNotExistsAndInvalidGroup_ShouldFail (t * testing.T ) {
386390 err := execCmdNotNilAssertion (
387391 t ,
388- "scan" , "create" , "--project-name" , "invalidGroup " , "-s" , "." , "--branch" , "main" , "--project-groups" , "invalidGroup" ,
392+ "scan" , "create" , "--project-name" , "newProject " , "-s" , "." , "--branch" , "main" , "--project-groups" , "invalidGroup" ,
389393 )
390394 assert .Assert (t , err .Error () == "Failed updating a project: Failed finding groups: [invalidGroup]" , "\n the received error is:" , err .Error ())
391395}
392396
397+ func TestCreateScan_WhenProjectNotExists_ShouldCreateProjectAndAssignGroup (t * testing.T ) {
398+ file := createOutputFile (t , outputFileName )
399+ defer deleteOutputFile (file )
400+ defer logger .SetOutput (os .Stdout )
401+
402+ baseArgs := []string {"scan" , "create" , "--project-name" , "newProject" , "-s" , "." , "--branch" , "main" , "--project-groups" , "existsGroup1" , "--debug" }
403+ execCmdNilAssertion (
404+ t ,
405+ baseArgs ... ,
406+ )
407+ stdoutString , err := util .ReadFileAsString (file .Name ())
408+ if err != nil {
409+ t .Fatalf ("Failed to read log file: %v" , err )
410+ }
411+ assert .Equal (t , strings .Contains (stdoutString , "Updating project groups" ), true , "Expected output: %s" , "Updating project groups" )
412+ }
413+
393414func TestScanWorkflowMissingID (t * testing.T ) {
394415 err := execCmdNotNilAssertion (t , "scan" , "workflow" )
395416 assert .Error (t , err , "Please provide a scan ID" , err .Error ())
@@ -590,11 +611,18 @@ func TestCreateScanProjectTags(t *testing.T) {
590611 "--project-tags" , "test" , "--debug" )
591612}
592613
593- func TestCreateScanProjecGroupsError (t * testing.T ) {
614+ func TestCreateScan_WhenProjectExists_ShouldIgnoreGroups (t * testing.T ) {
615+ file := createOutputFile (t , outputFileName )
616+ defer deleteOutputFile (file )
617+ defer logger .SetOutput (os .Stdout )
594618 baseArgs := []string {scanCommand , "create" , "--project-name" , "MOCK" , "-s" , dummyRepo , "-b" , "dummy_branch" ,
595- "--debug" , "--project-groups" , "err" }
596- err := execCmdNotNilAssertion (t , baseArgs ... )
597- assert .Error (t , err , "Failed updating a project: Failed finding groups: [err]" , err .Error ())
619+ "--debug" , "--project-groups" , "anyProjectGroup" }
620+ execCmdNilAssertion (t , baseArgs ... )
621+ stdoutString , err := util .ReadFileAsString (file .Name ())
622+ if err != nil {
623+ t .Fatalf ("Failed to read log file: %v" , err )
624+ }
625+ assert .Equal (t , strings .Contains (stdoutString , noUpdatesForExistingProject ), true , "Expected output: %s" , noUpdatesForExistingProject )
598626}
599627func TestScanCreateLastSastScanTimeWithInvalidValue (t * testing.T ) {
600628 baseArgs := []string {"scan" , "create" , "--project-name" , "MOCK" , "-s" , dummyRepo , "-b" , "dummy_branch" , "--sca-exploitable-path" , "true" , "--sca-last-sast-scan-time" , "notaniteger" }
@@ -1275,3 +1303,20 @@ func TestFilterMatched(t *testing.T) {
12751303 })
12761304 }
12771305}
1306+
1307+ func createOutputFile (t * testing.T , fileName string ) * os.File {
1308+ file , err := os .Create (fileName )
1309+ if err != nil {
1310+ t .Fatalf ("Failed to create log file: %v" , err )
1311+ }
1312+ logger .SetOutput (file )
1313+ return file
1314+ }
1315+
1316+ func deleteOutputFile (file * os.File ) {
1317+ file .Close ()
1318+ err := os .Remove (file .Name ())
1319+ if err != nil {
1320+ logger .Printf ("Failed to remove log file: %v" , err )
1321+ }
1322+ }
0 commit comments