github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/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  }