2020-09-19 22:29:08 +02:00
package slack
2020-10-22 03:18:06 +02:00
import (
2021-02-20 01:06:20 +01:00
"encoding/json"
"net/http"
2020-10-22 04:35:37 +02:00
"strings"
2020-10-22 03:18:06 +02:00
"testing"
2020-11-18 01:34:35 +01:00
2021-05-19 04:29:15 +02:00
"github.com/TwinProduction/gatus/alerting/alert"
2020-11-18 01:34:35 +01:00
"github.com/TwinProduction/gatus/core"
2020-10-22 03:18:06 +02:00
)
2020-09-19 22:29:08 +02:00
func TestAlertProvider_IsValid ( t * testing . T ) {
2020-10-23 22:29:20 +02:00
invalidProvider := AlertProvider { WebhookURL : "" }
2020-09-19 22:29:08 +02:00
if invalidProvider . IsValid ( ) {
t . Error ( "provider shouldn't have been valid" )
}
2020-10-23 22:29:20 +02:00
validProvider := AlertProvider { WebhookURL : "http://example.com" }
2020-09-19 22:29:08 +02:00
if ! validProvider . IsValid ( ) {
t . Error ( "provider should've been valid" )
}
}
2020-10-22 03:18:06 +02:00
2020-10-22 04:35:37 +02:00
func TestAlertProvider_ToCustomAlertProviderWithResolvedAlert ( t * testing . T ) {
2020-10-23 22:29:20 +02:00
provider := AlertProvider { WebhookURL : "http://example.com" }
2021-07-30 01:54:40 +02:00
alertDescription := "test"
customAlertProvider := provider . ToCustomAlertProvider ( & core . Service { Name : "svc" } , & alert . Alert { Description : & alertDescription } , & core . Result { ConditionResults : [ ] * core . ConditionResult { { Condition : "SUCCESSFUL_CONDITION" , Success : true } } } , true )
2020-10-22 03:18:06 +02:00
if customAlertProvider == nil {
2021-02-20 01:06:20 +01:00
t . Fatal ( "customAlertProvider shouldn't have been nil" )
2020-10-22 03:18:06 +02:00
}
2020-10-22 04:35:37 +02:00
if ! strings . Contains ( customAlertProvider . Body , "resolved" ) {
t . Error ( "customAlertProvider.Body should've contained the substring resolved" )
}
2021-02-20 01:06:20 +01:00
if customAlertProvider . URL != "http://example.com" {
t . Errorf ( "expected URL to be %s, got %s" , "http://example.com" , customAlertProvider . URL )
}
if customAlertProvider . Method != http . MethodPost {
t . Errorf ( "expected method to be %s, got %s" , http . MethodPost , customAlertProvider . Method )
}
body := make ( map [ string ] interface { } )
err := json . Unmarshal ( [ ] byte ( customAlertProvider . Body ) , & body )
if err != nil {
t . Error ( "expected body to be valid JSON, got error:" , err . Error ( ) )
}
2021-07-30 01:54:40 +02:00
if expected := "An alert for *svc* has been resolved after passing successfully 0 time(s) in a row:\n> test" ; expected != body [ "attachments" ] . ( [ ] interface { } ) [ 0 ] . ( map [ string ] interface { } ) [ "text" ] {
t . Errorf ( "expected $.attachments[0].description to be %s, got %s" , expected , body [ "attachments" ] . ( [ ] interface { } ) [ 0 ] . ( map [ string ] interface { } ) [ "text" ] )
}
2020-10-22 04:35:37 +02:00
}
func TestAlertProvider_ToCustomAlertProviderWithTriggeredAlert ( t * testing . T ) {
2020-10-23 22:29:20 +02:00
provider := AlertProvider { WebhookURL : "http://example.com" }
2021-05-19 04:29:15 +02:00
customAlertProvider := provider . ToCustomAlertProvider ( & core . Service { } , & alert . Alert { } , & core . Result { ConditionResults : [ ] * core . ConditionResult { { Condition : "UNSUCCESSFUL_CONDITION" , Success : false } } } , false )
2020-10-22 04:35:37 +02:00
if customAlertProvider == nil {
2021-02-20 01:06:20 +01:00
t . Fatal ( "customAlertProvider shouldn't have been nil" )
2020-10-22 04:35:37 +02:00
}
if ! strings . Contains ( customAlertProvider . Body , "triggered" ) {
t . Error ( "customAlertProvider.Body should've contained the substring triggered" )
}
2021-02-20 01:06:20 +01:00
if customAlertProvider . URL != "http://example.com" {
t . Errorf ( "expected URL to be %s, got %s" , "http://example.com" , customAlertProvider . URL )
}
if customAlertProvider . Method != http . MethodPost {
t . Errorf ( "expected method to be %s, got %s" , http . MethodPost , customAlertProvider . Method )
}
body := make ( map [ string ] interface { } )
err := json . Unmarshal ( [ ] byte ( customAlertProvider . Body ) , & body )
if err != nil {
t . Error ( "expected body to be valid JSON, got error:" , err . Error ( ) )
}
2020-10-22 03:18:06 +02:00
}