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

     1  //go:build unit
     2  // +build unit
     3  
     4  package jenkins
     5  
     6  import (
     7  	"context"
     8  	"fmt"
     9  	"testing"
    10  
    11  	"github.com/SAP/jenkins-library/pkg/jenkins/mocks"
    12  	"github.com/bndr/gojenkins"
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/mock"
    15  )
    16  
    17  func TestInterfaceCompatibility(t *testing.T) {
    18  	var _ Jenkins = new(gojenkins.Jenkins)
    19  	var _ Build = new(gojenkins.Build)
    20  }
    21  
    22  func TestTriggerJob(t *testing.T) {
    23  	ctx := context.Background()
    24  	jobParameters := map[string]string{}
    25  
    26  	t.Run("error - job not updated", func(t *testing.T) {
    27  		// init
    28  		jenkins := &mocks.Jenkins{}
    29  		jenkins.Test(t)
    30  		job := &mocks.Job{}
    31  		job.Test(t)
    32  		job.
    33  			On("Poll", ctx).Return(404, fmt.Errorf(mock.Anything))
    34  		// test
    35  		build, err := TriggerJob(ctx, jenkins, job, jobParameters)
    36  		// asserts
    37  		job.AssertExpectations(t)
    38  		jenkins.AssertExpectations(t)
    39  		assert.EqualError(t, err, fmt.Sprintf("failed to load job: %s", mock.Anything))
    40  		assert.Nil(t, build)
    41  	})
    42  	t.Run("error - task not started", func(t *testing.T) {
    43  		// init
    44  		queueID := int64(0)
    45  		jenkins := &mocks.Jenkins{}
    46  		jenkins.Test(t)
    47  		job := &mocks.Job{}
    48  		job.Test(t)
    49  		job.
    50  			On("Poll", ctx).Return(200, nil).
    51  			On("InvokeSimple", ctx, map[string]string{}).
    52  			Return(queueID, fmt.Errorf(mock.Anything))
    53  		// test
    54  		build, err := TriggerJob(ctx, jenkins, job, jobParameters)
    55  		// asserts
    56  		job.AssertExpectations(t)
    57  		jenkins.AssertExpectations(t)
    58  		assert.EqualError(t, err, mock.Anything)
    59  		assert.Nil(t, build)
    60  	})
    61  	t.Run("error - task already queued", func(t *testing.T) {
    62  		// init
    63  		queueID := int64(0)
    64  		jenkins := &mocks.Jenkins{}
    65  		jenkins.Test(t)
    66  		job := &mocks.Job{}
    67  		job.Test(t)
    68  		job.
    69  			On("Poll", ctx).Return(200, nil).
    70  			On("InvokeSimple", ctx, jobParameters).
    71  			Return(queueID, nil)
    72  		// test
    73  		build, err := TriggerJob(ctx, jenkins, job, jobParameters)
    74  		// asserts
    75  		job.AssertExpectations(t)
    76  		jenkins.AssertExpectations(t)
    77  		assert.EqualError(t, err, "unable to queue build")
    78  		assert.Nil(t, build)
    79  	})
    80  	t.Run("error - task not queued", func(t *testing.T) {
    81  		// init
    82  		queueID := int64(43)
    83  		jenkins := &mocks.Jenkins{}
    84  		jenkins.Test(t)
    85  		job := &mocks.Job{}
    86  		job.Test(t)
    87  		job.
    88  			On("Poll", ctx).Return(200, nil).
    89  			On("InvokeSimple", ctx, jobParameters).
    90  			Return(queueID, nil).
    91  			On("GetJob").
    92  			Return(&gojenkins.Job{})
    93  		jenkins.
    94  			On("GetBuildFromQueueID", ctx, mock.Anything, queueID).
    95  			Return(nil, fmt.Errorf(mock.Anything))
    96  		// test
    97  		build, err := TriggerJob(ctx, jenkins, job, jobParameters)
    98  		// asserts
    99  		job.AssertExpectations(t)
   100  		jenkins.AssertExpectations(t)
   101  		assert.EqualError(t, err, mock.Anything)
   102  		assert.Nil(t, build)
   103  	})
   104  	t.Run("success", func(t *testing.T) {
   105  		// init
   106  		queueID := int64(43)
   107  		jenkins := &mocks.Jenkins{}
   108  		jenkins.Test(t)
   109  		job := &mocks.Job{}
   110  		job.Test(t)
   111  		job.
   112  			On("Poll", ctx).Return(200, nil).
   113  			On("InvokeSimple", ctx, jobParameters).
   114  			Return(queueID, nil).
   115  			On("GetJob").
   116  			Return(&gojenkins.Job{})
   117  		jenkins.
   118  			On("GetBuildFromQueueID", ctx, mock.Anything, queueID).
   119  			Return(&gojenkins.Build{}, nil)
   120  		// test
   121  		build, err := TriggerJob(ctx, jenkins, job, jobParameters)
   122  		// asserts
   123  		jenkins.AssertExpectations(t)
   124  		assert.NoError(t, err)
   125  		assert.NotNil(t, build)
   126  	})
   127  }