Mock ExchangeDataCollection (#166)
Implements a mock exchange data collection that can be used to test without connecting to graph. Currently returns a "fixed message" but we can extend this to return anything that implements io.Reader e.g. a file that contains a serialized message.
This commit is contained in:
parent
2104e66fea
commit
0da0c786b5
@ -77,6 +77,7 @@ require (
|
|||||||
github.com/rs/xid v1.4.0 // indirect
|
github.com/rs/xid v1.4.0 // indirect
|
||||||
github.com/sirupsen/logrus v1.8.1 // indirect
|
github.com/sirupsen/logrus v1.8.1 // indirect
|
||||||
github.com/spf13/pflag v1.0.5 // indirect
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
|
github.com/stretchr/objx v0.2.0 // indirect
|
||||||
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
|
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
|
||||||
github.com/zeebo/blake3 v0.2.3 // indirect
|
github.com/zeebo/blake3 v0.2.3 // indirect
|
||||||
go.opentelemetry.io/otel v1.7.0 // indirect
|
go.opentelemetry.io/otel v1.7.0 // indirect
|
||||||
|
|||||||
@ -336,6 +336,8 @@ github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ=
|
|||||||
github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI=
|
github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
|
||||||
|
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
|
|||||||
63
src/internal/connector/mockconnector/mock_data_collection.go
Normal file
63
src/internal/connector/mockconnector/mock_data_collection.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package mockconnector
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
|
||||||
|
"github.com/alcionai/corso/internal/connector"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MockExchangeDataCollection represents a mock exchange mailbox
|
||||||
|
type MockExchangeDataCollection struct {
|
||||||
|
fullPath []string
|
||||||
|
messageCount int
|
||||||
|
messagesRead int
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
_ connector.DataCollection = &MockExchangeDataCollection{}
|
||||||
|
_ connector.DataStream = &MockExchangeData{}
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewMockExchangeDataCollection creates an data collection that will return the specified number of
|
||||||
|
// mock messages when iterated
|
||||||
|
func NewMockExchangeDataCollection(pathRepresentation []string, numMessagesToReturn int) *MockExchangeDataCollection {
|
||||||
|
collection := &MockExchangeDataCollection{
|
||||||
|
fullPath: pathRepresentation,
|
||||||
|
messageCount: numMessagesToReturn,
|
||||||
|
messagesRead: 0,
|
||||||
|
}
|
||||||
|
return collection
|
||||||
|
}
|
||||||
|
|
||||||
|
func (medc *MockExchangeDataCollection) FullPath() []string {
|
||||||
|
return append([]string{}, medc.fullPath...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NextItem returns either the next item in the collection or an error if one occurred.
|
||||||
|
// If not more items are available in the collection, returns (nil, nil).
|
||||||
|
func (medc *MockExchangeDataCollection) NextItem() (connector.DataStream, error) {
|
||||||
|
if medc.messagesRead < medc.messageCount {
|
||||||
|
medc.messagesRead++
|
||||||
|
// We can plug in whatever data we want here (can be an io.Reader to a test data file if needed)
|
||||||
|
m := []byte("test message")
|
||||||
|
return &MockExchangeData{uuid.NewString(), bytes.NewReader(m)}, nil
|
||||||
|
}
|
||||||
|
return nil, io.EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExchangeData represents a single item retrieved from exchange
|
||||||
|
type MockExchangeData struct {
|
||||||
|
id string
|
||||||
|
reader io.Reader
|
||||||
|
}
|
||||||
|
|
||||||
|
func (med *MockExchangeData) UUID() string {
|
||||||
|
return med.id
|
||||||
|
}
|
||||||
|
|
||||||
|
func (med *MockExchangeData) ToReader() io.Reader {
|
||||||
|
return med.reader
|
||||||
|
}
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
package mockconnector_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
|
"github.com/alcionai/corso/internal/connector/mockconnector"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MockExchangeDataCollectionSuite struct {
|
||||||
|
suite.Suite
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMockExchangeDataCollectionSuite(t *testing.T) {
|
||||||
|
suite.Run(t, new(MockExchangeDataCollectionSuite))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *MockExchangeDataCollectionSuite) TestMockExchangeDataCollection() {
|
||||||
|
mdc := mockconnector.NewMockExchangeDataCollection([]string{"foo", "bar"}, 2)
|
||||||
|
|
||||||
|
messagesRead := 0
|
||||||
|
|
||||||
|
for item, err := mdc.NextItem(); err != io.EOF; item, err = mdc.NextItem() {
|
||||||
|
_, err := ioutil.ReadAll(item.ToReader())
|
||||||
|
assert.NoError(suite.T(), err)
|
||||||
|
messagesRead++
|
||||||
|
}
|
||||||
|
assert.Equal(suite.T(), 2, messagesRead)
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user