Initial QSfera import
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/stretchr/testify/mock"
|
||||
"go-micro.dev/v4/client"
|
||||
|
||||
"github.com/qsfera/server/pkg/log"
|
||||
settingsmsg "github.com/qsfera/server/protogen/gen/qsfera/messages/settings/v0"
|
||||
settings "github.com/qsfera/server/protogen/gen/qsfera/services/settings/v0"
|
||||
settingsmocks "github.com/qsfera/server/protogen/gen/qsfera/services/settings/v0/mocks"
|
||||
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
var _ = Describe("NotificationFilter", func() {
|
||||
var (
|
||||
testLogger = log.NewLogger()
|
||||
|
||||
vs *settingsmocks.ValueService
|
||||
s intervalSplitter
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
vs = &settingsmocks.ValueService{}
|
||||
s = intervalSplitter{
|
||||
log: testLogger,
|
||||
valueClient: vs,
|
||||
}
|
||||
})
|
||||
|
||||
It("handles connection errors", func() {
|
||||
vs.On("GetValueByUniqueIdentifiers", mock.Anything, mock.Anything).Return(nil, errors.New("no connection to ValueService"))
|
||||
|
||||
instant, daily, weekly := s.execute(context.TODO(), newUsers("foo"))
|
||||
Expect(instant).To(Equal(newUsers("foo")))
|
||||
Expect(daily).To(BeEmpty())
|
||||
Expect(weekly).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("handles no setting in ValueService response", func() {
|
||||
vs.On("GetValueByUniqueIdentifiers", mock.Anything, mock.Anything).Return(&settings.GetValueResponse{}, nil)
|
||||
|
||||
instant, daily, weekly := s.execute(context.TODO(), newUsers("foo"))
|
||||
Expect(instant).To(Equal(newUsers("foo")))
|
||||
Expect(daily).To(BeEmpty())
|
||||
Expect(weekly).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("handles nil response", func() {
|
||||
vs.On("GetValueByUniqueIdentifiers", mock.Anything, mock.Anything).Return(nil, nil)
|
||||
|
||||
instant, daily, weekly := s.execute(context.TODO(), newUsers("foo"))
|
||||
Expect(instant).To(Equal(newUsers("foo")))
|
||||
Expect(daily).To(BeEmpty())
|
||||
Expect(weekly).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("handles nil input user", func() {
|
||||
vs.On("GetValueByUniqueIdentifiers", mock.Anything, mock.Anything).Return(nil, nil)
|
||||
|
||||
instant, daily, weekly := s.execute(context.TODO(), nil)
|
||||
Expect(instant).To(BeEmpty())
|
||||
Expect(daily).To(BeEmpty())
|
||||
Expect(weekly).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("handles never interval", func() {
|
||||
vs.On("GetValueByUniqueIdentifiers", mock.Anything, mock.Anything).Return(newGetValueResponseStringValue("never"), nil)
|
||||
|
||||
instant, daily, weekly := s.execute(context.TODO(), newUsers("foo"))
|
||||
Expect(instant).To(BeEmpty())
|
||||
Expect(daily).To(BeEmpty())
|
||||
Expect(weekly).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("handles instant interval", func() {
|
||||
vs.On("GetValueByUniqueIdentifiers", mock.Anything, mock.Anything).Return(newGetValueResponseStringValue("instant"), nil)
|
||||
|
||||
instant, daily, weekly := s.execute(context.TODO(), newUsers("foo"))
|
||||
Expect(instant).To(Equal(newUsers("foo")))
|
||||
Expect(daily).To(BeEmpty())
|
||||
Expect(weekly).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("handles daily interval", func() {
|
||||
vs.On("GetValueByUniqueIdentifiers", mock.Anything, mock.Anything).Return(newGetValueResponseStringValue("daily"), nil)
|
||||
|
||||
instant, daily, weekly := s.execute(context.TODO(), newUsers("foo"))
|
||||
Expect(instant).To(BeEmpty())
|
||||
Expect(daily).To(Equal(newUsers("foo")))
|
||||
Expect(weekly).To(BeEmpty())
|
||||
})
|
||||
|
||||
It("handles weekly interval", func() {
|
||||
vs.On("GetValueByUniqueIdentifiers", mock.Anything, mock.Anything).Return(newGetValueResponseStringValue("weekly"), nil)
|
||||
|
||||
instant, daily, weekly := s.execute(context.TODO(), newUsers("foo"))
|
||||
Expect(instant).To(BeEmpty())
|
||||
Expect(daily).To(BeEmpty())
|
||||
Expect(weekly).To(Equal(newUsers("foo")))
|
||||
})
|
||||
|
||||
It("handles multiple users and intervals", func() {
|
||||
vs.On("GetValueByUniqueIdentifiers", mock.Anything, mock.Anything).Return(func(ctx context.Context, req *settings.GetValueByUniqueIdentifiersRequest, opts ...client.CallOption) *settings.GetValueResponse {
|
||||
if strings.Contains(req.AccountUuid, "never") {
|
||||
return newGetValueResponseStringValue("never")
|
||||
} else if strings.Contains(req.AccountUuid, "instant") {
|
||||
return newGetValueResponseStringValue("instant")
|
||||
} else if strings.Contains(req.AccountUuid, "daily") {
|
||||
return newGetValueResponseStringValue("daily")
|
||||
} else if strings.Contains(req.AccountUuid, "weekly") {
|
||||
return newGetValueResponseStringValue("weekly")
|
||||
}
|
||||
return nil
|
||||
}, nil)
|
||||
|
||||
instant, daily, weekly := s.execute(context.TODO(), newUsers("never1", "instant1", "daily1", "weekly1", "never2", "instant2", "daily2", "weekly2"))
|
||||
Expect(instant).To(Equal(newUsers("instant1", "instant2")))
|
||||
Expect(daily).To(Equal(newUsers("daily1", "daily2")))
|
||||
Expect(weekly).To(Equal(newUsers("weekly1", "weekly2")))
|
||||
})
|
||||
})
|
||||
|
||||
func newGetValueResponseStringValue(strVal string) *settings.GetValueResponse {
|
||||
return &settings.GetValueResponse{Value: &settingsmsg.ValueWithIdentifier{
|
||||
Value: &settingsmsg.Value{
|
||||
Value: &settingsmsg.Value_StringValue{
|
||||
StringValue: strVal,
|
||||
},
|
||||
},
|
||||
}}
|
||||
}
|
||||
|
||||
func newUsers(ids ...string) []*user.User {
|
||||
var users []*user.User
|
||||
for _, s := range ids {
|
||||
users = append(users, &user.User{Id: &user.UserId{OpaqueId: s}})
|
||||
}
|
||||
return users
|
||||
}
|
||||
Reference in New Issue
Block a user