github.com/SAP/jenkins-library@v1.362.0/cmd/batsExecuteTests_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package cmd 5 6 import ( 7 "fmt" 8 "testing" 9 10 "github.com/SAP/jenkins-library/pkg/mock" 11 "github.com/go-git/go-git/v5" 12 "github.com/pkg/errors" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 type batsExecuteTestsMockUtils struct { 17 *mock.ExecMockRunner 18 *mock.FilesMock 19 } 20 21 func (b batsExecuteTestsMockUtils) CloneRepo(URL string) error { 22 if URL != "https://github.com/bats-core/bats-core.git" { 23 return git.ErrRepositoryNotExists 24 } 25 return nil 26 } 27 28 func newBatsExecuteTestsTestsUtils() batsExecuteTestsMockUtils { 29 utils := batsExecuteTestsMockUtils{ 30 ExecMockRunner: &mock.ExecMockRunner{}, 31 FilesMock: &mock.FilesMock{}, 32 } 33 return utils 34 } 35 36 func TestRunBatsExecuteTests(t *testing.T) { 37 t.Parallel() 38 t.Run("success case", func(t *testing.T) { 39 t.Parallel() 40 config := &batsExecuteTestsOptions{ 41 OutputFormat: "junit", 42 Repository: "https://github.com/bats-core/bats-core.git", 43 TestPackage: "piper-bats", 44 TestPath: "src/test", 45 } 46 47 mockUtils := newBatsExecuteTestsTestsUtils() 48 err := runBatsExecuteTests(config, nil, &mockUtils) 49 assert.NoError(t, err) 50 assert.True(t, mockUtils.HasFile("TEST-"+config.TestPackage+".tap")) 51 assert.True(t, mockUtils.HasFile("TEST-"+config.TestPackage+".xml")) 52 }) 53 54 t.Run("output tap case", func(t *testing.T) { 55 t.Parallel() 56 config := &batsExecuteTestsOptions{ 57 OutputFormat: "tap", 58 Repository: "https://github.com/bats-core/bats-core.git", 59 TestPackage: "piper-bats", 60 TestPath: "src/test", 61 } 62 63 mockUtils := newBatsExecuteTestsTestsUtils() 64 err := runBatsExecuteTests(config, nil, &mockUtils) 65 assert.NoError(t, err) 66 assert.True(t, mockUtils.HasFile("TEST-"+config.TestPackage+".tap")) 67 assert.False(t, mockUtils.HasFile("TEST-"+config.TestPackage+".xml")) 68 }) 69 70 t.Run("output format failed case", func(t *testing.T) { 71 t.Parallel() 72 config := &batsExecuteTestsOptions{ 73 OutputFormat: "fail", 74 Repository: "https://github.com/bats-core/bats-core.git", 75 TestPackage: "piper-bats", 76 TestPath: "src/test", 77 } 78 79 mockUtils := newBatsExecuteTestsTestsUtils() 80 err := runBatsExecuteTests(config, nil, &mockUtils) 81 assert.EqualError(t, err, "output format 'fail' is incorrect. Possible drivers: tap, junit") 82 }) 83 84 t.Run("failed to clone repo case", func(t *testing.T) { 85 t.Parallel() 86 config := &batsExecuteTestsOptions{ 87 OutputFormat: "junit", 88 Repository: "fail", 89 TestPackage: "piper-bats", 90 TestPath: "src/test", 91 } 92 93 mockUtils := newBatsExecuteTestsTestsUtils() 94 err := runBatsExecuteTests(config, nil, &mockUtils) 95 96 expectedError := fmt.Errorf("couldn't pull %s repository: %w", config.Repository, git.ErrRepositoryNotExists) 97 assert.EqualError(t, err, expectedError.Error()) 98 }) 99 100 t.Run("failed to run bats case", func(t *testing.T) { 101 t.Parallel() 102 config := &batsExecuteTestsOptions{ 103 OutputFormat: "tap", 104 Repository: "https://github.com/bats-core/bats-core.git", 105 TestPackage: "piper-bats", 106 TestPath: "src/test", 107 } 108 109 mockUtils := batsExecuteTestsMockUtils{ 110 ExecMockRunner: &mock.ExecMockRunner{ShouldFailOnCommand: map[string]error{"bats-core/bin/bats": errors.New("error case")}}, 111 FilesMock: &mock.FilesMock{}, 112 } 113 err := runBatsExecuteTests(config, nil, &mockUtils) 114 assert.Contains(t, fmt.Sprint(err), "failed to run bats test") 115 116 assert.False(t, mockUtils.HasFile("TEST-"+config.TestPackage+".tap")) 117 assert.False(t, mockUtils.HasFile("TEST-"+config.TestPackage+".xml")) 118 }) 119 }