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

     1  package send
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  
     7  	"github.com/mongodb/grip/message"
     8  )
     9  
    10  // MockSender is a simple mock implementation of the Sender interface.
    11  type MockSender struct {
    12  	Messages []message.Composer
    13  	FlushErr bool
    14  	CloseErr bool
    15  	Closed   bool
    16  
    17  	*Base
    18  }
    19  
    20  // NewMockSender returns a MockSender with the given name.
    21  func NewMockSender(name string) *MockSender {
    22  	return &MockSender{
    23  		Base: NewBase(name),
    24  	}
    25  }
    26  
    27  // Send appends the message to the mock sender's messages slice.
    28  func (s *MockSender) Send(m message.Composer) {
    29  	s.Messages = append(s.Messages, m)
    30  }
    31  
    32  // Flush noops unless FlushErr is set to true, in which case an error is
    33  // returned.
    34  func (s *MockSender) Flush(_ context.Context) error {
    35  	if s.FlushErr {
    36  		return errors.New("flush error")
    37  	}
    38  
    39  	return nil
    40  }
    41  
    42  // Close sets Closed to true. If either CloseErr or Closed are set to true, an
    43  // error is returned.
    44  func (s *MockSender) Close() error {
    45  	if s.CloseErr {
    46  		return errors.New("close error")
    47  	}
    48  	if s.Closed {
    49  		return errors.New("mock sender already closed")
    50  	}
    51  	s.Closed = true
    52  
    53  	return nil
    54  }