package breaker import ( "context" "errors" "testing" "github.com/stretchr/testify/assert" ) func Test_breaker_Do(t *testing.T) { type args struct { inner func(context.Context) error } tests := []struct { name string subject *breaker args args wantErr bool }{{ name: "empty", subject: NewBreaker("", nil), wantErr: false, }, { name: "no error", subject: NewBreaker("", nil), args: args{ inner: func(context.Context) error { return nil }, }, wantErr: false, }, { name: "with error", subject: NewBreaker("", nil), args: args{ inner: func(context.Context) error { return errors.New("foo") }, }, wantErr: true, }, { name: "with break", subject: NewBreaker("", func(context.Context) bool { return true }), args: args{ inner: func(context.Context) error { return errors.New("foo") }, }, wantErr: false, }, { name: "with metrics", subject: &breaker{ open: func(context.Context) bool { return true }, }, args: args{ inner: func(context.Context) error { return errors.New("foo") }, }, wantErr: false, }} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { err := tt.subject.Do(context.TODO(), tt.args.inner) if tt.wantErr { assert.Error(t, err) } else { assert.NoError(t, err) } }) } }