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