mirror of
https://github.com/grafana/grafana.git
synced 2024-12-01 04:59:15 -06:00
125 lines
3.6 KiB
Go
125 lines
3.6 KiB
Go
package notifiers
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
|
"github.com/grafana/grafana/pkg/models"
|
|
"github.com/grafana/grafana/pkg/services/alerting"
|
|
"github.com/grafana/grafana/pkg/services/encryption/ossencryption"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestThreemaNotifier(t *testing.T) {
|
|
t.Run("Parsing alert notification from settings", func(t *testing.T) {
|
|
t.Run("empty settings should return error", func(t *testing.T) {
|
|
json := `{ }`
|
|
|
|
settingsJSON, _ := simplejson.NewJson([]byte(json))
|
|
model := &models.AlertNotification{
|
|
Name: "threema_testing",
|
|
Type: "threema",
|
|
Settings: settingsJSON,
|
|
}
|
|
|
|
_, err := NewThreemaNotifier(model, ossencryption.ProvideService().GetDecryptedValue)
|
|
require.Error(t, err)
|
|
})
|
|
|
|
t.Run("valid settings should be parsed successfully", func(t *testing.T) {
|
|
json := `
|
|
{
|
|
"gateway_id": "*3MAGWID",
|
|
"recipient_id": "ECHOECHO",
|
|
"api_secret": "1234"
|
|
}`
|
|
|
|
settingsJSON, _ := simplejson.NewJson([]byte(json))
|
|
model := &models.AlertNotification{
|
|
Name: "threema_testing",
|
|
Type: "threema",
|
|
Settings: settingsJSON,
|
|
}
|
|
|
|
not, err := NewThreemaNotifier(model, ossencryption.ProvideService().GetDecryptedValue)
|
|
require.Nil(t, err)
|
|
threemaNotifier := not.(*ThreemaNotifier)
|
|
|
|
require.Nil(t, err)
|
|
require.Equal(t, "threema_testing", threemaNotifier.Name)
|
|
require.Equal(t, "threema", threemaNotifier.Type)
|
|
require.Equal(t, "*3MAGWID", threemaNotifier.GatewayID)
|
|
require.Equal(t, "ECHOECHO", threemaNotifier.RecipientID)
|
|
require.Equal(t, "1234", threemaNotifier.APISecret)
|
|
})
|
|
|
|
t.Run("invalid Threema Gateway IDs should be rejected (prefix)", func(t *testing.T) {
|
|
json := `
|
|
{
|
|
"gateway_id": "ECHOECHO",
|
|
"recipient_id": "ECHOECHO",
|
|
"api_secret": "1234"
|
|
}`
|
|
|
|
settingsJSON, _ := simplejson.NewJson([]byte(json))
|
|
model := &models.AlertNotification{
|
|
Name: "threema_testing",
|
|
Type: "threema",
|
|
Settings: settingsJSON,
|
|
}
|
|
|
|
not, err := NewThreemaNotifier(model, ossencryption.ProvideService().GetDecryptedValue)
|
|
require.Nil(t, not)
|
|
var valErr alerting.ValidationError
|
|
require.True(t, errors.As(err, &valErr))
|
|
require.Equal(t, "Invalid Threema Gateway ID: Must start with a *", valErr.Reason)
|
|
})
|
|
|
|
t.Run("invalid Threema Gateway IDs should be rejected (length)", func(t *testing.T) {
|
|
json := `
|
|
{
|
|
"gateway_id": "*ECHOECHO",
|
|
"recipient_id": "ECHOECHO",
|
|
"api_secret": "1234"
|
|
}`
|
|
|
|
settingsJSON, _ := simplejson.NewJson([]byte(json))
|
|
model := &models.AlertNotification{
|
|
Name: "threema_testing",
|
|
Type: "threema",
|
|
Settings: settingsJSON,
|
|
}
|
|
|
|
not, err := NewThreemaNotifier(model, ossencryption.ProvideService().GetDecryptedValue)
|
|
require.Nil(t, not)
|
|
var valErr alerting.ValidationError
|
|
require.True(t, errors.As(err, &valErr))
|
|
require.Equal(t, "Invalid Threema Gateway ID: Must be 8 characters long", valErr.Reason)
|
|
})
|
|
|
|
t.Run("invalid Threema Recipient IDs should be rejected (length)", func(t *testing.T) {
|
|
json := `
|
|
{
|
|
"gateway_id": "*3MAGWID",
|
|
"recipient_id": "ECHOECH",
|
|
"api_secret": "1234"
|
|
}`
|
|
|
|
settingsJSON, _ := simplejson.NewJson([]byte(json))
|
|
model := &models.AlertNotification{
|
|
Name: "threema_testing",
|
|
Type: "threema",
|
|
Settings: settingsJSON,
|
|
}
|
|
|
|
not, err := NewThreemaNotifier(model, ossencryption.ProvideService().GetDecryptedValue)
|
|
require.Nil(t, not)
|
|
var valErr alerting.ValidationError
|
|
require.True(t, errors.As(err, &valErr))
|
|
require.Equal(t, "Invalid Threema Recipient ID: Must be 8 characters long", valErr.Reason)
|
|
})
|
|
})
|
|
}
|