Skip to content

Commit

Permalink
fix: adding guard condition for empty notification list in notify fun… (
Browse files Browse the repository at this point in the history
#182)

* fix: adding guard condition for empty notification list in notify function

* fix:test case
  • Loading branch information
utsav14nov authored Oct 8, 2024
1 parent 74a1ba6 commit 8ac4398
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 0 deletions.
3 changes: 3 additions & 0 deletions plugins/notifiers/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ type NotifyManager struct {

func (m *NotifyManager) Notify(ctx context.Context, notification []domain.Notification) []error {
var errs []error
if len(notification) == 0 {
return errs
}
for i, client := range m.clients {
// evaluate criteria
config := m.configs[i]
Expand Down
104 changes: 104 additions & 0 deletions plugins/notifiers/client_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package notifiers

import (
"context"
"fmt"
"reflect"
"testing"

Expand Down Expand Up @@ -215,3 +217,105 @@ func TestNewSlackLarkConfig(t *testing.T) {
})
}
}
func TestNotify(t *testing.T) {
var errs []error
type fields struct {
clients []Client
configs []Config
}
type args struct {
ctx context.Context
notification []domain.Notification
}
tests := []struct {
name string
fields fields
args args
want []error
}{
{
name: "should return no errors when notifications are empty",
fields: fields{
clients: []Client{},
configs: []Config{},
},
args: args{
ctx: context.Background(),
notification: []domain.Notification{},
},
want: errs,
},
{
name: "should return error when criteria does not evaluate to boolean",
fields: fields{
clients: []Client{&mockClient{}},
configs: []Config{
{
Criteria: "1 + 1",
},
},
},
args: args{
ctx: context.Background(),
notification: []domain.Notification{
{User: "test@example.com"},
},
},
want: []error{fmt.Errorf("notifier expression did not evaluate to a boolean: 1 + 1")},
},
{
name: "should notify client when criteria evaluates to true",
fields: fields{
clients: []Client{&mockClient{}},
configs: []Config{
{
Criteria: "1 == 1",
},
},
},
args: args{
ctx: context.Background(),
notification: []domain.Notification{
{User: "test@example.com"},
},
},
want: errs,
},
{
name: "should not notify client when criteria evaluates to false",
fields: fields{
clients: []Client{&mockClient{}},
configs: []Config{
{
Criteria: "1 == 2",
},
},
},
args: args{
ctx: context.Background(),
notification: []domain.Notification{
{User: "test@example.com"},
},
},
want: errs,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
m := &NotifyManager{
clients: tt.fields.clients,
configs: tt.fields.configs,
}
fmt.Println()
if got := m.Notify(tt.args.ctx, tt.args.notification); !reflect.DeepEqual(got, tt.want) {
t.Errorf("Notify() = %v, want %v", got, tt.want)
}
})
}
}

type mockClient struct{}

func (m *mockClient) Notify(ctx context.Context, notifications []domain.Notification) []error {
return nil
}

0 comments on commit 8ac4398

Please sign in to comment.