MG-2166 - Generate mocks with mockery for readers (#2167)

Signed-off-by: JeffMboya <jangina.mboya@gmail.com>
This commit is contained in:
JMboya
2024-04-17 09:33:22 +03:00
committed by GitHub
parent 1ca5b87db4
commit 28b4087b69
4 changed files with 670 additions and 636 deletions
File diff suppressed because it is too large Load Diff
+2
View File
@@ -22,6 +22,8 @@ const (
var ErrReadMessages = errors.New("failed to read messages from database")
// MessageRepository specifies message reader API.
//
//go:generate mockery --name MessageRepository --output=./mocks --filename messages.go --quiet --note "Copyright (c) Abstract Machines"
type MessageRepository interface {
// ReadAll skips given number of messages for given channel and returns next
// limited number of messages.
+40 -151
View File
@@ -1,168 +1,57 @@
// Code generated by mockery v2.42.1. DO NOT EDIT.
// Copyright (c) Abstract Machines
// SPDX-License-Identifier: Apache-2.0
package mocks
import (
"encoding/json"
"sync"
"github.com/absmach/magistrala/pkg/transformers/senml"
"github.com/absmach/magistrala/readers"
readers "github.com/absmach/magistrala/readers"
mock "github.com/stretchr/testify/mock"
)
var _ readers.MessageRepository = (*messageRepositoryMock)(nil)
type messageRepositoryMock struct {
mutex sync.Mutex
messages map[string][]readers.Message
// MessageRepository is an autogenerated mock type for the MessageRepository type
type MessageRepository struct {
mock.Mock
}
// NewMessageRepository returns mock implementation of message repository.
func NewMessageRepository(chanID string, messages []readers.Message) readers.MessageRepository {
repo := map[string][]readers.Message{
chanID: messages,
// ReadAll provides a mock function with given fields: chanID, pm
func (_m *MessageRepository) ReadAll(chanID string, pm readers.PageMetadata) (readers.MessagesPage, error) {
ret := _m.Called(chanID, pm)
if len(ret) == 0 {
panic("no return value specified for ReadAll")
}
return &messageRepositoryMock{
mutex: sync.Mutex{},
messages: repo,
var r0 readers.MessagesPage
var r1 error
if rf, ok := ret.Get(0).(func(string, readers.PageMetadata) (readers.MessagesPage, error)); ok {
return rf(chanID, pm)
}
if rf, ok := ret.Get(0).(func(string, readers.PageMetadata) readers.MessagesPage); ok {
r0 = rf(chanID, pm)
} else {
r0 = ret.Get(0).(readers.MessagesPage)
}
if rf, ok := ret.Get(1).(func(string, readers.PageMetadata) error); ok {
r1 = rf(chanID, pm)
} else {
r1 = ret.Error(1)
}
return r0, r1
}
func (repo *messageRepositoryMock) ReadAll(chanID string, rpm readers.PageMetadata) (readers.MessagesPage, error) {
repo.mutex.Lock()
defer repo.mutex.Unlock()
// NewMessageRepository creates a new instance of MessageRepository. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewMessageRepository(t interface {
mock.TestingT
Cleanup(func())
}) *MessageRepository {
mock := &MessageRepository{}
mock.Mock.Test(t)
if rpm.Format != "" && rpm.Format != "messages" {
return readers.MessagesPage{}, nil
}
t.Cleanup(func() { mock.AssertExpectations(t) })
var query map[string]interface{}
meta, err := json.Marshal(rpm)
if err != nil {
return readers.MessagesPage{}, err
}
if err := json.Unmarshal(meta, &query); err != nil {
return readers.MessagesPage{}, err
}
var msgs []readers.Message
for _, m := range repo.messages[chanID] {
msg := m.(senml.Message)
ok := true
for name := range query {
switch name {
case "subtopic":
if rpm.Subtopic != msg.Subtopic {
ok = false
}
case "publisher":
if rpm.Publisher != msg.Publisher {
ok = false
}
case "name":
if rpm.Name != msg.Name {
ok = false
}
case "protocol":
if rpm.Protocol != msg.Protocol {
ok = false
}
case "v":
if msg.Value == nil {
ok = false
}
val, okQuery := query["comparator"]
if okQuery {
switch val.(string) {
case readers.LowerThanKey:
if msg.Value != nil &&
*msg.Value >= rpm.Value {
ok = false
}
case readers.LowerThanEqualKey:
if msg.Value != nil &&
*msg.Value > rpm.Value {
ok = false
}
case readers.GreaterThanKey:
if msg.Value != nil &&
*msg.Value <= rpm.Value {
ok = false
}
case readers.GreaterThanEqualKey:
if msg.Value != nil &&
*msg.Value < rpm.Value {
ok = false
}
case readers.EqualKey:
default:
if msg.Value != nil &&
*msg.Value != rpm.Value {
ok = false
}
}
}
case "vb":
if msg.BoolValue == nil ||
(msg.BoolValue != nil &&
*msg.BoolValue != rpm.BoolValue) {
ok = false
}
case "vs":
if msg.StringValue == nil ||
(msg.StringValue != nil &&
*msg.StringValue != rpm.StringValue) {
ok = false
}
case "vd":
if msg.DataValue == nil ||
(msg.DataValue != nil &&
*msg.DataValue != rpm.DataValue) {
ok = false
}
case "from":
if msg.Time < rpm.From {
ok = false
}
case "to":
if msg.Time >= rpm.To {
ok = false
}
}
if !ok {
break
}
}
if ok {
msgs = append(msgs, m)
}
}
numOfMessages := uint64(len(msgs))
if rpm.Offset >= numOfMessages {
return readers.MessagesPage{}, nil
}
if rpm.Limit < 1 {
return readers.MessagesPage{}, nil
}
end := rpm.Offset + rpm.Limit
if rpm.Offset+rpm.Limit > numOfMessages {
end = numOfMessages
}
return readers.MessagesPage{
PageMetadata: rpm,
Total: uint64(len(msgs)),
Messages: msgs[rpm.Offset:end],
}, nil
return mock
}