github.com/jaylevin/jenkins-library@v1.230.4/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  }