github.com/mongodb/grip@v0.0.0-20240213223901-f906268d82b9/send/jira_comment_test.go (about)

     1  package send
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/mongodb/grip/level"
     8  	"github.com/mongodb/grip/message"
     9  	"github.com/stretchr/testify/suite"
    10  )
    11  
    12  type JiraCommentSuite struct {
    13  	opts *JiraOptions
    14  	suite.Suite
    15  }
    16  
    17  func TestJiraCommentSuite(t *testing.T) {
    18  	suite.Run(t, new(JiraCommentSuite))
    19  }
    20  
    21  func (j *JiraCommentSuite) SetupTest() {
    22  	j.opts = &JiraOptions{
    23  		BaseURL: "url",
    24  		BasicAuthOpts: JiraBasicAuth{
    25  			Username: "username",
    26  			Password: "password",
    27  		},
    28  		client: &jiraClientMock{},
    29  		Name:   "1234",
    30  	}
    31  }
    32  
    33  func (j *JiraCommentSuite) TestMockSenderWithNewConstructor() {
    34  	sender, err := NewJiraCommentLogger(context.Background(), "1234", j.opts, LevelInfo{level.Trace, level.Info})
    35  	j.NotNil(sender)
    36  	j.NoError(err)
    37  }
    38  
    39  func (j *JiraCommentSuite) TestConstructorMustCreate() {
    40  	j.opts.client = &jiraClientMock{failCreate: true}
    41  	sender, err := NewJiraCommentLogger(context.Background(), "1234", j.opts, LevelInfo{level.Trace, level.Info})
    42  	j.Nil(sender)
    43  	j.Error(err)
    44  }
    45  
    46  func (j *JiraCommentSuite) TestConstructorMustPassAuthTest() {
    47  	j.opts.client = &jiraClientMock{failAuth: true}
    48  	sender, err := NewJiraCommentLogger(context.Background(), "1234", j.opts, LevelInfo{level.Trace, level.Info})
    49  	j.Nil(sender)
    50  	j.Error(err)
    51  }
    52  
    53  func (j *JiraCommentSuite) TestConstructorErrorsWithInvalidConfigs() {
    54  	sender, err := NewJiraCommentLogger(context.Background(), "1234", nil, LevelInfo{level.Trace, level.Info})
    55  	j.Nil(sender)
    56  	j.Error(err)
    57  
    58  	sender, err = NewJiraLogger(context.Background(), &JiraOptions{}, LevelInfo{level.Trace, level.Info})
    59  	j.Nil(sender)
    60  	j.Error(err)
    61  }
    62  
    63  func (j *JiraCommentSuite) TestSendMethod() {
    64  	numShouldHaveSent := 0
    65  	sender, err := NewJiraCommentLogger(context.Background(), "1234", j.opts, LevelInfo{level.Trace, level.Info})
    66  	j.NoError(err)
    67  	j.Require().NotNil(sender)
    68  
    69  	mock, ok := j.opts.client.(*jiraClientMock)
    70  	j.True(ok)
    71  	j.Equal(mock.numSent, 0)
    72  
    73  	m := message.NewDefaultMessage(level.Debug, "sending debug level comment")
    74  	sender.Send(m)
    75  	j.Equal(mock.numSent, numShouldHaveSent)
    76  
    77  	m = message.NewDefaultMessage(level.Alert, "sending alert level comment")
    78  	sender.Send(m)
    79  	numShouldHaveSent++
    80  	j.Equal(mock.numSent, numShouldHaveSent)
    81  
    82  	m = message.NewDefaultMessage(level.Emergency, "sending emergency level comment")
    83  	sender.Send(m)
    84  	numShouldHaveSent++
    85  	j.Equal(mock.numSent, numShouldHaveSent)
    86  }
    87  
    88  func (j *JiraCommentSuite) TestSendMethodWithError() {
    89  	sender, err := NewJiraCommentLogger(context.Background(), "1234", j.opts, LevelInfo{level.Trace, level.Info})
    90  	j.NotNil(sender)
    91  	j.NoError(err)
    92  
    93  	mock, ok := j.opts.client.(*jiraClientMock)
    94  	j.True(ok)
    95  	j.Equal(mock.numSent, 0)
    96  	j.False(mock.failSend)
    97  
    98  	m := message.NewDefaultMessage(level.Alert, "test")
    99  	sender.Send(m)
   100  	j.Equal(mock.numSent, 1)
   101  
   102  	mock.failSend = true
   103  	sender.Send(m)
   104  	j.Equal(mock.numSent, 1)
   105  }
   106  
   107  func (j *JiraCommentSuite) TestCreateMethodChangesClientState() {
   108  	base := &jiraClientImpl{}
   109  	new := &jiraClientImpl{}
   110  
   111  	j.Equal(base, new)
   112  	j.NoError(new.CreateClient(nil, "foo"))
   113  	j.NotEqual(base, new)
   114  }
   115  
   116  func (j *JiraCommentSuite) TestSendWithJiraIssueComposer() {
   117  	c := message.NewJIRACommentMessage(level.Notice, "ABC-123", "Hi")
   118  
   119  	sender, err := NewJiraCommentLogger(context.Background(), "XYZ-123", j.opts, LevelInfo{level.Trace, level.Info})
   120  	j.NoError(err)
   121  	j.Require().NotNil(sender)
   122  
   123  	sender.Send(c)
   124  
   125  	mock, ok := j.opts.client.(*jiraClientMock)
   126  	j.True(ok)
   127  	j.Equal(1, mock.numSent)
   128  	j.Equal("ABC-123", mock.lastIssue)
   129  }