grafana/pkg/services/notifications/testing.go
Matthew Jacobson efa0d90093
Alerting: Fix Teams notifier not failing on 200 response with error (#52254)
Team's webhook API does not always use the status code to communicate errors.
There are cases where it returns 200 and an error message in the body.
For example, 429 - Too Many Requests or when the message is too large.
Instead, what we should be looking for is a response body = "1".

https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL#send-messages-using-curl-and-powershell
2022-07-14 13:15:18 -04:00

41 lines
836 B
Go

package notifications
import "fmt"
type FakeMailer struct {
Sent []*Message
}
func NewFakeMailer() *FakeMailer {
return &FakeMailer{
Sent: make([]*Message, 0),
}
}
func (fm *FakeMailer) Send(messages ...*Message) (int, error) {
sentEmailsCount := 0
for _, msg := range messages {
fm.Sent = append(fm.Sent, msg)
sentEmailsCount++
}
return sentEmailsCount, nil
}
type FakeDisconnectedMailer struct{}
func NewFakeDisconnectedMailer() *FakeDisconnectedMailer {
return &FakeDisconnectedMailer{}
}
func (fdm *FakeDisconnectedMailer) Send(messages ...*Message) (int, error) {
return 0, fmt.Errorf("connect: connection refused")
}
// NetClient is used to export original in test.
var NetClient = &netClient
// SetWebhookClient is used to mock in test.
func SetWebhookClient(client WebhookClient) {
netClient = client
}