github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/cmd/pythonBuild_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package cmd
     5  
     6  import (
     7  	"fmt"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	"github.com/SAP/jenkins-library/pkg/mock"
    12  	"github.com/SAP/jenkins-library/pkg/telemetry"
    13  
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  type pythonBuildMockUtils struct {
    18  	config *pythonBuildOptions
    19  	*mock.ExecMockRunner
    20  	*mock.FilesMock
    21  }
    22  
    23  func newPythonBuildTestsUtils() pythonBuildMockUtils {
    24  	utils := pythonBuildMockUtils{
    25  		ExecMockRunner: &mock.ExecMockRunner{},
    26  		FilesMock:      &mock.FilesMock{},
    27  	}
    28  	return utils
    29  }
    30  
    31  func (f *pythonBuildMockUtils) GetConfig() *pythonBuildOptions {
    32  	return f.config
    33  }
    34  
    35  func TestRunPythonBuild(t *testing.T) {
    36  	cpe := pythonBuildCommonPipelineEnvironment{}
    37  	t.Run("success - build", func(t *testing.T) {
    38  		config := pythonBuildOptions{
    39  			VirutalEnvironmentName: "dummy",
    40  		}
    41  		utils := newPythonBuildTestsUtils()
    42  		telemetryData := telemetry.CustomData{}
    43  
    44  		runPythonBuild(&config, &telemetryData, utils, &cpe)
    45  		assert.Equal(t, "python3", utils.ExecMockRunner.Calls[0].Exec)
    46  		assert.Equal(t, []string{"-m", "venv", "dummy"}, utils.ExecMockRunner.Calls[0].Params)
    47  	})
    48  
    49  	t.Run("failure - build failure", func(t *testing.T) {
    50  		config := pythonBuildOptions{}
    51  		utils := newPythonBuildTestsUtils()
    52  		utils.ShouldFailOnCommand = map[string]error{"python setup.py sdist bdist_wheel": fmt.Errorf("build failure")}
    53  		telemetryData := telemetry.CustomData{}
    54  
    55  		err := runPythonBuild(&config, &telemetryData, utils, &cpe)
    56  		assert.EqualError(t, err, "Python build failed with error: build failure")
    57  	})
    58  
    59  	t.Run("success - publishes binaries", func(t *testing.T) {
    60  		config := pythonBuildOptions{
    61  			Publish:                  true,
    62  			TargetRepositoryURL:      "https://my.target.repository.local",
    63  			TargetRepositoryUser:     "user",
    64  			TargetRepositoryPassword: "password",
    65  			VirutalEnvironmentName:   "dummy",
    66  		}
    67  		utils := newPythonBuildTestsUtils()
    68  		telemetryData := telemetry.CustomData{}
    69  
    70  		runPythonBuild(&config, &telemetryData, utils, &cpe)
    71  		assert.Equal(t, "python3", utils.ExecMockRunner.Calls[0].Exec)
    72  		assert.Equal(t, []string{"-m", "venv", config.VirutalEnvironmentName}, utils.ExecMockRunner.Calls[0].Params)
    73  		assert.Equal(t, "bash", utils.ExecMockRunner.Calls[1].Exec)
    74  		assert.Equal(t, []string{"-c", "source " + filepath.Join("dummy", "bin", "activate")}, utils.ExecMockRunner.Calls[1].Params)
    75  		assert.Equal(t, "python", utils.ExecMockRunner.Calls[2].Exec)
    76  		assert.Equal(t, []string{"setup.py", "sdist", "bdist_wheel"}, utils.ExecMockRunner.Calls[2].Params)
    77  		assert.Equal(t, filepath.Join("dummy", "bin", "pip"), utils.ExecMockRunner.Calls[3].Exec)
    78  		assert.Equal(t, []string{"install", "--upgrade", "twine"}, utils.ExecMockRunner.Calls[3].Params)
    79  		assert.Equal(t, filepath.Join("dummy", "bin", "twine"), utils.ExecMockRunner.Calls[4].Exec)
    80  		assert.Equal(t, []string{"upload", "--username", config.TargetRepositoryUser,
    81  			"--password", config.TargetRepositoryPassword, "--repository-url", config.TargetRepositoryURL,
    82  			"--disable-progress-bar", "dist/*"}, utils.ExecMockRunner.Calls[4].Params)
    83  	})
    84  
    85  	t.Run("success - create BOM", func(t *testing.T) {
    86  		config := pythonBuildOptions{
    87  			CreateBOM:              true,
    88  			Publish:                false,
    89  			VirutalEnvironmentName: "dummy",
    90  		}
    91  		utils := newPythonBuildTestsUtils()
    92  		telemetryData := telemetry.CustomData{}
    93  
    94  		runPythonBuild(&config, &telemetryData, utils, &cpe)
    95  		// assert.NoError(t, err)
    96  		assert.Equal(t, "python3", utils.ExecMockRunner.Calls[0].Exec)
    97  		assert.Equal(t, []string{"-m", "venv", config.VirutalEnvironmentName}, utils.ExecMockRunner.Calls[0].Params)
    98  		assert.Equal(t, "bash", utils.ExecMockRunner.Calls[1].Exec)
    99  		assert.Equal(t, []string{"-c", "source " + filepath.Join("dummy", "bin", "activate")}, utils.ExecMockRunner.Calls[1].Params)
   100  		assert.Equal(t, "python", utils.ExecMockRunner.Calls[2].Exec)
   101  		assert.Equal(t, []string{"setup.py", "sdist", "bdist_wheel"}, utils.ExecMockRunner.Calls[2].Params)
   102  		assert.Equal(t, filepath.Join("dummy", "bin", "pip"), utils.ExecMockRunner.Calls[3].Exec)
   103  		assert.Equal(t, []string{"install", "--upgrade", "cyclonedx-bom==3.11.0"}, utils.ExecMockRunner.Calls[3].Params)
   104  		assert.Equal(t, filepath.Join("dummy", "bin", "cyclonedx-py"), utils.ExecMockRunner.Calls[4].Exec)
   105  		assert.Equal(t, []string{"--e", "--output", "bom-pip.xml", "--format", "xml", "--schema-version", "1.4"}, utils.ExecMockRunner.Calls[4].Params)
   106  	})
   107  }