github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/whitesource/scanMTA_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package whitesource
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/SAP/jenkins-library/pkg/mock"
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestExecuteScanMTA(t *testing.T) {
    15  	const pomXML = `<?xml version="1.0" encoding="UTF-8"?>
    16  <project xmlns="http://maven.apache.org/POM/4.0.0"
    17           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    18           xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    19      <modelVersion>4.0.0</modelVersion>
    20      <artifactId>my-artifact-id</artifactId>
    21      <packaging>jar</packaging>
    22  </project>
    23  `
    24  	config := ScanOptions{
    25  		ScanType:       "mta",
    26  		OrgToken:       "org-token",
    27  		UserToken:      "user-token",
    28  		ProductName:    "mock-product",
    29  		ProductVersion: "product-version",
    30  		ProjectName:    "mock-project",
    31  	}
    32  
    33  	t.Parallel()
    34  	t.Run("happy path MTA", func(t *testing.T) {
    35  		// init
    36  		utilsMock := NewScanUtilsMock()
    37  		utilsMock.AddFile("pom.xml", []byte(pomXML))
    38  		utilsMock.AddFile("package.json", []byte(`{"name":"my-module-name"}`))
    39  		scan := newTestScan(&config)
    40  		// test
    41  		err := scan.ExecuteMTAScan(&config, utilsMock)
    42  		// assert
    43  		require.NoError(t, err)
    44  		expectedCalls := []mock.ExecCall{
    45  			{
    46  				Exec: "mvn",
    47  				Params: []string{
    48  					"--file",
    49  					"pom.xml",
    50  					"-Dorg.whitesource.orgToken=org-token",
    51  					"-Dorg.whitesource.product=mock-product",
    52  					"-Dorg.whitesource.checkPolicies=true",
    53  					"-Dorg.whitesource.failOnError=true",
    54  					"-Dorg.whitesource.forceUpdate=true",
    55  					"-Dorg.whitesource.aggregateProjectName=mock-project",
    56  					"-Dorg.whitesource.aggregateModules=true",
    57  					"-Dorg.whitesource.userKey=user-token",
    58  					"-Dorg.whitesource.productVersion=product-version",
    59  					"-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn",
    60  					"--batch-mode",
    61  					"org.whitesource:whitesource-maven-plugin:19.5.1:update",
    62  				},
    63  			},
    64  			{
    65  				Exec: "npm",
    66  				Params: []string{
    67  					"ls",
    68  				},
    69  			},
    70  			{
    71  				Exec: "npx",
    72  				Params: []string{
    73  					"whitesource",
    74  					"run",
    75  				},
    76  			},
    77  		}
    78  		assert.Equal(t, expectedCalls, utilsMock.Calls)
    79  		assert.True(t, utilsMock.HasWrittenFile(whiteSourceConfig))
    80  		assert.True(t, utilsMock.HasRemovedFile(whiteSourceConfig))
    81  		assert.Equal(t, expectedCalls, utilsMock.Calls)
    82  	})
    83  	t.Run("MTA with only maven modules", func(t *testing.T) {
    84  		// init
    85  		utilsMock := NewScanUtilsMock()
    86  		utilsMock.AddFile("pom.xml", []byte(pomXML))
    87  		scan := newTestScan(&config)
    88  		// test
    89  		err := scan.ExecuteMTAScan(&config, utilsMock)
    90  		// assert
    91  		require.NoError(t, err)
    92  		expectedCalls := []mock.ExecCall{
    93  			{
    94  				Exec: "mvn",
    95  				Params: []string{
    96  					"--file",
    97  					"pom.xml",
    98  					"-Dorg.whitesource.orgToken=org-token",
    99  					"-Dorg.whitesource.product=mock-product",
   100  					"-Dorg.whitesource.checkPolicies=true",
   101  					"-Dorg.whitesource.failOnError=true",
   102  					"-Dorg.whitesource.forceUpdate=true",
   103  					"-Dorg.whitesource.aggregateProjectName=mock-project",
   104  					"-Dorg.whitesource.aggregateModules=true",
   105  					"-Dorg.whitesource.userKey=user-token",
   106  					"-Dorg.whitesource.productVersion=product-version",
   107  					"-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn",
   108  					"--batch-mode",
   109  					"org.whitesource:whitesource-maven-plugin:19.5.1:update",
   110  				},
   111  			},
   112  		}
   113  		assert.Equal(t, expectedCalls, utilsMock.Calls)
   114  		assert.False(t, utilsMock.HasWrittenFile(whiteSourceConfig))
   115  		assert.Equal(t, expectedCalls, utilsMock.Calls)
   116  	})
   117  	t.Run("MTA with only NPM modules", func(t *testing.T) {
   118  		// init
   119  		utilsMock := NewScanUtilsMock()
   120  		utilsMock.AddFile("package.json", []byte(`{"name":"my-module-name"}`))
   121  		scan := newTestScan(&config)
   122  		// test
   123  		err := scan.ExecuteMTAScan(&config, utilsMock)
   124  		// assert
   125  		require.NoError(t, err)
   126  		expectedCalls := []mock.ExecCall{
   127  			{
   128  				Exec: "npm",
   129  				Params: []string{
   130  					"ls",
   131  				},
   132  			},
   133  			{
   134  				Exec: "npx",
   135  				Params: []string{
   136  					"whitesource",
   137  					"run",
   138  				},
   139  			},
   140  		}
   141  		assert.Equal(t, expectedCalls, utilsMock.Calls)
   142  		assert.True(t, utilsMock.HasWrittenFile(whiteSourceConfig))
   143  		assert.True(t, utilsMock.HasRemovedFile(whiteSourceConfig))
   144  		assert.Equal(t, expectedCalls, utilsMock.Calls)
   145  	})
   146  	t.Run("MTA with neither Maven nor NPM modules results in error", func(t *testing.T) {
   147  		// init
   148  		utilsMock := NewScanUtilsMock()
   149  		scan := newTestScan(&config)
   150  		// test
   151  		err := scan.ExecuteMTAScan(&config, utilsMock)
   152  		// assert
   153  		assert.EqualError(t, err, "neither Maven nor NPM modules found, no scan performed")
   154  	})
   155  }