2021-03-05 03:26:17 +01:00
package discord
import (
"encoding/json"
"net/http"
"strings"
"testing"
2021-10-04 03:53:59 +02:00
"github.com/TwinProduction/gatus/v3/alerting/alert"
"github.com/TwinProduction/gatus/v3/core"
2021-03-05 03:26:17 +01:00
)
func TestAlertProvider_IsValid ( t * testing . T ) {
invalidProvider := AlertProvider { WebhookURL : "" }
if invalidProvider . IsValid ( ) {
t . Error ( "provider shouldn't have been valid" )
}
validProvider := AlertProvider { WebhookURL : "http://example.com" }
if ! validProvider . IsValid ( ) {
t . Error ( "provider should've been valid" )
}
}
func TestAlertProvider_ToCustomAlertProviderWithResolvedAlert ( t * testing . T ) {
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 )
2021-03-05 03:26:17 +01:00
if customAlertProvider == nil {
t . Fatal ( "customAlertProvider shouldn't have been nil" )
}
if ! strings . Contains ( customAlertProvider . Body , "resolved" ) {
t . Error ( "customAlertProvider.Body should've contained the substring resolved" )
}
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 [ "embeds" ] . ( [ ] interface { } ) [ 0 ] . ( map [ string ] interface { } ) [ "description" ] {
t . Errorf ( "expected $.embeds[0].description to be %s, got %s" , expected , body [ "embeds" ] . ( [ ] interface { } ) [ 0 ] . ( map [ string ] interface { } ) [ "description" ] )
}
2021-03-05 03:26:17 +01:00
}
func TestAlertProvider_ToCustomAlertProviderWithTriggeredAlert ( t * testing . T ) {
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 )
2021-03-05 03:26:17 +01:00
if customAlertProvider == nil {
t . Fatal ( "customAlertProvider shouldn't have been nil" )
}
if ! strings . Contains ( customAlertProvider . Body , "triggered" ) {
t . Error ( "customAlertProvider.Body should've contained the substring triggered" )
}
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 ( ) )
}
}