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 }